34 #include "search-param.h" 36 static void gnc_search_param_finalize (GObject *obj);
38 static void gnc_search_param_simple_finalize (GObject *obj);
40 static void gnc_search_param_compound_finalize (GObject *obj);
47 GtkJustification justify;
49 gboolean non_resizeable;
54 #define GNC_SEARCH_PARAM_GET_PRIVATE(o) \ 55 ((GNCSearchParamPrivate*)gnc_search_param_get_instance_private ((GNCSearchParam*)o)) 59 GNCSearchParam search_param;
64 GNCSearchParamFcn lookup_fcn;
70 GNCSearchParam search_param;
75 GNCSearchParamKind kind;
84 static guint signals[LAST_SIGNAL] = { 0 };
89 G_DEFINE_TYPE_WITH_PRIVATE(GNCSearchParam, gnc_search_param, G_TYPE_OBJECT)
92 gnc_search_param_class_init (GNCSearchParamClass *klass)
94 GObjectClass *object_class = G_OBJECT_CLASS(klass);
96 object_class->finalize = gnc_search_param_finalize;
100 gnc_search_param_init (GNCSearchParam *o)
105 gnc_search_param_finalize (GObject *obj)
107 g_return_if_fail (obj != NULL);
108 g_return_if_fail (GNC_IS_SEARCH_PARAM(obj));
110 G_OBJECT_CLASS(gnc_search_param_parent_class)->finalize (obj);
115 G_DEFINE_TYPE(GNCSearchParamSimple, gnc_search_param_simple, GNC_TYPE_SEARCH_PARAM)
118 gnc_search_param_simple_class_init (GNCSearchParamSimpleClass *klass)
120 GObjectClass *object_class = G_OBJECT_CLASS(klass);
122 object_class->finalize = gnc_search_param_simple_finalize;
126 gnc_search_param_simple_init (GNCSearchParamSimple *o)
131 gnc_search_param_simple_finalize (GObject *obj)
133 GNCSearchParamSimple *o;
135 g_return_if_fail (obj != NULL);
136 g_return_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(obj));
138 o = GNC_SEARCH_PARAM_SIMPLE(obj);
140 g_slist_free (o->param_path);
141 o->param_path = NULL;
142 g_slist_free (o->converters);
143 o->converters = NULL;
145 G_OBJECT_CLASS(gnc_search_param_simple_parent_class)->finalize (obj);
150 G_DEFINE_TYPE(GNCSearchParamCompound, gnc_search_param_compound, GNC_TYPE_SEARCH_PARAM)
153 gnc_search_param_compound_class_init (GNCSearchParamCompoundClass *klass)
155 GObjectClass *object_class = G_OBJECT_CLASS(klass);
157 object_class->finalize = gnc_search_param_compound_finalize;
161 gnc_search_param_compound_init (GNCSearchParamCompound *o)
166 gnc_search_param_compound_finalize (GObject *obj)
168 GNCSearchParamCompound *o;
170 g_return_if_fail (obj != NULL);
171 g_return_if_fail (GNC_IS_SEARCH_PARAM_COMPOUND(obj));
173 o = GNC_SEARCH_PARAM_COMPOUND(obj);
175 g_list_free (o->sub_search);
176 o->sub_search = NULL;
178 G_OBJECT_CLASS (gnc_search_param_compound_parent_class)->finalize (obj);
188 GNCSearchParamSimple *
189 gnc_search_param_simple_new (
void)
191 GNCSearchParamSimple *o = (GNCSearchParamSimple *)
192 g_object_new (gnc_search_param_simple_get_type (), NULL);
203 GNCSearchParamCompound *
204 gnc_search_param_compound_new (
void)
206 GNCSearchParamCompound *o = (GNCSearchParamCompound *)
207 g_object_new (gnc_search_param_compound_get_type (), NULL);
212 gnc_search_param_set_param_path (GNCSearchParamSimple *param,
216 GNCSearchParamPrivate *priv_base;
218 GSList *converters = NULL;
220 g_return_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param));
222 if (param->param_path)
224 g_slist_free (param->param_path);
226 param->param_path = g_slist_copy (param_path);
229 for (; param_path; param_path = param_path->next)
240 converters = g_slist_prepend (converters, (gpointer) objDef);
243 type = search_type = objDef->param_type;
247 priv_base = GNC_SEARCH_PARAM_GET_PRIVATE(param);
248 priv_base->type = type;
251 if (param->converters)
253 g_slist_free (param->converters);
255 param->converters = g_slist_reverse (converters);
259 gnc_search_param_override_param_type (GNCSearchParamSimple *param,
262 GNCSearchParamPrivate *priv;
264 g_return_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param));
265 g_return_if_fail (param_type != NULL && *param_type !=
'\0');
267 priv = GNC_SEARCH_PARAM_GET_PRIVATE(GNC_SEARCH_PARAM(param));
268 priv->type = param_type;
273 gnc_search_param_get_search (GNCSearchParamCompound *param)
275 g_return_val_if_fail (GNC_IS_SEARCH_PARAM_COMPOUND(param), NULL);
277 return param->sub_search;
281 gnc_search_param_get_param_path (GNCSearchParamSimple *param)
283 g_return_val_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param), NULL);
285 return g_slist_copy (param->param_path);
289 gnc_search_param_get_converters (GNCSearchParamSimple *param)
291 g_return_val_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param), NULL);
293 return param->converters;
297 gnc_search_param_get_param_type (GNCSearchParam *param)
299 GNCSearchParamPrivate *priv;
301 g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), NULL);
303 priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
308 gnc_search_param_get_kind (GNCSearchParam *param)
310 if (GNC_IS_SEARCH_PARAM_SIMPLE(param))
311 return SEARCH_PARAM_ELEM;
313 g_return_val_if_fail (GNC_IS_SEARCH_PARAM_COMPOUND(param), SEARCH_PARAM_ELEM);
315 return GNC_SEARCH_PARAM_COMPOUND (param)->kind;
319 gnc_search_param_get_title (GNCSearchParam *param)
321 g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), NULL);
323 GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
328 gnc_search_param_set_title (GNCSearchParam *param,
const char *title)
330 g_return_if_fail (GNC_IS_SEARCH_PARAM(param));
332 GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
337 gnc_search_param_get_justify (GNCSearchParam *param)
339 g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), GTK_JUSTIFY_LEFT);
341 GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
342 return priv->justify;
346 gnc_search_param_set_justify (GNCSearchParam *param, GtkJustification justify)
348 g_return_if_fail (GNC_IS_SEARCH_PARAM(param));
350 GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
351 priv->justify = justify;
355 gnc_search_param_get_passive (GNCSearchParam *param)
357 g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), FALSE);
359 GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
360 return priv->passive;
364 gnc_search_param_set_passive (GNCSearchParam *param, gboolean value)
366 g_assert (GNC_IS_SEARCH_PARAM(param));
368 GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
369 priv->passive = value;
373 gnc_search_param_get_non_resizeable (GNCSearchParam *param)
375 g_return_val_if_fail (GNC_IS_SEARCH_PARAM(param), FALSE);
377 GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
378 return priv->non_resizeable;
382 gnc_search_param_set_non_resizeable (GNCSearchParam *param, gboolean value)
384 g_assert (GNC_IS_SEARCH_PARAM(param));
386 GNCSearchParamPrivate *priv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
387 priv->non_resizeable = value;
391 gnc_search_param_type_match (GNCSearchParam *a, GNCSearchParam *b)
393 GNCSearchParamPrivate *a_priv, *b_priv;
395 g_return_val_if_fail (GNC_IS_SEARCH_PARAM(a), FALSE);
396 g_return_val_if_fail (GNC_IS_SEARCH_PARAM(b), FALSE);
398 a_priv = GNC_SEARCH_PARAM_GET_PRIVATE(a);
399 b_priv = GNC_SEARCH_PARAM_GET_PRIVATE(b);
401 if (a_priv->type == b_priv->type ||
402 !g_strcmp0 (a_priv->type, b_priv->type))
409 gnc_search_param_prepend_internal (GList *list,
char const *title,
410 GtkJustification justify,
413 const char *param, va_list args)
415 GNCSearchParamSimple *p;
417 const char *this_param;
419 p = gnc_search_param_simple_new ();
420 gnc_search_param_set_title (GNC_SEARCH_PARAM(p), title);
421 gnc_search_param_set_justify (GNC_SEARCH_PARAM(p), justify);
423 for (this_param = param; this_param;
424 this_param = va_arg (args,
const char *))
426 path = g_slist_prepend (path, (gpointer)this_param);
430 path = g_slist_reverse (path);
431 gnc_search_param_set_param_path (p, search_type, path);
435 gnc_search_param_override_param_type (p, type_override);
438 return g_list_prepend (list, p);
443 gnc_search_param_prepend_with_justify (GList *list,
char const *title,
444 GtkJustification justify,
447 const char *param, ...)
452 g_return_val_if_fail (title, list);
453 g_return_val_if_fail (search_type, list);
454 g_return_val_if_fail (param, list);
457 va_start (ap, param);
458 result = gnc_search_param_prepend_internal (list, title, justify,
459 type_override, search_type,
466 gnc_search_param_prepend (GList *list,
char const *title,
469 const char *param, ...)
474 g_return_val_if_fail (title, list);
475 g_return_val_if_fail (search_type, list);
476 g_return_val_if_fail (param, list);
479 va_start (ap, param);
480 result = gnc_search_param_prepend_internal (list, title, GTK_JUSTIFY_LEFT,
481 type_override, search_type,
488 gnc_search_param_prepend_compound (GList *list,
char const *title,
490 GtkJustification justify,
491 GNCSearchParamKind kind)
495 GNCSearchParamCompound *param;
496 GNCSearchParamPrivate *basepriv;
498 g_return_val_if_fail (title, list);
499 g_return_val_if_fail (param_list, list);
500 g_return_val_if_fail (kind == SEARCH_PARAM_ANY || kind == SEARCH_PARAM_ALL, list);
503 for (p = param_list; p; p = p->next)
505 GNCSearchParam *baseparam;
506 g_return_val_if_fail (GNC_IS_SEARCH_PARAM(p->data), list);
507 baseparam = GNC_SEARCH_PARAM(p->data);
509 type = gnc_search_param_get_param_type (baseparam);
511 g_return_val_if_fail (g_strcmp0 (type, gnc_search_param_get_param_type (baseparam)) == 0, list);
514 param = gnc_search_param_compound_new ();
515 gnc_search_param_set_title (GNC_SEARCH_PARAM(param), title);
516 gnc_search_param_set_justify (GNC_SEARCH_PARAM(param), justify);
518 basepriv = GNC_SEARCH_PARAM_GET_PRIVATE(param);
519 param->sub_search = g_list_copy (param_list);
520 basepriv->type = type;
523 return g_list_prepend (list, param);
527 gnc_search_param_set_param_fcn (GNCSearchParamSimple *param,
529 GNCSearchParamFcn fcn,
532 g_return_if_fail (param);
533 g_return_if_fail (param_type && *param_type);
534 g_return_if_fail (fcn);
535 g_return_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param));
537 param->lookup_fcn = fcn;
538 param->lookup_arg = arg;
539 gnc_search_param_override_param_type (param, param_type);
543 gnc_search_param_has_param_fcn (GNCSearchParamSimple *param)
545 g_return_val_if_fail (param, FALSE);
546 g_return_val_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param), FALSE);
548 if (param->lookup_fcn)
556 gnc_search_param_compute_value (GNCSearchParamSimple *param, gpointer
object)
558 g_return_val_if_fail (param, NULL);
559 g_return_val_if_fail (GNC_IS_SEARCH_PARAM_SIMPLE(param), NULL);
561 if (param->lookup_fcn)
563 return ((param->lookup_fcn)(
object, param->lookup_arg));
567 GSList *converters = gnc_search_param_get_converters (param);
568 gpointer res = object;
571 for (; converters; converters = converters->next)
573 QofParam *qp = converters->data;
574 res = (qp->param_getfcn) (res, qp);
const gchar * QofIdTypeConst
QofIdTypeConst declaration.
const gchar * QofIdType
QofIdType declaration.
const QofParam * qof_class_get_parameter(QofIdTypeConst obj_name, const char *parameter)
Return the registered Parameter Definition for the requested parameter.
All type declarations for the whole Gnucash engine.