29 #include <glib/gi18n.h> 31 #include "gnc-amount-edit.h" 33 #include "gnc-gui-query.h" 35 #include "search-double.h" 36 #include "search-core-utils.h" 40 static void pass_parent (GNCSearchCoreType *fe, gpointer parent);
41 static void editable_enters (GNCSearchCoreType *fe);
42 static void grab_focus (GNCSearchCoreType *fe);
43 static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe);
44 static gboolean gncs_validate (GNCSearchCoreType *fe);
45 static GtkWidget *gncs_get_widget(GNCSearchCoreType *fe);
46 static QofQueryPredData* gncs_get_predicate (GNCSearchCoreType *fe);
48 static void gnc_search_double_finalize (GObject *obj);
52 GNCSearchCoreType parent_instance;
62 G_DEFINE_TYPE(GNCSearchDouble, gnc_search_double, GNC_TYPE_SEARCH_CORE_TYPE)
65 gnc_search_double_class_init (GNCSearchDoubleClass *klass)
67 GObjectClass *object_class;
68 GNCSearchCoreTypeClass *gnc_search_core_type = (GNCSearchCoreTypeClass *)klass;
70 object_class = G_OBJECT_CLASS (klass);
72 object_class->finalize = gnc_search_double_finalize;
75 gnc_search_core_type->pass_parent = pass_parent;
76 gnc_search_core_type->editable_enters = editable_enters;
77 gnc_search_core_type->grab_focus = grab_focus;
78 gnc_search_core_type->validate = gncs_validate;
79 gnc_search_core_type->get_widget = gncs_get_widget;
80 gnc_search_core_type->get_predicate = gncs_get_predicate;
81 gnc_search_core_type->clone = gncs_clone;
85 gnc_search_double_init (GNCSearchDouble *o)
87 o->how = QOF_COMPARE_EQUAL;
91 gnc_search_double_finalize (GObject *obj)
93 GNCSearchDouble *o = (GNCSearchDouble *)obj;
94 g_assert (GNC_IS_SEARCH_DOUBLE (o));
96 G_OBJECT_CLASS (gnc_search_double_parent_class)->finalize(obj);
107 gnc_search_double_new (
void)
109 GNCSearchDouble *o = g_object_new(GNC_TYPE_SEARCH_DOUBLE, NULL);
114 gnc_search_double_set_value (GNCSearchDouble *fi,
double value)
116 g_return_if_fail (fi);
117 g_return_if_fail (GNC_IS_SEARCH_DOUBLE (fi));
125 g_return_if_fail (fi);
126 g_return_if_fail (GNC_IS_SEARCH_DOUBLE (fi));
131 pass_parent (GNCSearchCoreType *fe, gpointer parent)
133 GNCSearchDouble *fi = (GNCSearchDouble *)fe;
135 g_return_if_fail (fi);
136 g_return_if_fail (GNC_IS_SEARCH_DOUBLE (fi));
138 fi->parent = GTK_WINDOW(parent);
142 gncs_validate (GNCSearchCoreType *fe)
144 GNCSearchDouble *fi = (GNCSearchDouble *)fe;
145 gboolean valid = TRUE;
146 GError *error = NULL;
148 g_return_val_if_fail (fi, FALSE);
149 g_return_val_if_fail (GNC_IS_SEARCH_DOUBLE (fi), FALSE);
151 if (!gnc_amount_edit_evaluate (GNC_AMOUNT_EDIT(fi->gae), &error))
153 gnc_error_dialog (GTK_WINDOW(fi->parent),
"%s", error->message);
155 g_error_free (error);
162 entry_changed (GNCAmountEdit *entry, GNCSearchDouble *fe)
164 fe->value = gnc_amount_edit_get_damount (entry);
168 make_menu (GNCSearchCoreType *fe)
170 GNCSearchDouble *fi = (GNCSearchDouble *)fe;
173 combo = GTK_COMBO_BOX(gnc_combo_box_new_search());
175 gnc_combo_box_search_add(combo, _(
"is less than"), QOF_COMPARE_LT);
176 gnc_combo_box_search_add(combo, _(
"is less than or equal to"), QOF_COMPARE_LTE);
177 gnc_combo_box_search_add(combo, _(
"equals"), QOF_COMPARE_EQUAL);
178 gnc_combo_box_search_add(combo, _(
"does not equal"), QOF_COMPARE_NEQ);
179 gnc_combo_box_search_add(combo, _(
"is greater than"), QOF_COMPARE_GT);
180 gnc_combo_box_search_add(combo, _(
"is greater than or equal to"), QOF_COMPARE_GTE);
181 gnc_combo_box_search_changed(combo, &fi->how);
182 gnc_combo_box_search_set_active(combo, fi->how ? fi->how : QOF_COMPARE_LT);
184 return GTK_WIDGET(combo);
188 grab_focus (GNCSearchCoreType *fe)
190 GNCSearchDouble *fi = (GNCSearchDouble *)fe;
192 g_return_if_fail (fi);
193 g_return_if_fail (GNC_IS_SEARCH_DOUBLE (fi));
196 gtk_widget_grab_focus (fi->entry);
200 editable_enters (GNCSearchCoreType *fe)
202 GNCSearchDouble *fi = (GNCSearchDouble *)fe;
204 g_return_if_fail (fi);
205 g_return_if_fail (GNC_IS_SEARCH_DOUBLE (fi));
208 gtk_entry_set_activates_default(GTK_ENTRY (fi->entry), TRUE);
212 gncs_get_widget (GNCSearchCoreType *fe)
214 GtkWidget *entry, *menu, *box;
215 GNCSearchDouble *fi = (GNCSearchDouble *)fe;
217 g_return_val_if_fail (fi, NULL);
218 g_return_val_if_fail (GNC_IS_SEARCH_DOUBLE (fi), NULL);
220 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
221 gtk_box_set_homogeneous (GTK_BOX (box), FALSE);
224 menu = make_menu (fe);
225 gtk_box_pack_start (GTK_BOX (box), menu, FALSE, FALSE, 3);
228 entry = gnc_amount_edit_new ();
230 gnc_amount_edit_set_damount (GNC_AMOUNT_EDIT (entry), fi->value);
231 g_signal_connect (G_OBJECT (entry),
"amount_changed", G_CALLBACK (entry_changed), fe);
232 gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 3);
233 fi->entry = gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (entry));
234 fi->gae = GNC_AMOUNT_EDIT (entry);
240 static QofQueryPredData* gncs_get_predicate (GNCSearchCoreType *fe)
242 GNCSearchDouble *fi = (GNCSearchDouble *)fe;
244 g_return_val_if_fail (fi, NULL);
245 g_return_val_if_fail (GNC_IS_SEARCH_DOUBLE (fi), NULL);
248 entry_changed (fi->gae, fi);
250 return qof_query_double_predicate (fi->how, fi->value);
253 static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe)
255 GNCSearchDouble *se, *fse = (GNCSearchDouble *)fe;
257 g_return_val_if_fail (fse, NULL);
258 g_return_val_if_fail (GNC_IS_SEARCH_DOUBLE (fse), NULL);
260 se = gnc_search_double_new ();
261 gnc_search_double_set_value (se, fse->value);
262 gnc_search_double_set_how (se, fse->how);
264 return (GNCSearchCoreType *)se;
QofQueryCompare
Standard Query comparators, for how to compare objects in a predicate.