29 #include <glib/gi18n.h>
34 #include "gnc-component-manager.h"
43 #include "gnc-general-search.h"
45 #include "business-gnome-utils.h"
46 #include "dialog-customer.h"
47 #include "dialog-job.h"
48 #include "dialog-vendor.h"
49 #include "dialog-employee.h"
50 #include "dialog-invoice.h"
56 GNCSEARCH_TYPE_SELECT,
60 static GtkWidget * gnc_owner_new (GtkWidget *label, GtkWidget *hbox,
65 GNCSearchCB search_cb = NULL;
66 const char *type_name = NULL;
67 const char *text = NULL;
68 gboolean text_editable = FALSE;
72 case GNCSEARCH_TYPE_SELECT:
73 text = _(
"Select...");
76 case GNCSEARCH_TYPE_EDIT:
78 text_editable = FALSE;
85 case GNC_OWNER_UNDEFINED:
88 case GNC_OWNER_CUSTOMER:
89 if (type == GNCSEARCH_TYPE_SELECT)
90 search_cb = gnc_customer_search_select;
92 search_cb = gnc_customer_search_edit;
93 type_name = GNC_CUSTOMER_MODULE_NAME;
97 if (type == GNCSEARCH_TYPE_SELECT)
98 search_cb = gnc_job_search_select;
100 search_cb = gnc_job_search_edit;
101 type_name = GNC_JOB_MODULE_NAME;
104 case GNC_OWNER_VENDOR:
105 if (type == GNCSEARCH_TYPE_SELECT)
106 search_cb = gnc_vendor_search_select;
108 search_cb = gnc_vendor_search_edit;
109 type_name = GNC_VENDOR_MODULE_NAME;
112 case GNC_OWNER_EMPLOYEE:
113 if (type == GNCSEARCH_TYPE_SELECT)
114 search_cb = gnc_employee_search_select;
116 search_cb = gnc_employee_search_edit;
117 type_name = GNC_EMPLOYEE_MODULE_NAME;
121 g_warning (
"Unknown type");
125 edit = gnc_general_search_new (type_name, text, text_editable, search_cb, book, book);
129 gnc_general_search_set_selected (GNC_GENERAL_SEARCH (edit),
130 owner->owner.undefined);
131 gtk_box_pack_start (GTK_BOX (hbox), edit, TRUE, TRUE, 0);
138 GtkWidget * gnc_owner_select_create (GtkWidget *label, GtkWidget *hbox,
141 g_return_val_if_fail (hbox != NULL, NULL);
142 g_return_val_if_fail (book != NULL, NULL);
143 g_return_val_if_fail (owner != NULL, NULL);
145 return gnc_owner_new (label, hbox, book, owner, GNCSEARCH_TYPE_SELECT);
148 GtkWidget * gnc_owner_edit_create (GtkWidget *label, GtkWidget *hbox,
151 g_return_val_if_fail (hbox != NULL, NULL);
152 g_return_val_if_fail (book != NULL, NULL);
153 g_return_val_if_fail (owner != NULL, NULL);
155 return gnc_owner_new (label, hbox, book, owner, GNCSEARCH_TYPE_EDIT);
158 void gnc_owner_get_owner (GtkWidget *widget,
GncOwner *owner)
160 g_return_if_fail (widget != NULL);
161 g_return_if_fail (owner != NULL);
166 owner->owner.undefined =
167 gnc_general_search_get_selected (GNC_GENERAL_SEARCH (widget));
170 void gnc_owner_set_owner (GtkWidget *widget,
GncOwner *owner)
172 g_return_if_fail (widget != NULL);
173 g_return_if_fail (owner != NULL);
179 gnc_general_search_set_selected (GNC_GENERAL_SEARCH (widget),
180 owner->owner.undefined);
192 gnc_invoice_select_search_cb (gpointer start, gpointer isip)
196 if (!isi)
return NULL;
199 return gnc_invoice_search (start,
200 isi->have_owner ? &isi->owner : NULL,
205 gnc_invoice_select_search_set_label(
GncISI* isi)
207 GncOwnerType owner_type;
211 if (!isi->label)
return;
218 case GNC_OWNER_VENDOR:
221 case GNC_OWNER_EMPLOYEE:
222 label = _(
"Voucher");
225 label = _(
"Invoice");
229 gtk_label_set_text(GTK_LABEL(isi->label), label);
232 GtkWidget * gnc_invoice_select_create (GtkWidget *hbox,
QofBook *book,
240 g_return_val_if_fail (hbox != NULL, NULL);
241 g_return_val_if_fail (book != NULL, NULL);
250 gncOwnerCopy(owner, &isi->owner);
251 isi->have_owner = TRUE;
255 gncOwnerInitCustomer(&isi->owner, NULL);
260 edit = gnc_general_search_new (GNC_INVOICE_MODULE_NAME, _(
"Select..."),
261 TRUE, gnc_invoice_select_search_cb, isi, isi->book);
268 gnc_general_search_set_selected (GNC_GENERAL_SEARCH (edit), invoice);
269 gtk_box_pack_start (GTK_BOX (hbox), edit, FALSE, FALSE, 0);
270 g_object_set_data_full(G_OBJECT(edit),
"isi-state", isi, g_free);
273 gnc_invoice_select_search_set_label(isi);
278 GncInvoice * gnc_invoice_get_invoice (GtkWidget *widget)
280 g_return_val_if_fail (widget != NULL, NULL);
282 return gnc_general_search_get_selected (GNC_GENERAL_SEARCH (widget));
285 void gnc_invoice_set_invoice (GtkWidget *widget,
GncInvoice *invoice)
287 g_return_if_fail (widget != NULL);
288 g_return_if_fail (invoice != NULL);
290 gnc_general_search_set_selected (GNC_GENERAL_SEARCH (widget), invoice);
293 void gnc_invoice_set_owner (GtkWidget *widget,
GncOwner *owner)
297 g_return_if_fail (widget != NULL);
298 g_return_if_fail (owner != NULL);
300 isi = g_object_get_data(G_OBJECT(widget),
"isi-state");
303 if (isi->owner.owner.undefined == owner->owner.undefined)
306 gncOwnerCopy(owner, &isi->owner);
307 isi->have_owner = TRUE;
308 gnc_general_search_set_selected(GNC_GENERAL_SEARCH(widget), NULL);
311 gnc_invoice_select_search_set_label(isi);
315 gnc_account_select_combo_fill (GtkWidget *combo,
QofBook *book,
316 GList *acct_types, GList *acct_commodities)
323 g_return_val_if_fail (combo && GTK_IS_COMBO_BOX(combo), NULL);
324 g_return_val_if_fail (book, NULL);
325 g_return_val_if_fail (acct_types, NULL);
328 text = gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(GTK_BIN (GTK_COMBO_BOX(combo)))));
330 g_object_set_data (G_OBJECT(combo),
"book", book);
334 store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(combo)));
335 gtk_list_store_clear(store);
338 for (node = list; node; node = node->next)
350 if (acct_commodities)
352 if ( g_list_find_custom( acct_commodities,
361 gtk_list_store_append(store, &iter);
362 gtk_list_store_set (store, &iter, 0, name, -1);
365 if (!text || g_strcmp0 (text,
"") == 0)
367 text = g_strdup (name);
371 gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
377 return gnc_account_select_combo_get_active (combo);
381 gnc_account_select_combo_get_active (GtkWidget *combo)
386 if (!combo || !GTK_IS_COMBO_BOX(combo))
389 book = g_object_get_data (G_OBJECT(combo),
"book");
393 text = gtk_entry_get_text( GTK_ENTRY( gtk_bin_get_child( GTK_BIN( GTK_COMBO_BOX(combo)))));
395 if (!text || g_strcmp0 (text,
"") == 0)
405 typedef const char * (*GenericLookup_t)(gpointer);
406 typedef gboolean (*GenericEqual_t)(gpointer, gpointer);
414 const char * (*get_name)(gpointer);
416 gboolean (*is_equal)(gpointer, gpointer);
421 gnc_simple_combo_add_item (GtkListStore *liststore,
const char *label, gpointer this_item)
425 gtk_list_store_append (liststore, &iter);
426 gtk_list_store_set (liststore, &iter, 0, label, 1, this_item, -1);
433 GtkListStore *liststore;
435 if (!(lsd->get_list))
437 if (!(lsd->get_name))
441 items = (lsd->get_list)(lsd->book);
444 liststore = GTK_LIST_STORE (gtk_combo_box_get_model (lsd->cbox));
445 gtk_list_store_clear (liststore);
447 if (lsd->none_ok || !items)
448 gnc_simple_combo_add_item (liststore, _(
"None"), NULL);
450 for ( ; items; items = items->next)
451 gnc_simple_combo_add_item (liststore, (lsd->get_name)(items->data), items->data);
455 gnc_simple_combo_refresh_handler (GHashTable *changes, gpointer user_data)
458 gnc_simple_combo_generate_liststore (lsd);
462 gnc_simple_combo_destroy_cb (GtkWidget *widget, gpointer data)
466 gnc_unregister_gui_component (lsd->component_id);
471 gnc_simple_combo_make (GtkComboBox *cbox,
QofBook *book,
474 GenericLookup_t get_name,
475 GenericEqual_t is_equal,
476 gpointer initial_choice)
480 lsd = g_object_get_data (G_OBJECT (cbox),
"liststore-data");
493 lsd->none_ok = none_ok;
494 lsd->get_name = get_name;
495 lsd->get_list = get_list;
496 lsd->is_equal = is_equal;
497 g_object_set_data (G_OBJECT (cbox),
"liststore-data", lsd);
500 gnc_register_gui_component (
"gnc-simple-combo-refresh-hook",
501 gnc_simple_combo_refresh_handler,
505 gnc_gui_component_watch_entity_type (lsd->component_id,
507 QOF_EVENT_MODIFY | QOF_EVENT_DESTROY);
509 g_signal_connect (G_OBJECT (cbox),
"destroy",
510 G_CALLBACK (gnc_simple_combo_destroy_cb), lsd);
513 gnc_simple_combo_generate_liststore (lsd);
514 gnc_simple_combo_set_value (cbox, initial_choice);
528 gnc_billterms_combo (GtkComboBox *cbox,
QofBook *book,
531 if (!cbox || !book)
return;
533 gnc_simple_combo_make (cbox, book, none_ok, GNC_BILLTERM_MODULE_NAME,
535 (GenericLookup_t)gncBillTermGetName,
537 (gpointer)initial_choice);
541 gnc_taxtables_combo (GtkComboBox *cbox,
QofBook *book,
544 if (!cbox || !book)
return;
546 gnc_simple_combo_make (cbox, book, none_ok, GNC_TAXTABLE_MODULE_NAME,
547 gncTaxTableGetTables,
548 (GenericLookup_t)gncTaxTableGetName,
550 (gpointer)initial_choice);
554 gnc_taxincluded_combo (GtkComboBox *cbox,
GncTaxIncluded initial_choice)
556 GtkListStore *liststore;
560 gnc_simple_combo_make (cbox, NULL, FALSE, NULL, NULL, NULL, NULL,
561 GINT_TO_POINTER(initial_choice));
562 liststore = GTK_LIST_STORE (gtk_combo_box_get_model (cbox));
564 gnc_simple_combo_add_item (liststore, _(
"Yes"),
566 gnc_simple_combo_add_item (liststore, _(
"No"),
568 gnc_simple_combo_add_item (liststore, _(
"Use Global"),
571 gnc_simple_combo_set_value (cbox, GINT_TO_POINTER(initial_choice));
578 gnc_simple_combo_get_value (GtkComboBox *cbox)
582 GValue value = { 0 };
584 if (!cbox)
return NULL;
586 model = gtk_combo_box_get_model (cbox);
587 if (!gtk_combo_box_get_active_iter (cbox, &iter))
589 gtk_tree_model_get_value (model, &iter, 1, &value);
590 return g_value_get_pointer (&value);
596 gnc_simple_combo_set_value (GtkComboBox *cbox, gpointer data)
601 ListStoreData *lsd = g_object_get_data (G_OBJECT (cbox),
"liststore-data");
605 model = gtk_combo_box_get_model (cbox);
606 valid_iter = gtk_tree_model_get_iter_first (model, &iter);
610 GValue value = { 0 };
612 gtk_tree_model_get_value (model, &iter, 1, &value);
613 if (lsd && lsd->is_equal)
615 if ((lsd->is_equal)(g_value_get_pointer(&value), data))
617 gtk_combo_box_set_active_iter (cbox, &iter);
623 if (g_value_get_pointer(&value) == data)
625 gtk_combo_box_set_active_iter (cbox, &iter);
629 valid_iter = gtk_tree_model_iter_next (model, &iter);
void gnc_cbwe_set_by_string(GtkComboBox *cbwe, const gchar *text)
Business Interface: Object OWNERs.
const char * qof_object_get_type_label(QofIdTypeConst type_name)
utility functions for the GnuCash UI
GNCAccountType xaccAccountGetType(const Account *acc)
int gnc_commodity_compare_void(const void *a, const void *b)
gboolean gncBillTermIsFamily(const GncBillTerm *a, const GncBillTerm *b)
gchar * gnc_account_get_full_name(const Account *account)
Account handling public routines.
Account * gnc_account_lookup_by_full_name(const Account *any_acc, const gchar *name)
GncOwnerType gncOwnerGetType(const GncOwner *owner)
const GncOwner * gncOwnerGetEndOwner(const GncOwner *owner)
GList * gnc_account_get_descendants(const Account *account)
Business Invoice Interface.
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Commodity handling public routines.