29 #include <glib/gi18n.h> 33 #include "gnc-gui-query.h" 36 #include "business-gnome-utils.h" 37 #include "search-owner.h" 38 #include "search-core-utils.h" 42 static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe);
43 static void pass_parent (GNCSearchCoreType *fe, gpointer parent);
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_owner_finalize (GObject *obj);
52 GNCSearchCoreType parent_instance;
58 GtkWidget * owner_box;
59 GtkWidget * owner_choice;
60 } GNCSearchOwnerPrivate;
62 G_DEFINE_TYPE(GNCSearchOwner, gnc_search_owner, GNC_TYPE_SEARCH_CORE_TYPE)
70 static guint signals[LAST_SIGNAL] = { 0 };
74 gnc_search_owner_class_init (GNCSearchOwnerClass *klass)
76 GObjectClass *object_class;
77 GNCSearchCoreTypeClass *gnc_search_core_type = (GNCSearchCoreTypeClass *)klass;
79 object_class = G_OBJECT_CLASS (klass);
81 object_class->finalize = gnc_search_owner_finalize;
84 gnc_search_core_type->validate = gncs_validate;
85 gnc_search_core_type->pass_parent = pass_parent;
86 gnc_search_core_type->get_widget = gncs_get_widget;
87 gnc_search_core_type->get_predicate = gncs_get_predicate;
88 gnc_search_core_type->clone = gncs_clone;
92 gnc_search_owner_init (GNCSearchOwner *o)
97 gnc_search_owner_finalize (GObject *obj)
99 g_assert (GNC_IS_SEARCH_OWNER (obj));
101 G_OBJECT_CLASS (gnc_search_owner_parent_class)->finalize(obj);
112 gnc_search_owner_new (
void)
114 GNCSearchOwner *o = g_object_new(gnc_search_owner_get_type (), NULL);
119 gncs_validate (GNCSearchCoreType *fe)
121 GNCSearchOwner *fi = (GNCSearchOwner *)fe;
122 gboolean valid = TRUE;
124 g_return_val_if_fail (fi, FALSE);
125 g_return_val_if_fail (GNC_IS_SEARCH_OWNER (fi), FALSE);
127 if (fi->owner.owner.undefined == NULL)
130 gnc_error_dialog (GTK_WINDOW(fi->parent),
"%s", _(
"You have not selected an owner"));
139 owner_changed_cb (GtkWidget *widget, gpointer data)
141 GNCSearchOwner *fe = data;
143 gnc_owner_get_owner (fe->owner_choice, &(fe->owner));
148 set_owner_widget (GNCSearchOwner *fe)
151 if (fe->owner_choice)
152 gtk_container_remove (GTK_CONTAINER (fe->owner_box), fe->owner_choice);
156 gnc_owner_select_create (NULL, fe->owner_box,
157 gnc_get_current_book(), &(fe->owner));
160 g_signal_connect (G_OBJECT (fe->owner_choice),
"changed",
161 G_CALLBACK (owner_changed_cb), fe);
163 gtk_widget_show_all (fe->owner_choice);
167 type_combo_changed (GtkWidget *widget, GNCSearchOwner *fe)
171 g_return_if_fail(GTK_IS_COMBO_BOX(widget));
173 type = gnc_combo_box_search_get_active(GTK_COMBO_BOX(widget));
178 fe->owner.type = type;
179 fe->owner.owner.undefined = NULL;
180 set_owner_widget (fe);
182 else if (fe->owner_choice == NULL)
183 set_owner_widget (fe);
187 make_type_menu (GNCSearchCoreType *fe)
189 GNCSearchOwner *fi = (GNCSearchOwner *)fe;
195 combo = GTK_COMBO_BOX(gnc_combo_box_new_search());
196 gnc_combo_box_search_add(combo, _(
"Customer"), GNC_OWNER_CUSTOMER);
197 gnc_combo_box_search_add(combo, _(
"Vendor"), GNC_OWNER_VENDOR);
198 gnc_combo_box_search_add(combo, _(
"Employee"), GNC_OWNER_EMPLOYEE);
199 gnc_combo_box_search_add(combo, _(
"Job"), GNC_OWNER_JOB);
201 g_signal_connect (combo,
"changed", G_CALLBACK (type_combo_changed), fe);
202 gnc_combo_box_search_set_active(combo, type);
204 return GTK_WIDGET(combo);
210 make_how_menu (GNCSearchCoreType *fe)
212 GNCSearchOwner *fi = (GNCSearchOwner *)fe;
215 combo = GTK_COMBO_BOX(gnc_combo_box_new_search());
217 gnc_combo_box_search_add(combo, _(
"is not"), QOF_GUID_MATCH_NONE);
218 gnc_combo_box_search_changed(combo, &fi->how);
221 return GTK_WIDGET(combo);
225 pass_parent (GNCSearchCoreType *fe, gpointer parent)
227 GNCSearchOwner *fi = (GNCSearchOwner *)fe;
229 g_return_if_fail (fi);
230 g_return_if_fail (GNC_IS_SEARCH_OWNER (fi));
232 fi->parent = GTK_WINDOW(parent);
236 gncs_get_widget (GNCSearchCoreType *fe)
238 GtkWidget *how_menu, *type_menu, *box;
239 GNCSearchOwner *fi = (GNCSearchOwner *)fe;
241 g_return_val_if_fail (fi, NULL);
242 g_return_val_if_fail (GNC_IS_SEARCH_OWNER (fi), NULL);
244 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
245 gtk_box_set_homogeneous (GTK_BOX (box), FALSE);
248 how_menu = make_how_menu (fe);
249 gtk_box_pack_start (GTK_BOX (box), how_menu, FALSE, FALSE, 3);
252 fi->owner_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
253 gtk_box_set_homogeneous (GTK_BOX (fi->owner_box), FALSE);
259 type_menu = make_type_menu (fe);
260 gtk_box_pack_start (GTK_BOX (box), type_menu, FALSE, FALSE, 3);
263 gtk_box_pack_start (GTK_BOX (box), fi->owner_box, FALSE, FALSE, 3);
269 static QofQueryPredData* gncs_get_predicate (GNCSearchCoreType *fe)
271 GNCSearchOwner *fi = (GNCSearchOwner *)fe;
275 g_return_val_if_fail (fi, NULL);
276 g_return_val_if_fail (GNC_IS_SEARCH_OWNER (fi), NULL);
279 l = g_list_prepend (l, (gpointer)guid);
281 return qof_query_guid_predicate (fi->how, l);
284 static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe)
286 GNCSearchOwner *se, *fse = (GNCSearchOwner *)fe;
288 g_return_val_if_fail (fse, NULL);
289 g_return_val_if_fail (GNC_IS_SEARCH_OWNER (fse), NULL);
291 se = gnc_search_owner_new ();
293 gncOwnerCopy (&(fse->owner), &(se->owner));
295 return (GNCSearchCoreType *)se;
const GncGUID * gncOwnerGetGUID(const GncOwner *owner)
Get the GncGUID of the immediate owner.
Business Interface: Object OWNERs.
utility functions for the GnuCash UI
These expect a single object and expect the QofAccessFunc returns GncGUID*.
GncOwnerType gncOwnerGetType(const GncOwner *owner)
Returns the GncOwnerType of this owner.
The type used to store guids in C.