Merge Richard Cohen's 'declare-type-search-param' into stable.

This commit is contained in:
John Ralls
2023-07-16 09:44:50 -07:00
5 changed files with 101 additions and 150 deletions

View File

@@ -809,7 +809,7 @@ get_comb_box_widget (GNCSearchWindow *sw, struct _crit_data *data)
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
SEARCH_COL_NAME, _(param->title),
SEARCH_COL_NAME, _(gnc_search_param_get_title (param)),
SEARCH_COL_POINTER, param,
-1);
@@ -875,16 +875,16 @@ gnc_search_dialog_book_option_changed (gpointer new_val, gpointer user_data)
if (*new_data)
{
if (strcmp (param->title, N_("Action")) == 0)
if (strcmp (gnc_search_param_get_title (param), N_("Action")) == 0)
gnc_search_param_set_title (param, N_("Number/Action"));
if (strcmp (param->title, N_("Number")) == 0)
if (strcmp (gnc_search_param_get_title (param), N_("Number")) == 0)
gnc_search_param_set_title (param, N_("Transaction Number"));
}
else
{
if (strcmp (param->title, N_("Number/Action")) == 0)
if (strcmp (gnc_search_param_get_title (param), N_("Number/Action")) == 0)
gnc_search_param_set_title (param, N_("Action"));
if (strcmp (param->title, N_("Transaction Number")) == 0)
if (strcmp (gnc_search_param_get_title (param), N_("Transaction Number")) == 0)
gnc_search_param_set_title (param, N_("Number"));
}
}

View File

@@ -310,15 +310,15 @@ gnc_query_view_init_view (GNCQueryView *qview)
col = gtk_tree_view_column_new ();
/* Set the column title */
gtk_tree_view_column_set_title (col, (gchar *) ((GNCSearchParam *) param)->title);
gtk_tree_view_column_set_title (col, gnc_search_param_get_title (GNC_SEARCH_PARAM (param)));
/* pack tree view column into tree view */
gtk_tree_view_append_column (view, col);
/* Get justification */
if (((GNCSearchParam *) param)->justify == GTK_JUSTIFY_CENTER)
if (gnc_search_param_get_justify (GNC_SEARCH_PARAM (param)) == GTK_JUSTIFY_CENTER)
algn = 0.5;
else if (((GNCSearchParam *) param)->justify == GTK_JUSTIFY_RIGHT)
else if (gnc_search_param_get_justify (GNC_SEARCH_PARAM (param)) == GTK_JUSTIFY_RIGHT)
{
/* GTK_JUSTIFY_RIGHT is only used for monetary values so right align
* the column title and data for both ltr and rtl */
@@ -330,7 +330,7 @@ gnc_query_view_init_view (GNCQueryView *qview)
gtk_tree_view_column_set_alignment (col, algn);
/* Set column resizable */
if (((GNCSearchParam *) param)->non_resizeable)
if (gnc_search_param_get_non_resizeable (GNC_SEARCH_PARAM (param)))
{
gtk_tree_view_column_set_resizable (col, FALSE);
gtk_tree_view_column_set_expand (col, FALSE);
@@ -339,7 +339,7 @@ gnc_query_view_init_view (GNCQueryView *qview)
gtk_tree_view_column_set_resizable (col, TRUE);
/* Set column clickable */
if (((GNCSearchParam *) param)->passive)
if (gnc_search_param_get_passive (GNC_SEARCH_PARAM (param)))
gtk_tree_view_column_set_clickable (col, FALSE);
else
{

View File

@@ -43,16 +43,21 @@ typedef struct _GNCSearchParamPrivate GNCSearchParamPrivate;
struct _GNCSearchParamPrivate
{
const char * title;
GtkJustification justify;
gboolean passive;
gboolean non_resizeable;
QofIdTypeConst type;
};
#define GNC_SEARCH_PARAM_GET_PRIVATE(o) \
((GNCSearchParamPrivate*)gnc_search_param_get_instance_private ((GNCSearchParam*)o))
typedef struct _GNCSearchParamSimplePrivate GNCSearchParamSimplePrivate;
struct _GNCSearchParamSimplePrivate
struct _GNCSearchParamSimple
{
GNCSearchParam search_param;
GSList * converters;
GSList * param_path;
@@ -60,22 +65,16 @@ struct _GNCSearchParamSimplePrivate
gpointer lookup_arg;
};
#define GNC_SEARCH_PARAM_SIMPLE_GET_PRIVATE(o) \
((GNCSearchParamSimplePrivate*)gnc_search_param_simple_get_instance_private ((GNCSearchParamSimple*)o))
typedef struct _GNCSearchParamCompoundPrivate GNCSearchParamCompoundPrivate;
struct _GNCSearchParamCompoundPrivate
struct _GNCSearchParamCompound
{
GNCSearchParam search_param;
GList * sub_search;
/* This defines the type of subsearch, either AND or OR */
GNCSearchParamKind kind;
};
#define GNC_SEARCH_PARAM_COMPOUND_GET_PRIVATE(o) \
((GNCSearchParamCompoundPrivate*)gnc_search_param_compound_get_instance_private ((GNCSearchParamCompound*)o))
enum
{
LAST_SIGNAL
@@ -113,7 +112,7 @@ gnc_search_param_finalize (GObject *obj)
/* subclass for simple searches of a single element */
G_DEFINE_TYPE_WITH_PRIVATE(GNCSearchParamSimple, gnc_search_param_simple, GNC_TYPE_SEARCH_PARAM)
G_DEFINE_TYPE(GNCSearchParamSimple, gnc_search_param_simple, GNC_TYPE_SEARCH_PARAM)
static void
gnc_search_param_simple_class_init (GNCSearchParamSimpleClass *klass)
@@ -132,25 +131,23 @@ static void
gnc_search_param_simple_finalize (GObject *obj)
{
GNCSearchParamSimple *o;
GNCSearchParamSimplePrivate *priv;
g_return_if_fail (obj != NULL);
g_return_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(obj));
o = GNC_SEARCH_PARAM_SIMPLE(obj);
priv = GNC_SEARCH_PARAM_SIMPLE_GET_PRIVATE(o);
g_slist_free (priv->param_path);
priv->param_path = NULL;
g_slist_free (priv->converters);
priv->converters = NULL;
g_slist_free (o->param_path);
o->param_path = NULL;
g_slist_free (o->converters);
o->converters = NULL;
G_OBJECT_CLASS(gnc_search_param_simple_parent_class)->finalize (obj);
}
/* Subclass for compound searches consisting of AND/OR of several elements */
G_DEFINE_TYPE_WITH_PRIVATE(GNCSearchParamCompound, gnc_search_param_compound, GNC_TYPE_SEARCH_PARAM)
G_DEFINE_TYPE(GNCSearchParamCompound, gnc_search_param_compound, GNC_TYPE_SEARCH_PARAM)
static void
gnc_search_param_compound_class_init (GNCSearchParamCompoundClass *klass)
@@ -169,16 +166,14 @@ static void
gnc_search_param_compound_finalize (GObject *obj)
{
GNCSearchParamCompound *o;
GNCSearchParamCompoundPrivate *priv;
g_return_if_fail (obj != NULL);
g_return_if_fail (GNC_IS_SEARCH_PARAM_COMPOUND(obj));
o = GNC_SEARCH_PARAM_COMPOUND(obj);
priv = GNC_SEARCH_PARAM_COMPOUND_GET_PRIVATE(o);
g_list_free (priv->sub_search);
priv->sub_search = NULL;
g_list_free (o->sub_search);
o->sub_search = NULL;
G_OBJECT_CLASS (gnc_search_param_compound_parent_class)->finalize (obj);
}
@@ -218,19 +213,17 @@ gnc_search_param_set_param_path (GNCSearchParamSimple *param,
QofIdTypeConst search_type,
GSList *param_path)
{
GNCSearchParamSimplePrivate *priv;
GNCSearchParamPrivate *priv_base;
QofIdTypeConst type = NULL;
GSList *converters = NULL;
g_return_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param));
priv = GNC_SEARCH_PARAM_SIMPLE_GET_PRIVATE(param);
if (priv->param_path)
if (param->param_path)
{
g_slist_free (priv->param_path);
g_slist_free (param->param_path);
}
priv->param_path = g_slist_copy (param_path);
param->param_path = g_slist_copy (param_path);
/* Compute the parameter type */
for (; param_path; param_path = param_path->next)
@@ -255,11 +248,11 @@ gnc_search_param_set_param_path (GNCSearchParamSimple *param,
priv_base->type = type;
/* Save the converters */
if (priv->converters)
if (param->converters)
{
g_slist_free (priv->converters);
g_slist_free (param->converters);
}
priv->converters = g_slist_reverse (converters);
param->converters = g_slist_reverse (converters);
}
void
@@ -279,34 +272,25 @@ gnc_search_param_override_param_type (GNCSearchParamSimple *param,
GList *
gnc_search_param_get_search (GNCSearchParamCompound *param)
{
GNCSearchParamCompoundPrivate *priv;
g_return_val_if_fail (GNC_IS_SEARCH_PARAM_COMPOUND(param), NULL);
priv = GNC_SEARCH_PARAM_COMPOUND_GET_PRIVATE(param);
return priv->sub_search;
return param->sub_search;
}
GSList *
gnc_search_param_get_param_path (GNCSearchParamSimple *param)
{
GNCSearchParamSimplePrivate *priv;
g_return_val_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param), NULL);
priv = GNC_SEARCH_PARAM_SIMPLE_GET_PRIVATE(param);
return g_slist_copy (priv->param_path);
return g_slist_copy (param->param_path);
}
GSList *
gnc_search_param_get_converters (GNCSearchParamSimple *param)
{
GNCSearchParamSimplePrivate *priv;
g_return_val_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param), NULL);
priv = GNC_SEARCH_PARAM_SIMPLE_GET_PRIVATE(param);
return priv->converters;
return param->converters;
}
QofIdTypeConst
@@ -323,15 +307,21 @@ gnc_search_param_get_param_type (GNCSearchParam *param)
GNCSearchParamKind
gnc_search_param_get_kind (GNCSearchParam *param)
{
GNCSearchParamCompoundPrivate *priv;
if (GNC_IS_SEARCH_PARAM_SIMPLE(param))
return SEARCH_PARAM_ELEM;
g_return_val_if_fail (GNC_IS_SEARCH_PARAM_COMPOUND(param), SEARCH_PARAM_ELEM);
priv = GNC_SEARCH_PARAM_COMPOUND_GET_PRIVATE(param);
return priv->kind;
return GNC_SEARCH_PARAM_COMPOUND (param)->kind;
}
const char*
gnc_search_param_get_title (GNCSearchParam *param)
{
g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), NULL);
GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
return priv->title;
}
void
@@ -339,7 +329,17 @@ gnc_search_param_set_title (GNCSearchParam *param, const char *title)
{
g_return_if_fail (GNC_IS_SEARCH_PARAM(param));
param->title = title;
GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
priv->title = title;
}
GtkJustification
gnc_search_param_get_justify (GNCSearchParam *param)
{
g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), GTK_JUSTIFY_LEFT);
GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
return priv->justify;
}
void
@@ -347,7 +347,17 @@ gnc_search_param_set_justify (GNCSearchParam *param, GtkJustification justify)
{
g_return_if_fail (GNC_IS_SEARCH_PARAM(param));
param->justify = justify;
GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
priv->justify = justify;
}
gboolean
gnc_search_param_get_passive (GNCSearchParam *param)
{
g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), FALSE);
GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
return priv->passive;
}
void
@@ -355,7 +365,17 @@ gnc_search_param_set_passive (GNCSearchParam *param, gboolean value)
{
g_assert (GNC_IS_SEARCH_PARAM(param));
param->passive = value;
GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
priv->passive = value;
}
gboolean
gnc_search_param_get_non_resizeable (GNCSearchParam *param)
{
g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), FALSE);
GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
return priv->non_resizeable;
}
void
@@ -363,7 +383,8 @@ gnc_search_param_set_non_resizeable (GNCSearchParam *param, gboolean value)
{
g_assert (GNC_IS_SEARCH_PARAM(param));
param->non_resizeable = value;
GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
priv->non_resizeable = value;
}
gboolean
@@ -473,7 +494,6 @@ gnc_search_param_prepend_compound (GList *list, char const *title,
QofIdTypeConst type = NULL;
GNCSearchParamCompound *param;
GNCSearchParamPrivate *basepriv;
GNCSearchParamCompoundPrivate *priv;
g_return_val_if_fail (title, list);
g_return_val_if_fail (param_list, list);
@@ -495,11 +515,10 @@ gnc_search_param_prepend_compound (GList *list, char const *title,
gnc_search_param_set_title (GNC_SEARCH_PARAM(param), title);
gnc_search_param_set_justify (GNC_SEARCH_PARAM(param), justify);
priv = GNC_SEARCH_PARAM_COMPOUND_GET_PRIVATE(param);
basepriv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
priv->sub_search = g_list_copy (param_list);
param->sub_search = g_list_copy (param_list);
basepriv->type = type;
priv->kind = kind;
param->kind = kind;
return g_list_prepend (list, param);
}
@@ -510,30 +529,23 @@ gnc_search_param_set_param_fcn (GNCSearchParamSimple *param,
GNCSearchParamFcn fcn,
gpointer arg)
{
GNCSearchParamSimplePrivate *priv;
g_return_if_fail (param);
g_return_if_fail (param_type && *param_type);
g_return_if_fail (fcn);
g_return_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param));
priv = GNC_SEARCH_PARAM_SIMPLE_GET_PRIVATE(param);
priv->lookup_fcn = fcn;
priv->lookup_arg = arg;
param->lookup_fcn = fcn;
param->lookup_arg = arg;
gnc_search_param_override_param_type (param, param_type);
}
gboolean
gnc_search_param_has_param_fcn (GNCSearchParamSimple *param)
{
GNCSearchParamSimplePrivate *priv;
g_return_val_if_fail (param, FALSE);
g_return_val_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param), FALSE);
priv = GNC_SEARCH_PARAM_SIMPLE_GET_PRIVATE(param);
if (priv->lookup_fcn)
if (param->lookup_fcn)
return TRUE;
return FALSE;
@@ -543,15 +555,12 @@ gnc_search_param_has_param_fcn (GNCSearchParamSimple *param)
gpointer
gnc_search_param_compute_value (GNCSearchParamSimple *param, gpointer object)
{
GNCSearchParamSimplePrivate *priv;
g_return_val_if_fail (param, NULL);
g_return_val_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param), NULL);
priv = GNC_SEARCH_PARAM_SIMPLE_GET_PRIVATE(param);
if (priv->lookup_fcn)
if (param->lookup_fcn)
{
return ((priv->lookup_fcn)(object, priv->lookup_arg));
return ((param->lookup_fcn)(object, param->lookup_arg));
}
else
{

View File

@@ -25,22 +25,7 @@
#define GNC_TYPE_SEARCH_PARAM (gnc_search_param_get_type ())
#define GNC_SEARCH_PARAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_SEARCH_PARAM, GNCSearchParam))
#define GNCSEARCH_PARAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GNC_TYPE_SEARCH_PARAM, GNCSearchParamClass)
#define GNC_IS_SEARCH_PARAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_SEARCH_PARAM))
typedef struct _GNCSearchParam GNCSearchParam;
typedef struct _GNCSearchParamClass GNCSearchParamClass;
struct _GNCSearchParam
{
GObject gobject;
const char * title;
GtkJustification justify;
gboolean passive;
gboolean non_resizeable;
};
G_DECLARE_DERIVABLE_TYPE (GNCSearchParam, gnc_search_param, GNC, SEARCH_PARAM, GObject)
struct _GNCSearchParamClass
{
@@ -52,52 +37,10 @@ struct _GNCSearchParamClass
};
#define GNC_TYPE_SEARCH_PARAM_SIMPLE (gnc_search_param_simple_get_type ())
#define GNC_SEARCH_PARAM_SIMPLE(o) \
(G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_SEARCH_PARAM_SIMPLE, GNCSearchParamSimple))
#define GNCSEARCH_PARAM_SIMPLE_CLASS(k) \
(G_TYPE_CHECK_CLASS_CAST ((k), GNC_TYPE_SEARCH_PARAM_SIMPLE, GNCSearchParamSimpleClass)
#define GNC_IS_SEARCH_PARAM_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_SEARCH_PARAM_SIMPLE))
typedef struct _GNCSearchParamSimple GNCSearchParamSimple;
typedef struct _GNCSearchParamSimpleClass GNCSearchParamSimpleClass;
struct _GNCSearchParamSimple
{
GNCSearchParam search_param;
};
struct _GNCSearchParamSimpleClass
{
GNCSearchParamClass search_param_class;
/* virtual methods */
/* signals */
};
G_DECLARE_FINAL_TYPE (GNCSearchParamSimple, gnc_search_param_simple, GNC, SEARCH_PARAM_SIMPLE, GNCSearchParam)
#define GNC_TYPE_SEARCH_PARAM_COMPOUND (gnc_search_param_compound_get_type ())
#define GNC_SEARCH_PARAM_COMPOUND(o) \
(G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_SEARCH_PARAM_COMPOUND, GNCSearchParamCompound))
#define GNCSEARCH_PARAM_COMPOUND_CLASS(k) \
(G_TYPE_CHECK_CLASS_CAST ((k), GNC_TYPE_SEARCH_PARAM_COMPOUND, GNCSearchParamCompoundClass)
#define GNC_IS_SEARCH_PARAM_COMPOUND(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_SEARCH_PARAM_COMPOUND))
typedef struct _GNCSearchParamCompound GNCSearchParamCompound;
typedef struct _GNCSearchParamCompoundClass GNCSearchParamCompoundClass;
struct _GNCSearchParamCompound
{
GNCSearchParam search_param;
};
struct _GNCSearchParamCompoundClass
{
GNCSearchParamClass search_param_class;
/* virtual methods */
/* signals */
};
G_DECLARE_FINAL_TYPE (GNCSearchParamCompound, gnc_search_param_compound, GNC, SEARCH_PARAM_COMPOUND, GNCSearchParam)
typedef enum
{
@@ -106,11 +49,6 @@ typedef enum
SEARCH_PARAM_ALL = 2
} GNCSearchParamKind;
/* These are internal functions */
GType gnc_search_param_get_type (void);
GType gnc_search_param_simple_get_type (void);
GType gnc_search_param_compound_get_type (void);
/* Create a new search param */
GNCSearchParamSimple * gnc_search_param_simple_new (void);
GNCSearchParamCompound * gnc_search_param_compound_new (void);
@@ -126,13 +64,17 @@ void gnc_search_param_set_param_path (GNCSearchParamSimple *param,
GList * gnc_search_param_get_search (GNCSearchParamCompound *param);
GSList * gnc_search_param_get_param_path (GNCSearchParamSimple *param);
QofIdTypeConst gnc_search_param_get_param_type (GNCSearchParam *param);
const char *gnc_search_param_get_title (GNCSearchParam *param);
void gnc_search_param_set_title (GNCSearchParam *param,
const char *title);
GNCSearchParamKind gnc_search_param_get_kind (GNCSearchParam *param);
GtkJustification gnc_search_param_get_justify (GNCSearchParam *param);
void gnc_search_param_set_justify (GNCSearchParam *param,
GtkJustification justify);
gboolean gnc_search_param_get_passive (GNCSearchParam *param);
void gnc_search_param_set_passive (GNCSearchParam *param,
gboolean value);
gboolean gnc_search_param_get_non_resizeable (GNCSearchParam *param);
void gnc_search_param_set_non_resizeable (GNCSearchParam *param,
gboolean value);
gboolean gnc_search_param_type_match (GNCSearchParam *a,

View File

@@ -167,16 +167,16 @@ gnc_ui_find_transactions_dialog_create(GtkWindow *parent, GNCLedgerDisplay * ori
if (num_action)
{
if (strcmp (param->title, N_("Action")) == 0)
if (strcmp (gnc_search_param_get_title (param), N_("Action")) == 0)
gnc_search_param_set_title (param, N_("Number/Action"));
if (strcmp (param->title, N_("Number")) == 0)
if (strcmp (gnc_search_param_get_title (param), N_("Number")) == 0)
gnc_search_param_set_title (param, N_("Transaction Number"));
}
else
{
if (strcmp (param->title, N_("Number/Action")) == 0)
if (strcmp (gnc_search_param_get_title (param), N_("Number/Action")) == 0)
gnc_search_param_set_title (param, N_("Action"));
if (strcmp (param->title, N_("Transaction Number")) == 0)
if (strcmp (gnc_search_param_get_title (param), N_("Transaction Number")) == 0)
gnc_search_param_set_title (param, N_("Number"));
}
}