29 #include <glib/gi18n.h> 31 #include "gnc-amount-edit.h" 33 #include "gnc-gui-query.h" 35 #include "search-numeric.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_numeric_finalize (GObject *obj);
52 GNCSearchCoreType parent_instance;
64 G_DEFINE_TYPE(GNCSearchNumeric, gnc_search_numeric, GNC_TYPE_SEARCH_CORE_TYPE)
67 gnc_search_numeric_class_init (GNCSearchNumericClass *klass)
69 GObjectClass *object_class;
70 GNCSearchCoreTypeClass *gnc_search_core_type = (GNCSearchCoreTypeClass *)klass;
72 object_class = G_OBJECT_CLASS (klass);
74 object_class->finalize = gnc_search_numeric_finalize;
77 gnc_search_core_type->pass_parent = pass_parent;
78 gnc_search_core_type->editable_enters = editable_enters;
79 gnc_search_core_type->grab_focus = grab_focus;
80 gnc_search_core_type->validate = gncs_validate;
81 gnc_search_core_type->get_widget = gncs_get_widget;
82 gnc_search_core_type->get_predicate = gncs_get_predicate;
83 gnc_search_core_type->clone = gncs_clone;
87 gnc_search_numeric_init (GNCSearchNumeric *o)
89 o->value = gnc_numeric_zero ();
90 o->how = QOF_COMPARE_EQUAL;
91 o->option = QOF_NUMERIC_MATCH_ANY;
95 gnc_search_numeric_finalize (GObject *obj)
97 GNCSearchNumeric *o = (GNCSearchNumeric *)obj;
98 g_assert (GNC_IS_SEARCH_NUMERIC (o));
100 G_OBJECT_CLASS (gnc_search_numeric_parent_class)->finalize(obj);
111 gnc_search_numeric_new (
void)
113 GNCSearchNumeric *o = g_object_new(GNC_TYPE_SEARCH_NUMERIC, NULL);
125 gnc_search_numeric_debcred_new (
void)
129 o = g_object_new(GNC_TYPE_SEARCH_NUMERIC, NULL);
130 o->is_debcred = TRUE;
135 gnc_search_numeric_set_value (GNCSearchNumeric *fi, gnc_numeric value)
137 g_return_if_fail (fi);
138 g_return_if_fail (GNC_IS_SEARCH_NUMERIC (fi));
146 g_return_if_fail (fi);
147 g_return_if_fail (GNC_IS_SEARCH_NUMERIC (fi));
152 gnc_search_numeric_set_option (GNCSearchNumeric *fi,
QofNumericMatch option)
154 g_return_if_fail (fi);
155 g_return_if_fail (GNC_IS_SEARCH_NUMERIC (fi));
160 pass_parent (GNCSearchCoreType *fe, gpointer parent)
162 GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
164 g_return_if_fail (fi);
165 g_return_if_fail (GNC_IS_SEARCH_NUMERIC (fi));
167 fi->parent = GTK_WINDOW(parent);
171 gncs_validate (GNCSearchCoreType *fe)
173 GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
174 gboolean valid = TRUE;
175 GError *error = NULL;
177 g_return_val_if_fail (fi, FALSE);
178 g_return_val_if_fail (GNC_IS_SEARCH_NUMERIC (fi), FALSE);
180 if (!gnc_amount_edit_evaluate (GNC_AMOUNT_EDIT(fi->gae), &error))
182 gnc_error_dialog (GTK_WINDOW(fi->parent),
"%s", error->message);
184 g_error_free (error);
190 entry_changed (GNCAmountEdit *entry, GNCSearchNumeric *fe)
192 fe->value = gnc_amount_edit_get_amount (entry);
196 make_how_menu (GNCSearchCoreType *fe)
198 GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
201 combo = GTK_COMBO_BOX(gnc_combo_box_new_search());
202 gnc_combo_box_search_add(combo, (fi->is_debcred ?
203 _(
"less than") : _(
"is less than")),
205 gnc_combo_box_search_add(combo, (fi->is_debcred ?
206 _(
"less than or equal to") :
207 _(
"is less than or equal to")),
209 gnc_combo_box_search_add(combo, (fi->is_debcred ?
210 _(
"equal to") : _(
"equals")),
212 gnc_combo_box_search_add(combo, (fi->is_debcred ?
213 _(
"not equal to") : _(
"does not equal")),
215 gnc_combo_box_search_add(combo, (fi->is_debcred ?
216 _(
"greater than") : _(
"is greater than")),
218 gnc_combo_box_search_add(combo, (fi->is_debcred ?
219 _(
"greater than or equal to") :
220 _(
"is greater than or equal to")),
223 gnc_combo_box_search_changed(combo, &fi->how);
224 gnc_combo_box_search_set_active(combo, fi->how ? fi->how : QOF_COMPARE_LT);
226 return GTK_WIDGET(combo);
230 make_option_menu (GNCSearchCoreType *fe)
232 GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
235 combo = GTK_COMBO_BOX(gnc_combo_box_new_search());
236 gnc_combo_box_search_add(combo, _(
"has credits or debits"), QOF_NUMERIC_MATCH_ANY);
237 gnc_combo_box_search_add(combo, _(
"has debits"), QOF_NUMERIC_MATCH_DEBIT);
238 gnc_combo_box_search_add(combo, _(
"has credits"), QOF_NUMERIC_MATCH_CREDIT);
239 gnc_combo_box_search_changed(combo, &fi->option);
240 gnc_combo_box_search_set_active(combo, fi->option ? fi->option : QOF_NUMERIC_MATCH_ANY);
242 return GTK_WIDGET(combo);
246 grab_focus (GNCSearchCoreType *fe)
248 GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
250 g_return_if_fail (fi);
251 g_return_if_fail (GNC_IS_SEARCH_NUMERIC (fi));
254 gtk_widget_grab_focus (fi->entry);
258 editable_enters (GNCSearchCoreType *fe)
260 GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
262 g_return_if_fail (fi);
263 g_return_if_fail (GNC_IS_SEARCH_NUMERIC (fi));
266 gtk_entry_set_activates_default(GTK_ENTRY (fi->entry), TRUE);
270 gncs_get_widget (GNCSearchCoreType *fe)
272 GtkWidget *entry, *menu, *box;
273 GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
275 g_return_val_if_fail (fi, NULL);
276 g_return_val_if_fail (GNC_IS_SEARCH_NUMERIC (fi), NULL);
278 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
279 gtk_box_set_homogeneous (GTK_BOX (box), FALSE);
284 menu = make_option_menu (fe);
285 gtk_box_pack_start (GTK_BOX (box), menu, FALSE, FALSE, 3);
288 menu = make_how_menu (fe);
289 gtk_box_pack_start (GTK_BOX (box), menu, FALSE, FALSE, 3);
292 entry = gnc_amount_edit_new ();
293 gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT (entry), fi->value);
294 g_signal_connect (G_OBJECT (entry),
"amount_changed", G_CALLBACK (entry_changed), fe);
295 gtk_box_pack_start (GTK_BOX (box), entry, FALSE, FALSE, 3);
296 fi->gae = GNC_AMOUNT_EDIT (entry);
297 fi->entry = gnc_amount_edit_gtk_entry (GNC_AMOUNT_EDIT (entry));
303 static QofQueryPredData* gncs_get_predicate (GNCSearchCoreType *fe)
305 GNCSearchNumeric *fi = (GNCSearchNumeric *)fe;
307 g_return_val_if_fail (fi, NULL);
308 g_return_val_if_fail (GNC_IS_SEARCH_NUMERIC (fi), NULL);
311 entry_changed (fi->gae, fi);
313 return qof_query_numeric_predicate (fi->how, fi->option, fi->value);
316 static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe)
318 GNCSearchNumeric *se, *fse = (GNCSearchNumeric *)fe;
320 g_return_val_if_fail (fse, NULL);
321 g_return_val_if_fail (GNC_IS_SEARCH_NUMERIC (fse), NULL);
323 se = gnc_search_numeric_new ();
324 gnc_search_numeric_set_value (se, fse->value);
325 gnc_search_numeric_set_how (se, fse->how);
326 gnc_search_numeric_set_option (se, fse->option);
327 se->is_debcred = fse->is_debcred;
329 return (GNCSearchCoreType *)se;
QofQueryCompare
Standard Query comparators, for how to compare objects in a predicate.
QofNumericMatch
Comparisons for QOF_TYPE_NUMERIC, QOF_TYPE_DEBCRED.