29 #include <glib/gi18n.h> 31 #include "dialog-utils.h" 32 #include "gnc-component-manager.h" 33 #include "gnc-session.h" 35 #include "gnc-gui-query.h" 39 #include "gnc-amount-edit.h" 43 #include "dialog-tax-table.h" 45 #define DIALOG_TAX_TABLE_CM_CLASS "tax-table-dialog" 46 #define GNC_PREFS_GROUP "dialogs.business.tax-tables" 50 TAX_TABLE_COL_NAME = 0,
51 TAX_TABLE_COL_POINTER,
57 TAX_ENTRY_COL_NAME = 0,
58 TAX_ENTRY_COL_POINTER,
63 void tax_table_new_table_cb (GtkButton *button, TaxTableWindow *ttw);
64 void tax_table_rename_table_cb (GtkButton *button, TaxTableWindow *ttw);
65 void tax_table_delete_table_cb (GtkButton *button, TaxTableWindow *ttw);
66 void tax_table_new_entry_cb (GtkButton *button, TaxTableWindow *ttw);
67 void tax_table_edit_entry_cb (GtkButton *button, TaxTableWindow *ttw);
68 void tax_table_delete_entry_cb (GtkButton *button, TaxTableWindow *ttw);
69 void tax_table_window_close (GtkWidget *widget, gpointer data);
70 void tax_table_window_destroy_cb (GtkWidget *widget, gpointer data);
75 GtkWidget *names_view;
76 GtkWidget *entries_view;
85 typedef struct _new_taxtable
88 GtkWidget *name_entry;
89 GtkWidget *amount_entry;
100 new_tax_table_check_entry (
NewTaxTable *ntt, GError **error)
105 GError *tmp_error = NULL;
111 print_info = gnc_commodity_print_info (currency, FALSE);
112 gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT(ntt->amount_entry),
117 print_info = gnc_integral_print_info ();
118 print_info.max_decimal_places = 5;
119 gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT (ntt->amount_entry), 100000);
122 gnc_amount_edit_set_print_info (GNC_AMOUNT_EDIT(ntt->amount_entry), print_info);
124 result = gnc_amount_edit_expr_is_valid (GNC_AMOUNT_EDIT(ntt->amount_entry),
125 &value, TRUE, &tmp_error);
130 g_propagate_error (error, tmp_error);
132 g_error_free (tmp_error);
142 const char *name = NULL;
146 GError *error = NULL;
148 g_return_val_if_fail (ntt, FALSE);
156 name = gtk_entry_get_text (GTK_ENTRY(ntt->name_entry));
157 if (name == NULL || *name ==
'\0')
159 message = _(
"You must provide a name for this Tax Table.");
160 gnc_error_dialog (GTK_WINDOW(ntt->dialog),
"%s", message);
163 if (gncTaxTableLookupByName (ttw->book, name))
165 message = g_strdup_printf (_(
166 "You must provide a unique name for this Tax Table. " 167 "Your choice \"%s\" is already in use."), name);
168 gnc_error_dialog (GTK_WINDOW(ntt->dialog),
"%s", message);
175 if (!new_tax_table_check_entry (ntt, &error))
177 message = g_strdup (error->message);
178 gnc_error_dialog (GTK_WINDOW(ntt->dialog),
"%s", message);
180 g_error_free (error);
185 amount = gnc_amount_edit_get_amount (GNC_AMOUNT_EDIT(ntt->amount_entry));
188 gnc_numeric_create (100, 1)) > 0)
190 message = _(
"Percentage amount must be between -100 and 100.");
191 gnc_error_dialog (GTK_WINDOW(ntt->dialog),
"%s", message);
199 message = _(
"You must choose a Tax Account.");
200 gnc_error_dialog (GTK_WINDOW(ntt->dialog),
"%s", message);
204 gnc_suspend_gui_refresh ();
210 gncTaxTableBeginEdit (
table);
211 gncTaxTableSetName (
table, name);
213 ttw->current_table =
table;
214 ntt->created_table =
table;
217 gncTaxTableBeginEdit (ttw->current_table);
229 entry = gncTaxTableEntryCreate ();
230 gncTaxTableAddEntry (ttw->current_table, entry);
231 ttw->current_entry = entry;
234 gncTaxTableEntrySetAccount (entry, acc);
235 gncTaxTableEntrySetType (entry, ntt->type);
236 gncTaxTableEntrySetAmount (entry, amount);
240 gncTaxTableChanged (ttw->current_table);
241 gncTaxTableCommitEdit (ttw->current_table);
243 gnc_resume_gui_refresh ();
248 combo_changed (GtkWidget *widget,
NewTaxTable *ntt)
252 g_return_if_fail (GTK_IS_COMBO_BOX(widget));
253 g_return_if_fail (ntt);
255 index = gtk_combo_box_get_active (GTK_COMBO_BOX(widget));
256 ntt->type = index + 1;
258 new_tax_table_check_entry (ntt, NULL);
262 tax_table_account_selection_changed_cb (GtkTreeSelection *treeselection,
265 new_tax_table_check_entry (ntt, NULL);
269 new_tax_table_dialog (TaxTableWindow *ttw, gboolean new_table,
275 GtkWidget *box, *widget, *combo;
277 gint response, index;
278 GtkTreeSelection *selection;
280 if (!ttw)
return NULL;
281 if (new_table && entry)
return NULL;
286 ntt->new_table = new_table;
289 ntt->type = gncTaxTableEntryGetType (entry);
294 builder = gtk_builder_new ();
295 gnc_builder_add_from_file (builder,
"dialog-tax-table.glade",
"type_liststore");
296 gnc_builder_add_from_file (builder,
"dialog-tax-table.glade",
"new_tax_table_dialog");
298 ntt->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"new_tax_table_dialog"));
301 gtk_widget_set_name (GTK_WIDGET(ntt->dialog),
"gnc-id-tax-table");
302 gnc_widget_style_context_add_class (GTK_WIDGET(ntt->dialog),
"gnc-class-taxes");
304 ntt->name_entry = GTK_WIDGET(gtk_builder_get_object (builder,
"name_entry"));
306 gtk_entry_set_text (GTK_ENTRY(ntt->name_entry), name);
309 combo = GTK_WIDGET(gtk_builder_get_object (builder,
"type_combobox"));
311 gtk_combo_box_set_active (GTK_COMBO_BOX(combo), index - 1);
312 g_signal_connect (combo,
"changed", G_CALLBACK(combo_changed), ntt);
315 box = GTK_WIDGET(gtk_builder_get_object (builder,
"amount_box"));
316 ntt->amount_entry = widget = gnc_amount_edit_new ();
317 gnc_amount_edit_set_evaluate_on_enter (GNC_AMOUNT_EDIT(widget), TRUE);
318 gnc_amount_edit_set_fraction (GNC_AMOUNT_EDIT(widget), 100000);
319 gtk_box_pack_start (GTK_BOX(box), widget, TRUE, TRUE, 0);
321 box = GTK_WIDGET(gtk_builder_get_object (builder,
"acct_window"));
323 gtk_container_add (GTK_CONTAINER(box), ntt->acct_tree);
324 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(ntt->acct_tree), FALSE);
326 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(ntt->acct_tree));
327 g_signal_connect (G_OBJECT(selection),
"changed",
328 G_CALLBACK(tax_table_account_selection_changed_cb), ntt);
331 gtk_entry_set_activates_default (GTK_ENTRY(gnc_amount_edit_gtk_entry
332 (GNC_AMOUNT_EDIT(ntt->amount_entry))),
336 widget = GTK_WIDGET(gtk_builder_get_object (builder,
"value_label"));
337 gnc_amount_edit_make_mnemonic_target (GNC_AMOUNT_EDIT(ntt->amount_entry), widget);
338 widget = GTK_WIDGET(gtk_builder_get_object (builder,
"account_label"));
339 gtk_label_set_mnemonic_widget (GTK_LABEL(widget), ntt->acct_tree);
344 gnc_amount_edit_set_amount (GNC_AMOUNT_EDIT(ntt->amount_entry),
345 gncTaxTableEntryGetAmount (entry));
347 gncTaxTableEntryGetAccount (entry));
351 gtk_window_set_transient_for (GTK_WINDOW(ntt->dialog), GTK_WINDOW(ttw->dialog));
354 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, ntt);
357 gtk_widget_show_all (ntt->dialog);
358 if (new_table == FALSE)
360 gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder,
"table_title")));
361 gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder,
"table_name")));
362 gtk_widget_hide (GTK_WIDGET(gtk_builder_get_object (builder,
"spacer")));
363 gtk_widget_hide (ntt->name_entry);
365 GTK_WIDGET(gtk_builder_get_object (builder,
"ttd_table"));
366 gtk_widget_grab_focus (gnc_amount_edit_gtk_entry
367 (GNC_AMOUNT_EDIT(ntt->amount_entry)));
370 gtk_widget_grab_focus (ntt->name_entry);
373 gtk_widget_show (ntt->dialog);
378 response = gtk_dialog_run (GTK_DIALOG(ntt->dialog));
381 case GTK_RESPONSE_OK:
382 if (new_tax_table_ok_cb (ntt))
384 created_table = ntt->created_table;
394 g_object_unref (G_OBJECT(builder));
396 gtk_widget_destroy (ntt->dialog);
399 return created_table;
405 tax_table_entries_refresh (TaxTableWindow *ttw)
412 GtkTreeSelection *selection;
413 GtkTreeRowReference *reference = NULL;
416 g_return_if_fail (ttw);
418 view = GTK_TREE_VIEW(ttw->entries_view);
419 store = GTK_LIST_STORE(gtk_tree_view_get_model (view));
422 selected_entry = ttw->current_entry;
423 gtk_list_store_clear (store);
424 if (ttw->current_table == NULL)
428 list = gncTaxTableGetEntries (ttw->current_table);
430 list = g_list_reverse (g_list_copy (list));
432 for (node = list ; node; node = node->next)
436 Account *acc = gncTaxTableEntryGetAccount (entry);
437 gnc_numeric amount = gncTaxTableEntryGetAmount (entry);
440 switch (gncTaxTableEntryGetType (entry))
444 g_strdup_printf (
"%s%%",
446 gnc_default_print_info (FALSE)));
450 g_strdup_printf (
"%s",
452 gnc_default_print_info (TRUE)));
459 gtk_list_store_prepend (store, &iter);
460 gtk_list_store_set (store, &iter,
461 TAX_ENTRY_COL_NAME, row_text[0],
462 TAX_ENTRY_COL_POINTER, entry,
463 TAX_ENTRY_COL_AMOUNT, row_text[1],
465 if (entry == selected_entry)
467 path = gtk_tree_model_get_path (GTK_TREE_MODEL(store), &iter);
468 reference = gtk_tree_row_reference_new (GTK_TREE_MODEL(store), path);
469 gtk_tree_path_free (path);
472 g_free (row_text[0]);
473 g_free (row_text[1]);
481 path = gtk_tree_row_reference_get_path (reference);
482 gtk_tree_row_reference_free (reference);
485 selection = gtk_tree_view_get_selection (view);
486 gtk_tree_selection_select_path (selection, path);
487 gtk_tree_view_scroll_to_cell (view, path, NULL, TRUE, 0.5, 0.0);
488 gtk_tree_path_free (path);
494 tax_table_window_refresh (TaxTableWindow *ttw)
501 GtkTreeSelection *selection;
502 GtkTreeRowReference *reference = NULL;
503 GncTaxTable *saved_current_table = ttw->current_table;
505 g_return_if_fail (ttw);
506 view = GTK_TREE_VIEW(ttw->names_view);
507 store = GTK_LIST_STORE(gtk_tree_view_get_model (view));
510 gtk_list_store_clear(store);
512 gnc_gui_component_clear_watches (ttw->component_id);
515 list = gncTaxTableGetTables (ttw->book);
517 list = g_list_reverse (g_list_copy (list));
519 for (node = list; node; node = node->next)
523 gnc_gui_component_watch_entity (ttw->component_id,
527 gtk_list_store_prepend (store, &iter);
528 gtk_list_store_set (store, &iter,
529 TAX_TABLE_COL_NAME, gncTaxTableGetName (
table),
530 TAX_TABLE_COL_POINTER,
table,
533 if (
table == saved_current_table)
535 path = gtk_tree_model_get_path (GTK_TREE_MODEL(store), &iter);
536 reference = gtk_tree_row_reference_new (GTK_TREE_MODEL(store), path);
537 gtk_tree_path_free (path);
544 gnc_gui_component_watch_entity_type (ttw->component_id,
545 GNC_TAXTABLE_MODULE_NAME,
546 QOF_EVENT_CREATE | QOF_EVENT_DESTROY);
550 path = gtk_tree_row_reference_get_path (reference);
551 gtk_tree_row_reference_free (reference);
554 selection = gtk_tree_view_get_selection (view);
555 gtk_tree_selection_select_path (selection, path);
556 gtk_tree_view_scroll_to_cell (view, path, NULL, TRUE, 0.5, 0.0);
557 gtk_tree_path_free (path);
561 tax_table_entries_refresh (ttw);
566 tax_table_selection_changed (GtkTreeSelection *selection,
569 TaxTableWindow *ttw = user_data;
574 g_return_if_fail (ttw);
576 if (!gtk_tree_selection_get_selected (selection, &model, &iter))
579 gtk_tree_model_get (model, &iter, TAX_TABLE_COL_POINTER, &
table, -1);
580 g_return_if_fail (
table);
583 if (
table != ttw->current_table)
585 ttw->current_table =
table;
586 ttw->current_entry = NULL;
589 tax_table_entries_refresh (ttw);
593 tax_table_entry_selection_changed (GtkTreeSelection *selection,
596 TaxTableWindow *ttw = user_data;
600 g_return_if_fail (ttw);
602 if (!gtk_tree_selection_get_selected (selection, &model, &iter))
604 ttw->current_entry = NULL;
608 gtk_tree_model_get (model, &iter, TAX_ENTRY_COL_POINTER, &ttw->current_entry, -1);
612 tax_table_entry_row_activated (GtkTreeView *tree_view,
614 GtkTreeViewColumn *column,
617 TaxTableWindow *ttw = user_data;
619 new_tax_table_dialog (ttw, FALSE, ttw->current_entry, NULL);
623 tax_table_new_table_cb (GtkButton *button, TaxTableWindow *ttw)
625 g_return_if_fail (ttw);
626 new_tax_table_dialog (ttw, TRUE, NULL, NULL);
631 *rename_tax_table_dialog (GtkWidget *parent,
634 const char *button_name,
638 GtkWidget *main_vbox;
644 main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
645 gtk_box_set_homogeneous (GTK_BOX(main_vbox), FALSE);
646 gtk_container_set_border_width (GTK_CONTAINER(main_vbox), 6);
647 gtk_widget_show (main_vbox);
649 label = gtk_label_new (msg);
650 gtk_label_set_justify (GTK_LABEL(label), GTK_JUSTIFY_LEFT);
651 gtk_box_pack_start (GTK_BOX(main_vbox), label, FALSE, FALSE, 0);
652 gtk_widget_show (label);
654 vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
655 gtk_box_set_homogeneous (GTK_BOX(vbox), TRUE);
656 gtk_container_set_border_width (GTK_CONTAINER(vbox), 6);
657 gtk_container_add (GTK_CONTAINER(main_vbox), vbox);
658 gtk_widget_show (vbox);
660 textbox = gtk_entry_new ();
661 gtk_widget_show (textbox);
662 gtk_entry_set_text (GTK_ENTRY(textbox), text);
663 gtk_box_pack_start (GTK_BOX(vbox), textbox, FALSE, FALSE, 0);
665 dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW(parent),
666 GTK_DIALOG_DESTROY_WITH_PARENT,
667 _(
"_Cancel"), GTK_RESPONSE_CANCEL,
668 button_name, GTK_RESPONSE_OK,
670 gtk_dialog_set_default_response (GTK_DIALOG(dialog), GTK_RESPONSE_OK);
672 dvbox = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
673 gtk_box_pack_start (GTK_BOX(dvbox), main_vbox, TRUE, TRUE, 0);
675 if (gtk_dialog_run (GTK_DIALOG(dialog)) != GTK_RESPONSE_OK)
677 gtk_widget_destroy (dialog);
681 text = g_strdup (gtk_entry_get_text (GTK_ENTRY(textbox)));
682 gtk_widget_destroy (dialog);
687 tax_table_rename_table_cb (GtkButton *button, TaxTableWindow *ttw)
691 g_return_if_fail (ttw);
693 if (!ttw->current_table)
696 oldname = gncTaxTableGetName (ttw->current_table);
697 newname = rename_tax_table_dialog (ttw->dialog, (_(
"Rename")),
698 (_(
"Please enter new name")),
699 (_(
"_Rename")), oldname);
701 if (newname && *newname !=
'\0' && (g_strcmp0 (oldname, newname) != 0))
703 if (gncTaxTableLookupByName (ttw->book, newname))
705 char *message = g_strdup_printf (_(
"Tax table name \"%s\" already exists."),
707 gnc_error_dialog (GTK_WINDOW(ttw->dialog),
"%s", message);
712 gncTaxTableSetName (ttw->current_table, newname);
719 tax_table_delete_table_cb (GtkButton *button, TaxTableWindow *ttw)
721 g_return_if_fail (ttw);
723 if (!ttw->current_table)
726 if (gncTaxTableGetRefcount (ttw->current_table) > 0)
729 g_strdup_printf (_(
"Tax table \"%s\" is in use. You cannot delete it."),
730 gncTaxTableGetName (ttw->current_table));
731 gnc_error_dialog (GTK_WINDOW(ttw->dialog),
"%s", message);
736 if (gnc_verify_dialog (GTK_WINDOW(ttw->dialog), FALSE,
737 _(
"Are you sure you want to delete \"%s\"?"),
738 gncTaxTableGetName (ttw->current_table)))
741 gnc_suspend_gui_refresh ();
742 gncTaxTableBeginEdit (ttw->current_table);
743 gncTaxTableDestroy (ttw->current_table);
744 ttw->current_table = NULL;
745 ttw->current_entry = NULL;
746 gnc_resume_gui_refresh ();
751 tax_table_new_entry_cb (GtkButton *button, TaxTableWindow *ttw)
753 g_return_if_fail (ttw);
754 if (!ttw->current_table)
756 new_tax_table_dialog (ttw, FALSE, NULL, NULL);
760 tax_table_edit_entry_cb (GtkButton *button, TaxTableWindow *ttw)
762 g_return_if_fail (ttw);
763 if (!ttw->current_entry)
765 new_tax_table_dialog (ttw, FALSE, ttw->current_entry, NULL);
769 tax_table_delete_entry_cb (GtkButton *button, TaxTableWindow *ttw)
771 g_return_if_fail (ttw);
772 if (!ttw->current_table || !ttw->current_entry)
775 if (g_list_length (gncTaxTableGetEntries (ttw->current_table)) <= 1)
777 char *message = _(
"You cannot remove the last entry from the tax table. " 778 "Try deleting the tax table if you want to do that.");
779 gnc_error_dialog (GTK_WINDOW(ttw->dialog) ,
"%s", message);
783 if (gnc_verify_dialog (GTK_WINDOW(ttw->dialog), FALSE,
"%s",
784 _(
"Are you sure you want to delete this entry?")))
787 gnc_suspend_gui_refresh ();
788 gncTaxTableBeginEdit (ttw->current_table);
789 gncTaxTableRemoveEntry (ttw->current_table, ttw->current_entry);
790 gncTaxTableEntryDestroy (ttw->current_entry);
791 gncTaxTableChanged (ttw->current_table);
792 gncTaxTableCommitEdit (ttw->current_table);
793 ttw->current_entry = NULL;
794 gnc_resume_gui_refresh ();
799 tax_table_window_refresh_handler (GHashTable *changes, gpointer data)
801 TaxTableWindow *ttw = data;
803 g_return_if_fail (data);
804 tax_table_window_refresh (ttw);
808 tax_table_window_close_handler (gpointer data)
810 TaxTableWindow *ttw = data;
811 g_return_if_fail (ttw);
813 gnc_save_window_size (GNC_PREFS_GROUP, GTK_WINDOW(ttw->dialog));
814 gtk_widget_destroy (ttw->dialog);
818 tax_table_window_close (GtkWidget *widget, gpointer data)
820 TaxTableWindow *ttw = data;
821 gnc_close_gui_component (ttw->component_id);
825 tax_table_window_delete_event_cb (GtkWidget *widget,
829 TaxTableWindow *ttw = user_data;
831 gnc_save_window_size (GNC_PREFS_GROUP,
832 GTK_WINDOW(ttw->dialog));
837 tax_table_window_destroy_cb (GtkWidget *widget, gpointer data)
839 TaxTableWindow *ttw = data;
843 gnc_unregister_gui_component (ttw->component_id);
847 gtk_widget_destroy (ttw->dialog);
854 tax_table_window_key_press_cb (GtkWidget *widget, GdkEventKey *event,
857 TaxTableWindow *ttw = data;
859 if (event->keyval == GDK_KEY_Escape)
861 tax_table_window_close_handler (ttw);
869 find_handler (gpointer
find_data, gpointer data)
871 TaxTableWindow *ttw = data;
874 return (ttw != NULL && ttw->book == book);
879 gnc_ui_tax_table_window_new (GtkWindow *parent, QofBook *book)
884 GtkTreeViewColumn *column;
885 GtkCellRenderer *renderer;
887 GtkTreeSelection *selection;
889 if (!book)
return NULL;
896 ttw = gnc_find_first_gui_component (DIALOG_TAX_TABLE_CM_CLASS, find_handler,
900 gtk_window_present (GTK_WINDOW(ttw->dialog));
905 ttw = g_new0 (TaxTableWindow, 1);
907 ttw->session = gnc_get_current_session ();
910 builder = gtk_builder_new ();
911 gnc_builder_add_from_file (builder,
"dialog-tax-table.glade",
"tax_table_window");
912 ttw->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"tax_table_window"));
913 ttw->names_view = GTK_WIDGET(gtk_builder_get_object (builder,
"tax_tables_view"));
914 ttw->entries_view = GTK_WIDGET(gtk_builder_get_object (builder,
"tax_table_entries"));
917 gtk_widget_set_name (GTK_WIDGET(ttw->dialog),
"gnc-id-new-tax-table");
918 gnc_widget_style_context_add_class (GTK_WIDGET(ttw->dialog),
"gnc-class-taxes");
920 g_signal_connect (ttw->dialog,
"delete-event",
921 G_CALLBACK(tax_table_window_delete_event_cb), ttw);
923 g_signal_connect (ttw->dialog,
"key_press_event",
924 G_CALLBACK (tax_table_window_key_press_cb), ttw);
927 view = GTK_TREE_VIEW(ttw->names_view);
928 store = gtk_list_store_new (NUM_TAX_TABLE_COLS, G_TYPE_STRING,
930 gtk_tree_view_set_model (view, GTK_TREE_MODEL(store));
931 g_object_unref (store);
934 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(store),
938 renderer = gtk_cell_renderer_text_new ();
939 column = gtk_tree_view_column_new_with_attributes (
"", renderer,
940 "text", TAX_TABLE_COL_NAME,
942 g_object_set (G_OBJECT(column),
"reorderable", TRUE, NULL);
943 gtk_tree_view_append_column (view, column);
944 gtk_tree_view_column_set_sort_column_id (column, TAX_TABLE_COL_NAME);
946 selection = gtk_tree_view_get_selection (view);
947 g_signal_connect (selection,
"changed",
948 G_CALLBACK(tax_table_selection_changed), ttw);
951 view = GTK_TREE_VIEW(ttw->entries_view);
952 store = gtk_list_store_new (NUM_TAX_ENTRY_COLS, G_TYPE_STRING,
953 G_TYPE_POINTER, G_TYPE_STRING);
954 gtk_tree_view_set_model (view, GTK_TREE_MODEL(store));
955 g_object_unref (store);
958 gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(store),
962 renderer = gtk_cell_renderer_text_new ();
963 column = gtk_tree_view_column_new_with_attributes (
"", renderer,
964 "text", TAX_ENTRY_COL_NAME,
966 g_object_set (G_OBJECT(column),
"reorderable", TRUE, NULL);
967 gtk_tree_view_append_column (view, column);
968 gtk_tree_view_column_set_sort_column_id (column, TAX_ENTRY_COL_NAME);
970 selection = gtk_tree_view_get_selection (view);
971 g_signal_connect (selection,
"changed",
972 G_CALLBACK(tax_table_entry_selection_changed), ttw);
973 g_signal_connect (view,
"row-activated",
974 G_CALLBACK(tax_table_entry_row_activated), ttw);
977 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, ttw);
981 gnc_register_gui_component (DIALOG_TAX_TABLE_CM_CLASS,
982 tax_table_window_refresh_handler,
983 tax_table_window_close_handler,
986 gnc_gui_component_set_session (ttw->component_id, ttw->session);
988 tax_table_window_refresh (ttw);
989 gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(ttw->dialog), parent);
990 gtk_widget_show_all (ttw->dialog);
992 g_object_unref (G_OBJECT(builder));
999 gnc_ui_tax_table_new_from_name (GtkWindow *parent, QofBook *book,
const char *name)
1001 TaxTableWindow *ttw;
1003 if (!book)
return NULL;
1005 ttw = gnc_ui_tax_table_window_new (parent, book);
1006 if (!ttw)
return NULL;
1008 return new_tax_table_dialog (ttw, TRUE, NULL, name);
int gnc_commodity_get_fraction(const gnc_commodity *cm)
Retrieve the fraction for the specified commodity.
utility functions for the GnuCash UI
const char * xaccPrintAmount(gnc_numeric val, GNCPrintAmountInfo info)
Make a string representation of a gnc_numeric.
gint gnc_numeric_compare(gnc_numeric a, gnc_numeric b)
Returns 1 if a>b, -1 if b>a, 0 if a == b.
gchar * gnc_account_get_full_name(const Account *account)
The gnc_account_get_full_name routine returns the fully qualified name of the account using the given...
#define gncTaxTableGetGUID(x)
GtkTreeView implementation for gnucash account tree.
GtkTreeView * gnc_tree_view_account_new(gboolean show_root)
Create a new account tree view.
Tax Table programming interface.
gnc_numeric gnc_numeric_abs(gnc_numeric a)
Returns a newly created gnc_numeric that is the absolute value of the given gnc_numeric value...
void gnc_tree_view_account_set_selected_account(GncTreeViewAccount *view, Account *account)
This function selects an account in the account tree view.
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account's commodity.
Account * gnc_tree_view_account_get_selected_account(GncTreeViewAccount *view)
This function returns the account associated with the selected item in the account tree view...
modtime is the internal date of the last modtime See libgnucash/engine/TaxTableBillTermImmutability.txt for an explanation of the following Code that handles refcount, parent, child, invisible and children is identical to that in ::GncBillTerm