29 #include <glib/gi18n.h>
30 #include "swig-runtime.h"
35 #include "dialog-options.h"
36 #include "dialog-utils.h"
37 #include "engine-helpers-guile.h"
38 #include "glib-helpers.h"
39 #include "gnc-account-sel.h"
41 #include "gnc-combott.h"
42 #include "gnc-commodity-edit.h"
43 #include "gnc-component-manager.h"
44 #include "gnc-general-select.h"
46 #include "gnc-date-edit.h"
49 #include "gnc-gui-query.h"
50 #include "gnc-session.h"
52 #include "guile-util.h"
53 #include "gnc-guile-utils.h"
54 #include "option-util.h"
55 #include "guile-mappings.h"
56 #include "gnc-date-format.h"
57 #include "misc-gnome-utils.h"
59 #define GNC_PREF_CLOCK_24H "clock-24h"
61 #define FUNC_NAME G_STRFUNC
69 #define DIALOG_OPTIONS_CM_CLASS "dialog-options"
75 #define MAX_TAB_COUNT 4
78 #define LAST_SELECTION "last-selection"
81 static GHashTable *optionTable = NULL;
87 GtkWidget * page_list_view;
88 GtkWidget * page_list;
92 GNCOptionWinCallback apply_cb;
93 gpointer apply_cb_data;
95 GNCOptionWinCallback help_cb;
96 gpointer help_cb_data;
98 GNCOptionWinCallback close_cb;
99 gpointer close_cb_data;
107 GNC_RD_WID_AB_BUTTON_POS = 0,
108 GNC_RD_WID_AB_WIDGET_POS,
109 GNC_RD_WID_REL_BUTTON_POS,
110 GNC_RD_WID_REL_WIDGET_POS
120 static GNCOptionWinCallback global_help_cb = NULL;
121 gpointer global_help_cb_data = NULL;
123 void gnc_options_dialog_response_cb(GtkDialog *dialog, gint response,
125 static void gnc_options_dialog_reset_cb(GtkWidget * w, gpointer data);
126 void gnc_options_dialog_list_select_cb (GtkTreeSelection *selection,
130 gnc_option_get_gtk_widget (
GNCOption *option)
132 return (GtkWidget *)gnc_option_get_widget(option);
136 color_d_to_i16 (
double d)
142 color_i16_to_d (gint i16)
144 return ((
double)i16 / 0xFFFF);
148 gnc_options_dialog_changed_internal (GtkWidget *widget, gboolean sensitive)
152 while (widget && !GTK_IS_DIALOG(widget))
153 widget = gtk_widget_get_parent(widget);
157 dialog = GTK_DIALOG(widget);
158 gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, sensitive);
159 gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY, sensitive);
167 gnc_options_dialog_changed_internal (win->dialog, TRUE);
171 gnc_option_changed_widget_cb(GtkWidget *widget,
GNCOption *option)
173 gnc_option_set_changed (option, TRUE);
174 gnc_option_call_option_widget_changed_proc(option);
175 gnc_options_dialog_changed_internal (widget, TRUE);
179 gnc_option_changed_option_cb(GtkWidget *dummy,
GNCOption *option)
183 widget = gnc_option_get_gtk_widget (option);
184 gnc_option_changed_widget_cb(widget, option);
188 gnc_date_option_set_select_method(
GNCOption *option, gboolean use_absolute,
189 gboolean set_buttons)
192 GtkWidget *ab_button, *rel_button, *rel_widget, *ab_widget;
195 widget = gnc_option_get_gtk_widget (option);
197 widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
198 ab_button = g_list_nth_data(widget_list, GNC_RD_WID_AB_BUTTON_POS);
199 ab_widget = g_list_nth_data(widget_list, GNC_RD_WID_AB_WIDGET_POS);
200 rel_button = g_list_nth_data(widget_list, GNC_RD_WID_REL_BUTTON_POS);
201 rel_widget = g_list_nth_data(widget_list, GNC_RD_WID_REL_WIDGET_POS);
202 g_list_free(widget_list);
206 gtk_widget_set_sensitive(ab_widget, TRUE);
207 gtk_widget_set_sensitive(rel_widget, FALSE);
210 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ab_button), TRUE);
215 gtk_widget_set_sensitive(rel_widget, TRUE);
216 gtk_widget_set_sensitive(ab_widget, FALSE);
219 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(rel_button), TRUE);
225 gnc_rd_option_ab_set_cb(GtkWidget *widget, gpointer *raw_option)
228 gnc_date_option_set_select_method(option, TRUE, FALSE);
229 gnc_option_changed_option_cb(widget, option);
233 gnc_rd_option_rel_set_cb(GtkWidget *widget, gpointer *raw_option)
236 gnc_date_option_set_select_method(option, FALSE, FALSE);
237 gnc_option_changed_option_cb(widget, option);
242 gnc_image_option_update_preview_cb (GtkFileChooser *chooser,
248 gboolean have_preview;
250 g_return_if_fail(chooser != NULL);
252 ENTER(
"chooser %p, option %p", chooser, option);
253 filename = gtk_file_chooser_get_preview_filename(chooser);
254 DEBUG(
"chooser preview name is %s.", filename ? filename :
"(null)");
255 if (filename == NULL)
257 filename = g_strdup(g_object_get_data(G_OBJECT(chooser), LAST_SELECTION));
258 DEBUG(
"using last selection of %s", filename ? filename :
"(null)");
259 if (filename == NULL)
261 LEAVE(
"no usable name");
266 image = GTK_IMAGE(gtk_file_chooser_get_preview_widget(chooser));
267 pixbuf = gdk_pixbuf_new_from_file_at_size(filename, 128, 128, NULL);
269 have_preview = (pixbuf != NULL);
271 gtk_image_set_from_pixbuf(image, pixbuf);
273 g_object_unref(pixbuf);
275 gtk_file_chooser_set_preview_widget_active(chooser, have_preview);
276 LEAVE(
"preview visible is %d", have_preview);
280 gnc_image_option_selection_changed_cb (GtkFileChooser *chooser,
285 filename = gtk_file_chooser_get_preview_filename(chooser);
288 g_object_set_data_full(G_OBJECT(chooser), LAST_SELECTION, filename, g_free);
302 gnc_option_set_ui_value_internal (
GNCOption *option, gboolean use_default)
304 gboolean bad_value = FALSE;
311 widget = gnc_option_get_gtk_widget (option);
315 type = gnc_option_type(option);
318 getter = gnc_option_default_getter(option);
320 getter = gnc_option_getter(option);
322 value = scm_call_0(getter);
324 option_def = gnc_options_ui_get_option (type);
325 if (option_def && option_def->set_value)
327 bad_value = option_def->set_value (option, use_default, widget, value);
335 PERR(
"Unknown type. Ignoring.\n");
349 gnc_option_get_ui_value_internal (
GNCOption *option)
351 SCM result = SCM_UNDEFINED;
356 widget = gnc_option_get_gtk_widget (option);
360 type = gnc_option_type(option);
362 option_def = gnc_options_ui_get_option (type);
363 if (option_def && option_def->get_value)
365 result = option_def->get_value (option, widget);
369 PERR(
"Unknown type for refresh. Ignoring.\n");
389 gnc_option_set_selectable_internal (
GNCOption *option, gboolean selectable)
393 widget = gnc_option_get_gtk_widget (option);
397 gtk_widget_set_sensitive (widget, selectable);
401 gnc_option_default_cb(GtkWidget *widget,
GNCOption *option)
403 gnc_option_set_ui_value (option, TRUE);
404 gnc_option_set_changed (option, TRUE);
405 gnc_options_dialog_changed_internal (widget, TRUE);
409 gnc_option_show_hidden_toggled_cb(GtkWidget *widget,
GNCOption* option)
414 tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option));
416 avi.show_hidden = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
418 gnc_option_changed_widget_cb(widget, option);
422 gnc_option_multichoice_cb(GtkWidget *widget, gpointer data)
426 gnc_option_changed_widget_cb(widget, option);
430 gnc_option_radiobutton_cb(GtkWidget *w, gpointer data)
434 gpointer _current, _new_value;
435 gint current, new_value;
437 widget = gnc_option_get_gtk_widget (option);
439 _current = g_object_get_data(G_OBJECT(widget),
"gnc_radiobutton_index");
440 current = GPOINTER_TO_INT (_current);
442 _new_value = g_object_get_data (G_OBJECT(w),
"gnc_radiobutton_index");
443 new_value = GPOINTER_TO_INT (_new_value);
445 if (current == new_value)
448 g_object_set_data (G_OBJECT(widget),
"gnc_radiobutton_index",
449 GINT_TO_POINTER(new_value));
450 gnc_option_changed_widget_cb(widget, option);
454 gnc_option_create_date_widget (
GNCOption *option)
456 GtkWidget * box = NULL;
457 GtkWidget *rel_button = NULL, *ab_button = NULL;
458 GtkWidget *rel_widget = NULL, *ab_widget = NULL;
460 gboolean show_time, use24;
464 type = gnc_option_date_option_get_subtype(option);
465 show_time = gnc_option_show_time(option);
468 if (g_strcmp0(type,
"relative") != 0)
470 ab_widget = gnc_date_edit_new(time(NULL), show_time, use24);
471 entry = GNC_DATE_EDIT(ab_widget)->date_entry;
472 g_signal_connect(G_OBJECT(entry),
"changed",
473 G_CALLBACK(gnc_option_changed_option_cb), option);
476 entry = GNC_DATE_EDIT(ab_widget)->time_entry;
477 g_signal_connect(G_OBJECT(entry),
"changed",
478 G_CALLBACK(gnc_option_changed_option_cb), option);
482 if (g_strcmp0(type,
"absolute") != 0)
485 num_values = gnc_option_num_permissible_values(option);
487 g_return_val_if_fail(num_values >= 0, NULL);
501 store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
503 for (i = 0; i < num_values; i++)
505 itemstring = gnc_option_permissible_value_name(option, i);
506 description = gnc_option_permissible_value_description(option, i);
507 gtk_list_store_append (store, &iter);
508 gtk_list_store_set (store, &iter, 0, itemstring, 1, description, -1);
515 rel_widget = GTK_WIDGET(gnc_combott_new());
516 g_object_set( G_OBJECT(rel_widget),
"model", GTK_TREE_MODEL(store), NULL );
517 g_object_unref(store);
519 g_signal_connect(G_OBJECT(rel_widget),
"changed",
520 G_CALLBACK(gnc_option_multichoice_cb), option);
524 if (g_strcmp0(type,
"absolute") == 0)
527 gnc_option_set_widget (option, ab_widget);
530 else if (g_strcmp0(type,
"relative") == 0)
532 gnc_option_set_widget (option, rel_widget);
537 else if (g_strcmp0(type,
"both") == 0)
539 box = gtk_hbox_new(FALSE, 5);
541 ab_button = gtk_radio_button_new(NULL);
542 g_signal_connect(G_OBJECT(ab_button),
"toggled",
543 G_CALLBACK(gnc_rd_option_ab_set_cb), option);
545 rel_button = gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(ab_button));
546 g_signal_connect(G_OBJECT(rel_button),
"toggled",
547 G_CALLBACK(gnc_rd_option_rel_set_cb), option);
549 gtk_box_pack_start(GTK_BOX(box), ab_button, FALSE, FALSE, 0);
550 gtk_box_pack_start(GTK_BOX(box), ab_widget, FALSE, FALSE, 0);
551 gtk_box_pack_start(GTK_BOX(box), rel_button, FALSE, FALSE, 0);
552 gtk_box_pack_start(GTK_BOX(box), rel_widget, FALSE, FALSE, 0);
556 gnc_option_set_widget (option, box);
567 gnc_option_create_budget_widget(
GNCOption *option)
573 tm = gnc_tree_model_budget_new(gnc_get_current_book());
574 cb = GTK_COMBO_BOX(gtk_combo_box_new_with_model(tm));
576 cr = gtk_cell_renderer_text_new();
577 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(cb), cr, TRUE);
579 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cb), cr,
"text",
580 BUDGET_NAME_COLUMN, NULL);
581 return GTK_WIDGET(cb);
585 gnc_option_create_multichoice_widget(
GNCOption *option)
591 num_values = gnc_option_num_permissible_values(option);
593 g_return_val_if_fail(num_values >= 0, NULL);
606 store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
608 for (i = 0; i < num_values; i++)
610 itemstring = gnc_option_permissible_value_name(option, i);
611 description = gnc_option_permissible_value_description(option, i);
612 gtk_list_store_append (store, &iter);
613 gtk_list_store_set (store, &iter, 0,
614 (itemstring && *itemstring) ? _(itemstring) :
"", 1,
615 (description && *description) ? _(description) :
"", -1);
622 widget = GTK_WIDGET(gnc_combott_new());
623 g_object_set( G_OBJECT( widget ),
"model", GTK_TREE_MODEL(store), NULL );
624 g_object_unref(store);
626 g_signal_connect(G_OBJECT(widget),
"changed",
627 G_CALLBACK(gnc_option_multichoice_cb), option);
634 gnc_option_create_radiobutton_widget(
char *name,
GNCOption *option)
636 GtkWidget *frame, *box;
637 GtkWidget *widget = NULL;
643 num_values = gnc_option_num_permissible_values(option);
645 g_return_val_if_fail(num_values >= 0, NULL);
648 frame = gtk_frame_new (name);
651 box = gtk_hbox_new (FALSE, 5);
652 gtk_container_add (GTK_CONTAINER (frame), box);
655 for (i = 0; i < num_values; i++)
657 label = gnc_option_permissible_value_name(option, i);
658 tip = gnc_option_permissible_value_description(option, i);
661 gtk_radio_button_new_with_label_from_widget (widget ?
662 GTK_RADIO_BUTTON (widget) :
664 label && *label ? _(label) :
"");
665 g_object_set_data (G_OBJECT (widget),
"gnc_radiobutton_index",
666 GINT_TO_POINTER (i));
667 gtk_widget_set_tooltip_text(widget, tip && *tip ? _(tip) :
"");
668 g_signal_connect(G_OBJECT(widget),
"toggled",
669 G_CALLBACK(gnc_option_radiobutton_cb), option);
670 gtk_box_pack_start (GTK_BOX (box), widget, FALSE, FALSE, 0);
682 gnc_option_account_cb(GtkTreeSelection *selection, gpointer data)
685 GtkTreeView *tree_view;
687 tree_view = gtk_tree_selection_get_tree_view(selection);
689 gnc_option_changed_widget_cb(GTK_WIDGET(tree_view), option);
693 gnc_option_account_select_all_cb(GtkWidget *widget, gpointer data)
697 GtkTreeSelection *selection;
699 tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option));
700 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
701 gtk_tree_selection_select_all(selection);
702 gnc_option_changed_widget_cb(widget, option);
706 gnc_option_account_clear_all_cb(GtkWidget *widget, gpointer data)
710 GtkTreeSelection *selection;
712 tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option));
713 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
714 gtk_tree_selection_unselect_all(selection);
715 gnc_option_changed_widget_cb(widget, option);
719 gnc_option_account_select_children_cb(GtkWidget *widget, gpointer data)
725 tree_view = GNC_TREE_VIEW_ACCOUNT(gnc_option_get_gtk_widget (option));
734 gnc_option_create_account_widget(
GNCOption *option,
char *name)
736 gboolean multiple_selection;
737 GtkWidget *scroll_win;
743 GList *acct_type_list;
744 GtkTreeSelection *selection;
746 multiple_selection = gnc_option_multiple_selection(option);
747 acct_type_list = gnc_option_get_account_type_list(option);
749 frame = gtk_frame_new(name);
751 vbox = gtk_vbox_new(FALSE, 0);
752 gtk_container_add(GTK_CONTAINER(frame), vbox);
755 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(tree), FALSE);
756 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree));
757 if (multiple_selection)
758 gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
760 gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
771 avi.include_type[i] = FALSE;
772 avi.show_hidden = FALSE;
774 for (node = acct_type_list; node; node = node->next)
777 avi.include_type[type] = TRUE;
781 g_list_free (acct_type_list);
791 avi.include_type[i] = TRUE;
792 avi.show_hidden = FALSE;
796 scroll_win = gtk_scrolled_window_new(NULL, NULL);
797 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win),
798 GTK_POLICY_AUTOMATIC,
799 GTK_POLICY_AUTOMATIC);
801 gtk_box_pack_start(GTK_BOX(vbox), scroll_win, TRUE, TRUE, 0);
802 gtk_container_set_border_width(GTK_CONTAINER(scroll_win), 5);
803 gtk_container_add(GTK_CONTAINER(scroll_win), tree);
805 bbox = gtk_hbutton_box_new();
806 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
807 gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 10);
809 if (multiple_selection)
811 button = gtk_button_new_with_label(_(
"Select All"));
812 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
813 gtk_widget_set_tooltip_text(button, _(
"Select all accounts."));
815 g_signal_connect(G_OBJECT(button),
"clicked",
816 G_CALLBACK(gnc_option_account_select_all_cb), option);
818 button = gtk_button_new_with_label(_(
"Clear All"));
819 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
820 gtk_widget_set_tooltip_text(button, _(
"Clear the selection and unselect all accounts."));
822 g_signal_connect(G_OBJECT(button),
"clicked",
823 G_CALLBACK(gnc_option_account_clear_all_cb), option);
825 button = gtk_button_new_with_label(_(
"Select Children"));
826 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
827 gtk_widget_set_tooltip_text(button, _(
"Select all descendents of selected account."));
829 g_signal_connect(G_OBJECT(button),
"clicked",
830 G_CALLBACK(gnc_option_account_select_children_cb), option);
833 button = gtk_button_new_with_label(_(
"Select Default"));
834 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
835 gtk_widget_set_tooltip_text(button, _(
"Select the default account selection."));
837 g_signal_connect(G_OBJECT(button),
"clicked",
838 G_CALLBACK(gnc_option_default_cb), option);
840 if (multiple_selection)
844 bbox = gtk_hbutton_box_new();
845 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_START);
846 gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
849 button = gtk_check_button_new_with_label(_(
"Show Hidden Accounts"));
850 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
851 gtk_widget_set_tooltip_text(button, _(
"Show accounts that have been marked hidden."));
852 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
853 g_signal_connect(G_OBJECT(button),
"toggled",
854 G_CALLBACK(gnc_option_show_hidden_toggled_cb), option);
856 gnc_option_set_widget (option, tree);
862 gnc_option_list_changed_cb(GtkTreeSelection *selection,
867 view = gtk_tree_selection_get_tree_view(selection);
868 gnc_option_changed_widget_cb(GTK_WIDGET(view), option);
872 gnc_option_list_select_all_cb(GtkWidget *widget, gpointer data)
876 GtkTreeSelection *selection;
878 view = GTK_TREE_VIEW(gnc_option_get_gtk_widget (option));
879 selection = gtk_tree_view_get_selection(view);
880 gtk_tree_selection_select_all(selection);
881 gnc_option_changed_widget_cb(GTK_WIDGET(view), option);
885 gnc_option_list_clear_all_cb(GtkWidget *widget, gpointer data)
889 GtkTreeSelection *selection;
891 view = GTK_TREE_VIEW(gnc_option_get_gtk_widget (option));
892 selection = gtk_tree_view_get_selection(view);
893 gtk_tree_selection_unselect_all(selection);
894 gnc_option_changed_widget_cb(GTK_WIDGET(view), option);
898 gnc_option_create_list_widget(
GNCOption *option,
char *name)
903 GtkTreeViewColumn *column;
904 GtkCellRenderer *renderer;
905 GtkTreeSelection *selection;
914 frame = gtk_frame_new(name);
915 hbox = gtk_hbox_new(FALSE, 0);
916 gtk_container_add(GTK_CONTAINER(frame), hbox);
918 store = gtk_list_store_new(1, G_TYPE_STRING);
919 view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)));
920 g_object_unref(store);
921 renderer = gtk_cell_renderer_text_new();
922 column = gtk_tree_view_column_new_with_attributes(
"", renderer,
925 gtk_tree_view_append_column(view, column);
926 gtk_tree_view_set_headers_visible(view, FALSE);
928 num_values = gnc_option_num_permissible_values(option);
929 for (i = 0; i < num_values; i++)
931 gchar *raw_string, *string;
933 raw_string = gnc_option_permissible_value_name(option, i);
934 string = (raw_string && *raw_string) ? _(raw_string) :
"";
935 gtk_list_store_append(store, &iter);
936 gtk_list_store_set(store, &iter,
937 0,
string ?
string :
"",
942 gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(view), FALSE, FALSE, 0);
944 selection = gtk_tree_view_get_selection(view);
945 gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
946 g_signal_connect(selection,
"changed",
947 G_CALLBACK(gnc_option_list_changed_cb), option);
949 bbox = gtk_vbutton_box_new();
950 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD);
951 gtk_box_pack_start(GTK_BOX(hbox), bbox, FALSE, FALSE, 10);
953 button = gtk_button_new_with_label(_(
"Select All"));
954 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
955 gtk_widget_set_tooltip_text(button, _(
"Select all entries."));
957 g_signal_connect(G_OBJECT(button),
"clicked",
958 G_CALLBACK(gnc_option_list_select_all_cb), option);
960 button = gtk_button_new_with_label(_(
"Clear All"));
961 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
962 gtk_widget_set_tooltip_text(button, _(
"Clear the selection and unselect all entries."));
964 g_signal_connect(G_OBJECT(button),
"clicked",
965 G_CALLBACK(gnc_option_list_clear_all_cb), option);
967 button = gtk_button_new_with_label(_(
"Select Default"));
968 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
969 gtk_widget_set_tooltip_text(button, _(
"Select the default selection."));
971 g_signal_connect(G_OBJECT(button),
"clicked",
972 G_CALLBACK(gnc_option_default_cb), option);
974 gnc_option_set_widget (option, GTK_WIDGET(view));
980 gnc_option_color_changed_cb(GtkColorButton *color_button,
GNCOption *option)
982 gnc_option_changed_widget_cb(GTK_WIDGET(color_button), option);
986 gnc_option_font_changed_cb(GtkFontButton *font_button,
GNCOption *option)
988 gnc_option_changed_widget_cb(GTK_WIDGET(font_button), option);
992 gnc_option_set_ui_widget(
GNCOption *option,
995 GtkWidget *enclosing = NULL;
996 GtkWidget *value = NULL;
997 gboolean packed = FALSE;
998 char *raw_name, *raw_documentation;
999 char *name, *documentation;
1003 ENTER(
"option %p(%s), box %p",
1004 option, gnc_option_name(option), page_box);
1005 type = gnc_option_type(option);
1012 raw_name = gnc_option_name(option);
1013 if (raw_name && *raw_name)
1018 raw_documentation = gnc_option_documentation(option);
1019 if (raw_documentation && *raw_documentation)
1020 documentation = _(raw_documentation);
1022 documentation = NULL;
1024 option_def = gnc_options_ui_get_option (type);
1025 if (option_def && option_def->set_widget)
1027 value = option_def->set_widget (option, page_box,
1028 name, documentation,
1030 &enclosing, &packed);
1034 PERR(
"Unknown option type. Ignoring option \"%s\".\n", name);
1037 if (!packed && (enclosing != NULL))
1041 GtkWidget *eventbox = gtk_event_box_new();
1043 gtk_container_add (GTK_CONTAINER (eventbox), enclosing);
1044 gtk_box_pack_start (page_box, eventbox, FALSE, FALSE, 0);
1046 gtk_widget_set_tooltip_text (eventbox, documentation);
1050 gtk_widget_set_tooltip_text(value, documentation);
1052 if (raw_name != NULL)
1054 if (raw_documentation != NULL)
1055 free(raw_documentation);
1061 gnc_options_dialog_add_option(GtkWidget *page,
1064 gnc_option_set_ui_widget(option, GTK_BOX(page));
1068 gnc_options_dialog_append_page(
GNCOptionWin * propertybox,
1072 GtkWidget *page_label;
1073 GtkWidget *options_box;
1074 GtkWidget *page_content_box;
1075 GtkWidget* notebook_page;
1076 GtkWidget *reset_button;
1077 GtkWidget *listitem = NULL;
1078 GtkWidget *buttonbox;
1079 GtkWidget *options_scrolled_win;
1085 gint i, page_count, name_offset;
1088 name = gnc_option_section_name(section);
1092 if (strncmp(name,
"__", 2) == 0)
1094 advanced = (strncmp(name,
"_+", 2) == 0);
1095 name_offset = (advanced) ? 2 : 0;
1096 page_label = gtk_label_new(_(name + name_offset));
1097 PINFO(
"Page_label is %s", _(name + name_offset));
1098 gtk_widget_show(page_label);
1101 page_content_box = gtk_vbox_new(FALSE, 2);
1102 gtk_container_set_border_width(GTK_CONTAINER(page_content_box), 12);
1104 options_scrolled_win = gtk_scrolled_window_new(NULL, NULL);
1105 gtk_box_pack_start(GTK_BOX(page_content_box), options_scrolled_win, TRUE, TRUE, 0);
1108 options_box = gtk_vbox_new(FALSE, 5);
1109 gtk_container_set_border_width(GTK_CONTAINER(options_box), 0);
1110 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(options_scrolled_win), options_box);
1111 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(options_scrolled_win), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1114 num_options = gnc_option_section_num_options(section);
1115 for (i = 0; i < num_options; i++)
1117 option = gnc_get_option_section_option(section, i);
1118 gnc_options_dialog_add_option(options_box, option);
1122 buttonbox = gtk_hbutton_box_new();
1123 gtk_button_box_set_layout (GTK_BUTTON_BOX (buttonbox),
1124 GTK_BUTTONBOX_EDGE);
1125 gtk_container_set_border_width(GTK_CONTAINER (buttonbox), 5);
1126 gtk_box_pack_end(GTK_BOX(page_content_box), buttonbox, FALSE, FALSE, 0);
1129 reset_button = gtk_button_new_with_label (_(
"Reset defaults"));
1130 gtk_widget_set_tooltip_text(reset_button,
1131 _(
"Reset all values to their defaults."));
1133 g_signal_connect(G_OBJECT(reset_button),
"clicked",
1134 G_CALLBACK(gnc_options_dialog_reset_cb), propertybox);
1135 g_object_set_data(G_OBJECT(reset_button),
"section", section);
1136 gtk_box_pack_end(GTK_BOX(buttonbox), reset_button, FALSE, FALSE, 0);
1137 gtk_widget_show_all(page_content_box);
1138 gtk_notebook_append_page(GTK_NOTEBOOK(propertybox->notebook),
1139 page_content_box, page_label);
1142 page_count = gtk_notebook_page_num(GTK_NOTEBOOK(propertybox->notebook),
1145 if (propertybox->page_list_view)
1148 view = GTK_TREE_VIEW(propertybox->page_list_view);
1149 list = GTK_LIST_STORE(gtk_tree_view_get_model(view));
1151 PINFO(
"Page name is %s and page_count is %d", name, page_count);
1152 gtk_list_store_append(list, &iter);
1153 gtk_list_store_set(list, &iter,
1155 PAGE_INDEX, page_count,
1158 if (page_count > MAX_TAB_COUNT - 1)
1160 gtk_widget_show(propertybox->page_list);
1161 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(propertybox->notebook), FALSE);
1162 gtk_notebook_set_show_border(GTK_NOTEBOOK(propertybox->notebook), FALSE);
1165 gtk_widget_hide(propertybox->page_list);
1170 notebook_page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(propertybox->notebook),
1173 g_object_set_data(G_OBJECT(notebook_page),
"listitem", listitem);
1174 g_object_set_data(G_OBJECT(notebook_page),
"advanced",
1175 GINT_TO_POINTER(advanced));
1191 gnc_options_dialog_build_contents (
GNCOptionWin *propertybox,
1194 gnc_options_dialog_build_contents_full (propertybox, odb, TRUE);
1209 gnc_options_dialog_build_contents_full (
GNCOptionWin *propertybox,
1213 gchar *default_section_name;
1214 gint default_page = -1;
1220 g_return_if_fail (propertybox != NULL);
1221 g_return_if_fail (odb != NULL);
1223 gnc_option_db_set_ui_callbacks (odb,
1224 gnc_option_get_ui_value_internal,
1225 gnc_option_set_ui_value_internal,
1226 gnc_option_set_selectable_internal);
1228 propertybox->option_db = odb;
1230 num_sections = gnc_option_db_num_sections(odb);
1231 default_section_name = gnc_option_db_get_default_section(odb);
1233 PINFO(
"Default Section name is %s", default_section_name);
1235 for (i = 0; i < num_sections; i++)
1237 const char *section_name;
1239 section = gnc_option_db_get_section(odb, i);
1240 page = gnc_options_dialog_append_page(propertybox, section);
1242 section_name = gnc_option_section_name(section);
1243 if (g_strcmp0(section_name, default_section_name) == 0)
1244 default_page = page;
1247 if (default_section_name != NULL)
1248 free(default_section_name);
1253 for (i = 0; i < num_sections; i++)
1255 section = gnc_option_db_get_section(odb, i);
1257 for (j = 0; j < gnc_option_section_num_options(section); j++)
1259 gnc_option_call_option_widget_changed_proc(
1260 gnc_get_option_section_option(section, j) );
1264 gtk_notebook_popup_enable(GTK_NOTEBOOK(propertybox->notebook));
1265 if (default_page >= 0)
1268 GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(propertybox->page_list_view));
1270 GtkTreeModel *model;
1272 model = gtk_tree_view_get_model(GTK_TREE_VIEW(propertybox->page_list_view));
1273 gtk_tree_model_iter_nth_child(model, &iter, NULL, default_page);
1274 gtk_tree_selection_select_iter (selection, &iter);
1275 gtk_notebook_set_current_page(GTK_NOTEBOOK(propertybox->notebook), default_page);
1277 gnc_options_dialog_changed_internal(propertybox->dialog, FALSE);
1279 gtk_widget_show(propertybox->dialog);
1291 return win->page_list;
1297 return win->notebook;
1301 gnc_options_dialog_response_cb(GtkDialog *dialog, gint response,
GNCOptionWin *window)
1303 GNCOptionWinCallback close_cb;
1307 case GTK_RESPONSE_HELP:
1308 if (window->help_cb)
1309 (window->help_cb)(window, window->help_cb_data);
1312 case GTK_RESPONSE_OK:
1313 case GTK_RESPONSE_APPLY:
1314 gnc_options_dialog_changed_internal (window->dialog, FALSE);
1315 close_cb = window->close_cb;
1316 window->close_cb = NULL;
1317 if (window->apply_cb)
1318 window->apply_cb (window, window->apply_cb_data);
1319 window->close_cb = close_cb;
1320 if (response == GTK_RESPONSE_APPLY)
1325 if (window->close_cb)
1327 (window->close_cb)(window, window->close_cb_data);
1331 gtk_widget_hide(window->dialog);
1338 gnc_options_dialog_reset_cb(GtkWidget * w, gpointer data)
1344 val = g_object_get_data(G_OBJECT(w),
"section");
1345 g_return_if_fail (val);
1346 g_return_if_fail (win);
1349 gnc_option_db_section_reset_widgets (section);
1350 gnc_options_dialog_changed_internal (win->dialog, TRUE);
1354 gnc_options_dialog_list_select_cb (GtkTreeSelection *selection,
1362 if (!gtk_tree_selection_get_selected(selection, &list, &iter))
1364 gtk_tree_model_get(list, &iter,
1367 PINFO(
"Index is %d", index);
1368 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), index);
1372 gnc_options_register_stocks (
void)
1375 static gboolean done = FALSE;
1377 GtkStockItem items[] =
1379 { GTK_STOCK_APPLY ,
"gnc_option_apply_button", 0, 0, NULL },
1380 { GTK_STOCK_HELP ,
"gnc_options_dialog_help", 0, 0, NULL },
1381 { GTK_STOCK_OK ,
"gnc_options_dialog_ok", 0, 0, NULL },
1382 { GTK_STOCK_CANCEL ,
"gnc_options_dialog_cancel", 0, 0, NULL },
1391 gtk_stock_add (items, G_N_ELEMENTS (items));
1396 component_close_handler (gpointer data)
1399 gtk_dialog_response(GTK_DIALOG(window->dialog), GTK_RESPONSE_CANCEL);
1411 gnc_options_dialog_new(gchar *title)
1413 return gnc_options_dialog_new_modal(FALSE, title);
1425 gnc_options_dialog_new_modal(gboolean modal, gchar *title)
1428 GtkBuilder *builder;
1433 builder = gtk_builder_new();
1434 gnc_builder_add_from_file (builder,
"dialog-options.glade",
"GnuCash Options");
1435 retval->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"GnuCash Options"));
1436 retval->page_list = GTK_WIDGET(gtk_builder_get_object (builder,
"page_list_scroll"));
1441 GtkListStore *store;
1442 GtkTreeSelection *selection;
1443 GtkCellRenderer *renderer;
1444 GtkTreeViewColumn *column;
1446 retval->page_list_view = GTK_WIDGET(gtk_builder_get_object (builder,
"page_list_treeview"));
1448 view = GTK_TREE_VIEW(retval->page_list_view);
1450 store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, G_TYPE_STRING);
1451 gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
1452 g_object_unref(store);
1454 renderer = gtk_cell_renderer_text_new();
1455 column = gtk_tree_view_column_new_with_attributes(_(
"Page"), renderer,
1456 "text", PAGE_NAME, NULL);
1457 gtk_tree_view_append_column(view, column);
1459 gtk_tree_view_column_set_alignment(column, 0.5);
1461 selection = gtk_tree_view_get_selection(view);
1462 gtk_tree_selection_set_mode(selection, GTK_SELECTION_BROWSE);
1463 g_signal_connect (selection,
"changed",
1464 G_CALLBACK (gnc_options_dialog_list_select_cb), retval);
1468 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, retval);
1471 gtk_window_set_title(GTK_WINDOW(retval->dialog), title);
1476 GtkWidget *apply_button;
1478 apply_button = GTK_WIDGET(gtk_builder_get_object (builder,
"applybutton"));
1479 gtk_widget_hide (apply_button);
1483 hbox = GTK_WIDGET(gtk_builder_get_object (builder,
"notebook placeholder"));
1484 retval->notebook = gtk_notebook_new();
1485 gtk_widget_show(retval->notebook);
1486 gtk_box_pack_start(GTK_BOX(hbox), retval->notebook, TRUE, TRUE, 5);
1488 component_id = gnc_register_gui_component (DIALOG_OPTIONS_CM_CLASS,
1489 NULL, component_close_handler,
1491 gnc_gui_component_set_session (component_id, gnc_get_current_session());
1493 g_object_unref(G_OBJECT(builder));
1501 gnc_options_dialog_new_w_dialog(gchar *title, GtkWidget *dialog)
1506 retval->dialog = dialog;
1511 gnc_options_dialog_set_apply_cb(
GNCOptionWin * win, GNCOptionWinCallback cb,
1515 win->apply_cb_data = data;
1519 gnc_options_dialog_set_help_cb(
GNCOptionWin * win, GNCOptionWinCallback cb,
1523 win->help_cb_data = data;
1527 gnc_options_dialog_set_close_cb(
GNCOptionWin * win, GNCOptionWinCallback cb,
1531 win->close_cb_data = data;
1535 gnc_options_dialog_set_global_help_cb(GNCOptionWinCallback thunk,
1538 global_help_cb = thunk;
1539 global_help_cb_data = cb_data;
1548 gnc_unregister_gui_component_by_data(DIALOG_OPTIONS_CM_CLASS, win);
1550 gtk_widget_destroy(win->dialog);
1553 win->notebook = NULL;
1554 win->apply_cb = NULL;
1555 win->help_cb = NULL;
1598 gnc_option_set_ui_widget_boolean (
GNCOption *option, GtkBox *page_box,
1599 char *name,
char *documentation,
1601 GtkWidget **enclosing, gboolean *packed)
1605 *enclosing = gtk_hbox_new(FALSE, 5);
1606 value = gtk_check_button_new_with_label(name);
1608 gnc_option_set_widget (option, value);
1609 gnc_option_set_ui_value(option, FALSE);
1611 g_signal_connect(G_OBJECT(value),
"toggled",
1612 G_CALLBACK(gnc_option_changed_widget_cb), option);
1614 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
1615 gtk_widget_show_all(*enclosing);
1621 gnc_option_set_ui_widget_string (
GNCOption *option, GtkBox *page_box,
1622 char *name,
char *documentation,
1624 GtkWidget **enclosing, gboolean *packed)
1630 colon_name = g_strconcat(name,
":", NULL);
1631 label = gtk_label_new(colon_name);
1632 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
1635 *enclosing = gtk_hbox_new(FALSE, 5);
1636 value = gtk_entry_new();
1638 gnc_option_set_widget (option, value);
1639 gnc_option_set_ui_value(option, FALSE);
1641 g_signal_connect(G_OBJECT(value),
"changed",
1642 G_CALLBACK(gnc_option_changed_widget_cb), option);
1644 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
1645 gtk_box_pack_start(GTK_BOX(*enclosing), value, TRUE, TRUE, 0);
1646 gtk_widget_show_all(*enclosing);
1651 gnc_option_set_ui_widget_text (
GNCOption *option, GtkBox *page_box,
1652 char *name,
char *documentation,
1654 GtkWidget **enclosing, gboolean *packed)
1659 GtkTextBuffer* text_buffer;
1661 frame = gtk_frame_new(name);
1663 scroll = gtk_scrolled_window_new(NULL, NULL);
1664 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
1666 GTK_POLICY_AUTOMATIC);
1667 gtk_container_set_border_width(GTK_CONTAINER(scroll), 2);
1669 gtk_container_add(GTK_CONTAINER(frame), scroll);
1671 *enclosing = gtk_hbox_new(FALSE, 10);
1672 value = gtk_text_view_new();
1673 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(value), GTK_WRAP_WORD);
1674 gtk_text_view_set_editable(GTK_TEXT_VIEW(value), TRUE);
1675 gtk_container_add (GTK_CONTAINER (scroll), value);
1677 gnc_option_set_widget (option, value);
1678 gnc_option_set_ui_value(option, FALSE);
1680 text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(value));
1681 g_signal_connect(G_OBJECT(text_buffer),
"changed",
1682 G_CALLBACK(gnc_option_changed_option_cb), option);
1684 gtk_box_pack_start(GTK_BOX(*enclosing), frame, TRUE, TRUE, 0);
1685 gtk_widget_show_all(*enclosing);
1690 gnc_option_set_ui_widget_currency (
GNCOption *option, GtkBox *page_box,
1691 char *name,
char *documentation,
1693 GtkWidget **enclosing, gboolean *packed)
1699 colon_name = g_strconcat(name,
":", NULL);
1700 label = gtk_label_new(colon_name);
1701 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
1704 *enclosing = gtk_hbox_new(FALSE, 5);
1707 gnc_option_set_widget (option, value);
1708 gnc_option_set_ui_value(option, FALSE);
1710 g_signal_connect(G_OBJECT(value),
"changed",
1711 G_CALLBACK(gnc_option_changed_widget_cb), option);
1713 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
1714 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
1715 gtk_widget_show_all(*enclosing);
1720 gnc_option_set_ui_widget_commodity (
GNCOption *option, GtkBox *page_box,
1721 char *name,
char *documentation,
1723 GtkWidget **enclosing, gboolean *packed)
1729 colon_name = g_strconcat(name,
":", NULL);
1730 label = gtk_label_new(colon_name);
1731 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
1734 *enclosing = gtk_hbox_new(FALSE, 5);
1735 value = gnc_general_select_new(GNC_GENERAL_SELECT_TYPE_SELECT,
1736 gnc_commodity_edit_get_string,
1737 gnc_commodity_edit_new_select,
1740 gnc_option_set_widget (option, value);
1741 gnc_option_set_ui_value(option, FALSE);
1743 if (documentation != NULL)
1744 gtk_widget_set_tooltip_text(GNC_GENERAL_SELECT(value)->entry,
1747 g_signal_connect(G_OBJECT(GNC_GENERAL_SELECT(value)->entry),
"changed",
1748 G_CALLBACK(gnc_option_changed_widget_cb), option);
1750 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
1751 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
1752 gtk_widget_show_all(*enclosing);
1757 gnc_option_set_ui_widget_multichoice (
GNCOption *option, GtkBox *page_box,
1758 char *name,
char *documentation,
1760 GtkWidget **enclosing, gboolean *packed)
1766 colon_name = g_strconcat(name,
":", NULL);
1767 label = gtk_label_new(colon_name);
1768 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
1771 *enclosing = gtk_hbox_new(FALSE, 5);
1773 value = gnc_option_create_multichoice_widget(option);
1774 gnc_option_set_widget (option, value);
1776 gnc_option_set_ui_value(option, FALSE);
1777 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
1778 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
1779 gtk_widget_show_all(*enclosing);
1784 gnc_option_set_ui_widget_date (
GNCOption *option, GtkBox *page_box,
1785 char *name,
char *documentation,
1787 GtkWidget **enclosing, gboolean *packed)
1792 GtkWidget *eventbox;
1794 colon_name = g_strconcat(name,
":", NULL);
1795 label = gtk_label_new(colon_name);
1796 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
1799 *enclosing = gtk_hbox_new(FALSE, 5);
1801 value = gnc_option_create_date_widget(option);
1803 gnc_option_set_widget (option, value);
1805 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
1806 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
1810 eventbox = gtk_event_box_new();
1811 gtk_container_add (GTK_CONTAINER (eventbox), *enclosing);
1812 gtk_box_pack_start(page_box, eventbox, FALSE, FALSE, 5);
1815 gtk_widget_set_tooltip_text (eventbox, documentation);
1817 gnc_option_set_ui_value(option, FALSE);
1818 gtk_widget_show_all(*enclosing);
1823 gnc_option_set_ui_widget_account_list (
GNCOption *option, GtkBox *page_box,
1824 char *name,
char *documentation,
1826 GtkWidget **enclosing, gboolean *packed)
1829 GtkTreeSelection *selection;
1831 *enclosing = gnc_option_create_account_widget(option, name);
1832 value = gnc_option_get_gtk_widget (option);
1834 gtk_widget_set_tooltip_text(*enclosing, documentation);
1836 gtk_box_pack_start(page_box, *enclosing, TRUE, TRUE, 5);
1841 gnc_option_set_ui_value(option, FALSE);
1843 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(value));
1844 g_signal_connect(G_OBJECT(selection),
"changed",
1845 G_CALLBACK(gnc_option_account_cb), option);
1849 gtk_widget_show_all(*enclosing);
1854 gnc_option_set_ui_widget_account_sel (
GNCOption *option, GtkBox *page_box,
1855 char *name,
char *documentation,
1857 GtkWidget **enclosing, gboolean *packed)
1861 GList *acct_type_list;
1864 colon_name = g_strconcat(name,
":", NULL);
1865 label = gtk_label_new(colon_name);
1866 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
1869 acct_type_list = gnc_option_get_account_type_list(option);
1870 value = gnc_account_sel_new();
1871 gnc_account_sel_set_acct_filters(GNC_ACCOUNT_SEL(value), acct_type_list, NULL);
1873 g_signal_connect(value,
"account_sel_changed",
1874 G_CALLBACK(gnc_option_changed_widget_cb), option);
1876 gnc_option_set_widget (option, value);
1879 gnc_option_set_ui_value(option, TRUE);
1881 *enclosing = gtk_hbox_new(FALSE, 5);
1882 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
1883 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
1884 gtk_widget_show_all(*enclosing);
1889 gnc_option_set_ui_widget_list (
GNCOption *option, GtkBox *page_box,
1890 char *name,
char *documentation,
1892 GtkWidget **enclosing, gboolean *packed)
1895 GtkWidget *eventbox;
1897 *enclosing = gnc_option_create_list_widget(option, name);
1898 value = gnc_option_get_gtk_widget (option);
1902 eventbox = gtk_event_box_new();
1903 gtk_container_add (GTK_CONTAINER (eventbox), *enclosing);
1904 gtk_box_pack_start(page_box, eventbox, FALSE, FALSE, 5);
1907 gtk_widget_set_tooltip_text(eventbox, documentation);
1909 gnc_option_set_ui_value(option, FALSE);
1910 gtk_widget_show(*enclosing);
1915 gnc_option_set_ui_widget_number_range (
GNCOption *option, GtkBox *page_box,
1916 char *name,
char *documentation,
1918 GtkWidget **enclosing, gboolean *packed)
1924 gdouble lower_bound = G_MINDOUBLE;
1925 gdouble upper_bound = G_MAXDOUBLE;
1926 gdouble step_size = 1.0;
1927 int num_decimals = 0;
1929 colon_name = g_strconcat(name,
":", NULL);
1930 label = gtk_label_new(colon_name);
1931 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
1934 *enclosing = gtk_hbox_new(FALSE, 5);
1936 gnc_option_get_range_info(option, &lower_bound, &upper_bound,
1937 &num_decimals, &step_size);
1938 adj = GTK_ADJUSTMENT(gtk_adjustment_new(lower_bound, lower_bound,
1939 upper_bound, step_size,
1942 value = gtk_spin_button_new(adj, step_size, num_decimals);
1943 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(value), TRUE);
1949 biggest = ABS(lower_bound);
1950 biggest = MAX(biggest, ABS(upper_bound));
1953 while (biggest >= 1)
1956 biggest = biggest / 10;
1959 if (num_digits == 0)
1962 num_digits += num_decimals;
1964 gtk_entry_set_width_chars(GTK_ENTRY(value), num_digits);
1967 gnc_option_set_widget (option, value);
1968 gnc_option_set_ui_value(option, FALSE);
1970 g_signal_connect(G_OBJECT(value),
"changed",
1971 G_CALLBACK(gnc_option_changed_widget_cb), option);
1973 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
1974 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
1975 gtk_widget_show_all(*enclosing);
1980 gnc_option_set_ui_widget_color (
GNCOption *option, GtkBox *page_box,
1981 char *name,
char *documentation,
1983 GtkWidget **enclosing, gboolean *packed)
1990 colon_name = g_strconcat(name,
":", NULL);
1991 label = gtk_label_new(colon_name);
1992 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
1995 *enclosing = gtk_hbox_new(FALSE, 5);
1997 use_alpha = gnc_option_use_alpha(option);
1999 value = gtk_color_button_new();
2000 gtk_color_button_set_title(GTK_COLOR_BUTTON(value), name);
2001 gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(value), use_alpha);
2003 gnc_option_set_widget (option, value);
2004 gnc_option_set_ui_value(option, FALSE);
2006 g_signal_connect(G_OBJECT(value),
"color-set",
2007 G_CALLBACK(gnc_option_color_changed_cb), option);
2009 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
2010 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
2011 gtk_widget_show_all(*enclosing);
2016 gnc_option_set_ui_widget_font (
GNCOption *option, GtkBox *page_box,
2017 char *name,
char *documentation,
2019 GtkWidget **enclosing, gboolean *packed)
2025 colon_name = g_strconcat(name,
":", NULL);
2026 label = gtk_label_new(colon_name);
2027 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
2030 *enclosing = gtk_hbox_new(FALSE, 5);
2031 value = gtk_font_button_new();
2032 g_object_set(G_OBJECT(value),
2038 gnc_option_set_widget (option, value);
2040 gnc_option_set_ui_value(option, FALSE);
2042 g_signal_connect(G_OBJECT(value),
"font-set",
2043 G_CALLBACK(gnc_option_font_changed_cb), option);
2045 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
2046 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
2047 gtk_widget_show_all(*enclosing);
2052 gnc_option_set_ui_widget_pixmap (
GNCOption *option, GtkBox *page_box,
2053 char *name,
char *documentation,
2055 GtkWidget **enclosing, gboolean *packed)
2062 ENTER(
"option %p(%s), name %s", option, gnc_option_name(option), name);
2063 colon_name = g_strconcat(name,
":", NULL);
2064 label = gtk_label_new(colon_name);
2065 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
2068 *enclosing = gtk_hbox_new(FALSE, 5);
2070 button = gtk_button_new_with_label(_(
"Clear"));
2071 gtk_widget_set_tooltip_text(button, _(
"Clear any selected image file."));
2073 value = gtk_file_chooser_button_new(_(
"Select image"),
2074 GTK_FILE_CHOOSER_ACTION_OPEN);
2075 gtk_widget_set_tooltip_text(value, _(
"Select an image file."));
2076 g_object_set(G_OBJECT(value),
2078 "preview-widget", gtk_image_new(),
2080 g_signal_connect(G_OBJECT (value),
"selection-changed",
2081 G_CALLBACK(gnc_option_changed_widget_cb), option);
2082 g_signal_connect(G_OBJECT (value),
"selection-changed",
2083 G_CALLBACK(gnc_image_option_selection_changed_cb), option);
2084 g_signal_connect(G_OBJECT (value),
"update-preview",
2085 G_CALLBACK(gnc_image_option_update_preview_cb), option);
2086 g_signal_connect_swapped(G_OBJECT (button),
"clicked",
2087 G_CALLBACK(gtk_file_chooser_unselect_all), value);
2089 gnc_option_set_widget (option, value);
2090 gnc_option_set_ui_value(option, FALSE);
2092 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
2093 gtk_box_pack_end(GTK_BOX(*enclosing), button, FALSE, FALSE, 0);
2094 gtk_box_pack_end(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
2096 gtk_widget_show(value);
2097 gtk_widget_show(label);
2098 gtk_widget_show(*enclosing);
2099 LEAVE(
"new widget = %p", value);
2104 gnc_option_set_ui_widget_radiobutton (
GNCOption *option, GtkBox *page_box,
2105 char *name,
char *documentation,
2107 GtkWidget **enclosing, gboolean *packed)
2111 *enclosing = gtk_hbox_new(FALSE, 5);
2113 value = gnc_option_create_radiobutton_widget(name, option);
2114 gnc_option_set_widget (option, value);
2116 gnc_option_set_ui_value(option, FALSE);
2117 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
2118 gtk_widget_show_all(*enclosing);
2123 gnc_option_set_ui_widget_dateformat (
GNCOption *option, GtkBox *page_box,
2124 char *name,
char *documentation,
2126 GtkWidget **enclosing, gboolean *packed)
2128 *enclosing = gnc_date_format_new_with_label(name);
2129 gnc_option_set_widget (option, *enclosing);
2131 gnc_option_set_ui_value(option, FALSE);
2132 g_signal_connect(G_OBJECT(*enclosing),
"format_changed",
2133 G_CALLBACK(gnc_option_changed_option_cb), option);
2134 gtk_widget_show_all(*enclosing);
2139 gnc_option_set_ui_widget_budget (
GNCOption *option, GtkBox *page_box,
2140 char *name,
char *documentation,
2142 GtkWidget **enclosing, gboolean *packed)
2148 colon_name = g_strconcat(name,
":", NULL);
2149 label = gtk_label_new(colon_name);
2150 gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
2153 *enclosing = gtk_hbox_new(FALSE, 5);
2155 value = gnc_option_create_budget_widget(option);
2157 gnc_option_set_widget (option, value);
2158 gnc_option_set_ui_value(option, FALSE);
2161 g_signal_connect(G_OBJECT(value),
"changed",
2162 G_CALLBACK(gnc_option_changed_widget_cb), option);
2164 gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
2165 gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
2166 gtk_widget_show_all(*enclosing);
2183 gnc_option_set_ui_value_boolean (
GNCOption *option, gboolean use_default,
2184 GtkWidget *widget, SCM value)
2186 if (scm_is_bool(value))
2188 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
2189 scm_is_true(value));
2197 gnc_option_set_ui_value_string (
GNCOption *option, gboolean use_default,
2198 GtkWidget *widget, SCM value)
2200 if (scm_is_string(value))
2202 const gchar *string;
2204 string = gnc_scm_to_utf8_string (value);
2205 gtk_entry_set_text(GTK_ENTRY(widget),
string);
2206 g_free ((gpointer *)
string);
2214 gnc_option_set_ui_value_text (
GNCOption *option, gboolean use_default,
2215 GObject *
object, SCM value)
2217 GtkTextBuffer *buffer;
2219 if (GTK_IS_TEXT_BUFFER(
object))
2220 buffer = GTK_TEXT_BUFFER(
object);
2222 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(
object));
2224 if (scm_is_string(value))
2226 const gchar *string;
2228 string = gnc_scm_to_utf8_string (value);
2229 gtk_text_buffer_set_text (buffer,
string, scm_c_string_length(value));
2230 g_free ((gpointer *)
string);
2238 gnc_option_set_ui_value_currency (
GNCOption *option, gboolean use_default,
2239 GtkWidget *widget, SCM value)
2243 commodity = gnc_scm_to_commodity (value);
2254 gnc_option_set_ui_value_commodity (
GNCOption *option, gboolean use_default,
2255 GtkWidget *widget, SCM value)
2259 commodity = gnc_scm_to_commodity (value);
2262 gnc_general_select_set_selected(GNC_GENERAL_SELECT (widget), commodity);
2270 gnc_option_set_ui_value_multichoice (
GNCOption *option, gboolean use_default,
2271 GtkWidget *widget, SCM value)
2275 index = gnc_option_permissible_value_index(option, value);
2281 gnc_combott_set_active(GNC_COMBOTT(widget), index);
2287 gnc_option_set_ui_value_date (
GNCOption *option, gboolean use_default,
2288 GtkWidget *widget, SCM value)
2291 char *date_option_type;
2293 gboolean bad_value = FALSE;
2295 date_option_type = gnc_option_date_option_get_subtype(option);
2297 if (scm_is_pair(value))
2299 symbol_str = gnc_date_option_value_get_type (value);
2302 if (g_strcmp0(symbol_str,
"relative") == 0)
2304 SCM relative = gnc_date_option_value_get_relative (value);
2306 index = gnc_option_permissible_value_index(option, relative);
2307 if (g_strcmp0(date_option_type,
"relative") == 0)
2310 gnc_combott_set_active(GNC_COMBOTT(widget), index);
2312 else if (g_strcmp0(date_option_type,
"both") == 0)
2315 GtkWidget *rel_date_widget;
2317 widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
2318 rel_date_widget = g_list_nth_data(widget_list,
2319 GNC_RD_WID_REL_WIDGET_POS);
2320 g_list_free(widget_list);
2321 gnc_date_option_set_select_method(option, FALSE, TRUE);
2323 gnc_combott_set_active(GNC_COMBOTT(rel_date_widget), index);
2330 else if (g_strcmp0(symbol_str,
"absolute") == 0)
2334 ts = gnc_date_option_value_get_absolute (value);
2336 if (g_strcmp0(date_option_type,
"absolute") == 0)
2338 gnc_date_edit_set_time(GNC_DATE_EDIT(widget), ts.tv_sec);
2340 else if (g_strcmp0(date_option_type,
"both") == 0)
2343 GtkWidget *ab_widget;
2345 widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
2346 ab_widget = g_list_nth_data(widget_list,
2347 GNC_RD_WID_AB_WIDGET_POS);
2348 g_list_free(widget_list);
2349 gnc_date_option_set_select_method(option, TRUE, TRUE);
2350 gnc_date_edit_set_time(GNC_DATE_EDIT(ab_widget), ts.tv_sec);
2371 if (date_option_type)
2372 free(date_option_type);
2378 gnc_option_set_ui_value_account_list (
GNCOption *option, gboolean use_default,
2379 GtkWidget *widget, SCM value)
2383 list = gnc_scm_list_to_glist(value);
2393 gnc_option_set_ui_value_account_sel (
GNCOption *option, gboolean use_default,
2394 GtkWidget *widget, SCM value)
2398 if (value != SCM_BOOL_F)
2400 if (!SWIG_IsPointer(value))
2401 scm_misc_error(
"gnc_option_set_ui_value_account_sel",
2402 "Option Value not a wcp.", value);
2404 acc = SWIG_MustGetPtr(value, SWIG_TypeQuery(
"_p_Account"), 4, 0);
2408 gnc_account_sel_set_account (GNC_ACCOUNT_SEL(widget), acc, FALSE);
2414 gnc_option_set_ui_value_list (
GNCOption *option, gboolean use_default,
2415 GtkWidget *widget, SCM value)
2417 GtkTreeSelection *selection;
2421 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
2422 gtk_tree_selection_unselect_all(selection);
2424 while (scm_is_list(value) && !scm_is_null(value))
2428 item = SCM_CAR(value);
2429 value = SCM_CDR(value);
2431 row = gnc_option_permissible_value_index(option, item);
2437 path = gtk_tree_path_new_from_indices(row, -1);
2438 gtk_tree_selection_select_path(selection, path);
2439 gtk_tree_path_free(path);
2442 if (!scm_is_list(value) || !scm_is_null(value))
2449 gnc_option_set_ui_value_number_range (
GNCOption *option, gboolean use_default,
2450 GtkWidget *widget, SCM value)
2452 GtkSpinButton *spinner;
2455 spinner = GTK_SPIN_BUTTON(widget);
2457 if (scm_is_number(value))
2459 d_value = scm_to_double(value);
2460 gtk_spin_button_set_value(spinner, d_value);
2468 gnc_option_set_ui_value_color (
GNCOption *option, gboolean use_default,
2469 GtkWidget *widget, SCM value)
2471 gdouble red, green, blue, alpha;
2473 if (gnc_option_get_color_info(option, use_default,
2474 &red, &green, &blue, &alpha))
2476 GtkColorButton *color_button;
2479 DEBUG(
"red %f, green %f, blue %f, alpha %f", red, green, blue, alpha);
2480 color_button = GTK_COLOR_BUTTON(widget);
2482 color.red = color_d_to_i16(red);
2483 color.green = color_d_to_i16(green);
2484 color.blue = color_d_to_i16(blue);
2485 gtk_color_button_set_color(color_button, &color);
2486 gtk_color_button_set_alpha(color_button, color_d_to_i16(alpha));
2495 gnc_option_set_ui_value_font (
GNCOption *option, gboolean use_default,
2496 GtkWidget *widget, SCM value)
2498 if (scm_is_string(value))
2500 const gchar *string;
2502 string = gnc_scm_to_utf8_string (value);
2503 if ((
string != NULL) && (*
string !=
'\0'))
2505 GtkFontButton *font_button = GTK_FONT_BUTTON(widget);
2506 gtk_font_button_set_font_name(font_button,
string);
2508 g_free ((gpointer *)
string);
2516 gnc_option_set_ui_value_pixmap (
GNCOption *option, gboolean use_default,
2517 GtkWidget *widget, SCM value)
2519 ENTER(
"option %p(%s)", option, gnc_option_name(option));
2520 if (scm_is_string(value))
2522 const gchar *string;
2524 string = gnc_scm_to_locale_string (value);
2525 if (
string && *
string)
2528 DEBUG(
"string = %s",
string);
2529 gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(widget),
string);
2530 test = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
2531 g_object_set_data_full(G_OBJECT(widget), LAST_SELECTION,
2532 g_strdup(
string), g_free);
2533 DEBUG(
"Set %s, retrieved %s",
string, test ? test :
"(null)");
2534 gnc_image_option_update_preview_cb(GTK_FILE_CHOOSER(widget), option);
2537 g_free ((gpointer *)
string);
2545 static gboolean gnc_option_set_ui_value_budget(
2546 GNCOption *option, gboolean use_default, GtkWidget *widget, SCM value)
2551 if (value != SCM_BOOL_F)
2553 if (!SWIG_IsPointer(value))
2554 scm_misc_error(
"gnc_option_set_ui_value_budget",
2555 "Option Value not a wcp.", value);
2557 bgt = SWIG_MustGetPtr(value, SWIG_TypeQuery(
"GncBudget *"), 4, 0);
2560 GtkComboBox *cb = GTK_COMBO_BOX(widget);
2561 GtkTreeModel *tm = gtk_combo_box_get_model(cb);
2563 if (gnc_tree_model_budget_get_iter_for_budget(tm, &iter, bgt))
2564 gtk_combo_box_set_active_iter(cb, &iter);
2574 gnc_option_set_ui_value_radiobutton (
GNCOption *option, gboolean use_default,
2575 GtkWidget *widget, SCM value)
2579 index = gnc_option_permissible_value_index(option, value);
2584 GtkWidget *box, *button;
2589 list = gtk_container_get_children (GTK_CONTAINER (widget));
2593 list = gtk_container_get_children (GTK_CONTAINER (box));
2594 for (i = 0; i < index && list; i++)
2596 g_return_val_if_fail (list, TRUE);
2598 button = list->data;
2600 val = g_object_get_data (G_OBJECT (button),
"gnc_radiobutton_index");
2601 g_return_val_if_fail (GPOINTER_TO_INT (val) == index, TRUE);
2603 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
2611 gnc_option_set_ui_value_dateformat (
GNCOption *option, gboolean use_default,
2612 GtkWidget *widget, SCM value)
2620 if (gnc_dateformat_option_value_parse(value, &format, &months, &years, &custom))
2623 gnc_date_format_set_format(gdf, format);
2624 gnc_date_format_set_months(gdf, months);
2625 gnc_date_format_set_years(gdf, years);
2626 gnc_date_format_set_custom(gdf, custom);
2627 gnc_date_format_refresh(gdf);
2649 gnc_option_get_ui_value_boolean (
GNCOption *option, GtkWidget *widget)
2653 active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
2654 return SCM_BOOL(active);
2658 gnc_option_get_ui_value_string (
GNCOption *option, GtkWidget *widget)
2663 string = gtk_editable_get_chars(GTK_EDITABLE(widget), 0, -1);
2664 result = scm_from_utf8_string(
string ?
string :
"");
2670 gnc_option_get_ui_value_text (
GNCOption *option, GtkWidget *widget)
2675 string = xxxgtk_textview_get_text (GTK_TEXT_VIEW(widget));
2676 result = scm_from_utf8_string(
string ?
string :
"");
2682 gnc_option_get_ui_value_currency (
GNCOption *option, GtkWidget *widget)
2689 return (gnc_commodity_to_scm (commodity));
2693 gnc_option_get_ui_value_commodity (
GNCOption *option, GtkWidget *widget)
2698 gnc_general_select_get_selected(GNC_GENERAL_SELECT(widget));
2700 return (gnc_commodity_to_scm(commodity));
2704 gnc_option_get_ui_value_multichoice (
GNCOption *option, GtkWidget *widget)
2709 index = gnc_combott_get_active(GNC_COMBOTT(widget));
2710 return (gnc_option_permissible_value(option, index));
2714 gnc_option_get_ui_value_date (
GNCOption *option, GtkWidget *widget)
2717 SCM type, val, result = SCM_UNDEFINED;
2718 char *subtype = gnc_option_date_option_get_subtype(option);
2720 if (g_strcmp0(subtype,
"relative") == 0)
2723 index = gnc_combott_get_active(GNC_COMBOTT(widget));
2725 type = scm_from_locale_symbol (
"relative");
2726 val = gnc_option_permissible_value(option, index);
2727 result = scm_cons(type, val);
2729 else if (g_strcmp0(subtype,
"absolute") == 0)
2733 ts.tv_sec = gnc_date_edit_get_date(GNC_DATE_EDIT(widget));
2736 result = scm_cons(scm_from_locale_symbol (
"absolute"), gnc_timespec2timepair(ts));
2738 else if (g_strcmp0(subtype,
"both") == 0)
2744 GtkWidget *ab_button, *rel_widget, *ab_widget;
2746 widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
2747 ab_button = g_list_nth_data(widget_list, GNC_RD_WID_AB_BUTTON_POS);
2748 ab_widget = g_list_nth_data(widget_list, GNC_RD_WID_AB_WIDGET_POS);
2749 rel_widget = g_list_nth_data(widget_list, GNC_RD_WID_REL_WIDGET_POS);
2750 g_list_free(widget_list);
2753 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ab_button)))
2755 ts.tv_sec = gnc_date_edit_get_date(GNC_DATE_EDIT(ab_widget));
2757 result = scm_cons(scm_from_locale_symbol (
"absolute"), gnc_timespec2timepair(ts));
2762 index = gnc_combott_get_active(GNC_COMBOTT(rel_widget));
2764 val = gnc_option_permissible_value(option, index);
2765 result = scm_cons(scm_from_locale_symbol (
"relative"), val);
2773 gnc_option_get_ui_value_account_list (
GNCOption *option, GtkWidget *widget)
2779 tree = GNC_TREE_VIEW_ACCOUNT(widget);
2783 result = gnc_glist_to_scm_list(list,
"_p_Account");
2789 gnc_option_get_ui_value_account_sel (
GNCOption *option, GtkWidget *widget)
2794 gas = GNC_ACCOUNT_SEL(widget);
2795 acc = gnc_account_sel_get_account (gas);
2800 return SWIG_NewPointerObj(acc, SWIG_TypeQuery(
"_p_Account"), 0);
2804 gnc_option_get_ui_value_budget(
GNCOption *option, GtkWidget *widget)
2811 cb = GTK_COMBO_BOX(widget);
2812 gtk_combo_box_get_active_iter(cb, &iter);
2813 tm = gtk_combo_box_get_model(cb);
2814 bgt = gnc_tree_model_budget_get_budget(tm, &iter);
2819 return SWIG_NewPointerObj(bgt, SWIG_TypeQuery(
"_p_budget_s"), 0);
2823 gnc_option_get_ui_value_list (
GNCOption *option, GtkWidget *widget)
2825 GtkTreeSelection *selection;
2832 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
2833 num_rows = gnc_option_num_permissible_values(option);
2834 result = scm_c_eval_string(
"'()");
2836 for (row = 0; row < num_rows; row++)
2838 path = gtk_tree_path_new_from_indices(row, -1);
2839 selected = gtk_tree_selection_path_is_selected(selection, path);
2840 gtk_tree_path_free(path);
2842 result = scm_cons(gnc_option_permissible_value(option, row), result);
2845 return (scm_reverse(result));
2849 gnc_option_get_ui_value_number_range (
GNCOption *option, GtkWidget *widget)
2851 GtkSpinButton *spinner;
2854 spinner = GTK_SPIN_BUTTON(widget);
2856 value = gtk_spin_button_get_value(spinner);
2858 return (scm_from_double (value));
2862 gnc_option_get_ui_value_color (
GNCOption *option, GtkWidget *widget)
2865 GtkColorButton *color_button;
2867 gdouble red, green, blue, alpha;
2870 ENTER(
"option %p(%s), widget %p",
2871 option, gnc_option_name(option), widget);
2873 color_button = GTK_COLOR_BUTTON(widget);
2874 gtk_color_button_get_color(color_button, &color);
2875 red = color_i16_to_d(color.red);
2876 green = color_i16_to_d(color.green);
2877 blue = color_i16_to_d(color.blue);
2878 alpha = color_i16_to_d(gtk_color_button_get_alpha(color_button));
2880 scale = gnc_option_color_range(option);
2883 result = scm_cons(scm_from_double (alpha * scale), result);
2884 result = scm_cons(scm_from_double (blue * scale), result);
2885 result = scm_cons(scm_from_double (green * scale), result);
2886 result = scm_cons(scm_from_double (red * scale), result);
2891 gnc_option_get_ui_value_font (
GNCOption *option, GtkWidget *widget)
2893 GtkFontButton *font_button = GTK_FONT_BUTTON(widget);
2894 const gchar * string;
2896 string = gtk_font_button_get_font_name(font_button);
2897 return (
string ? scm_from_utf8_string(
string) : SCM_BOOL_F);
2901 gnc_option_get_ui_value_pixmap (
GNCOption *option, GtkWidget *widget)
2906 string = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget));
2907 DEBUG(
"filename %s",
string ?
string :
"(null)");
2908 result = scm_from_utf8_string(
string ?
string :
"");
2914 gnc_option_get_ui_value_radiobutton (
GNCOption *option, GtkWidget *widget)
2919 _index = g_object_get_data(G_OBJECT(widget),
"gnc_radiobutton_index");
2920 index = GPOINTER_TO_INT(_index);
2922 return (gnc_option_permissible_value(option, index));
2926 gnc_option_get_ui_value_dateformat (
GNCOption *option, GtkWidget *widget)
2934 format = gnc_date_format_get_format(gdf);
2935 months = gnc_date_format_get_months(gdf);
2936 years = gnc_date_format_get_years(gdf);
2937 custom = gnc_date_format_get_custom(gdf);
2939 return (gnc_dateformat_option_set_value(format, months, years, custom));
2945 static void gnc_options_initialize_options (
void)
2950 "boolean", gnc_option_set_ui_widget_boolean,
2951 gnc_option_set_ui_value_boolean, gnc_option_get_ui_value_boolean
2954 "string", gnc_option_set_ui_widget_string,
2955 gnc_option_set_ui_value_string, gnc_option_get_ui_value_string
2958 "text", gnc_option_set_ui_widget_text,
2959 (GNCOptionUISetValue)gnc_option_set_ui_value_text,
2960 gnc_option_get_ui_value_text
2963 "currency", gnc_option_set_ui_widget_currency,
2964 gnc_option_set_ui_value_currency, gnc_option_get_ui_value_currency
2967 "commodity", gnc_option_set_ui_widget_commodity,
2968 gnc_option_set_ui_value_commodity, gnc_option_get_ui_value_commodity
2971 "multichoice", gnc_option_set_ui_widget_multichoice,
2972 gnc_option_set_ui_value_multichoice, gnc_option_get_ui_value_multichoice
2975 "date", gnc_option_set_ui_widget_date,
2976 gnc_option_set_ui_value_date, gnc_option_get_ui_value_date
2979 "account-list", gnc_option_set_ui_widget_account_list,
2980 gnc_option_set_ui_value_account_list, gnc_option_get_ui_value_account_list
2983 "account-sel", gnc_option_set_ui_widget_account_sel,
2984 gnc_option_set_ui_value_account_sel, gnc_option_get_ui_value_account_sel
2987 "list", gnc_option_set_ui_widget_list,
2988 gnc_option_set_ui_value_list, gnc_option_get_ui_value_list
2991 "number-range", gnc_option_set_ui_widget_number_range,
2992 gnc_option_set_ui_value_number_range, gnc_option_get_ui_value_number_range
2995 "color", gnc_option_set_ui_widget_color,
2996 gnc_option_set_ui_value_color, gnc_option_get_ui_value_color
2999 "font", gnc_option_set_ui_widget_font,
3000 gnc_option_set_ui_value_font, gnc_option_get_ui_value_font
3003 "pixmap", gnc_option_set_ui_widget_pixmap,
3004 gnc_option_set_ui_value_pixmap, gnc_option_get_ui_value_pixmap
3007 "radiobutton", gnc_option_set_ui_widget_radiobutton,
3008 gnc_option_set_ui_value_radiobutton, gnc_option_get_ui_value_radiobutton
3011 "dateformat", gnc_option_set_ui_widget_dateformat,
3012 gnc_option_set_ui_value_dateformat, gnc_option_get_ui_value_dateformat
3015 "budget", gnc_option_set_ui_widget_budget,
3016 gnc_option_set_ui_value_budget, gnc_option_get_ui_value_budget
3018 { NULL, NULL, NULL, NULL }
3022 for (i = 0; options[i].option_name; i++)
3023 gnc_options_ui_register_option (&(options[i]));
3029 g_return_if_fail (optionTable);
3030 g_return_if_fail (option);
3033 g_hash_table_insert (optionTable, (gpointer)(option->option_name), option);
3036 GNCOptionDef_t * gnc_options_ui_get_option (
const char *option_name)
3039 g_return_val_if_fail (optionTable, NULL);
3040 g_return_val_if_fail (option_name, NULL);
3042 retval = g_hash_table_lookup (optionTable, option_name);
3045 PERR(
"Option lookup for type '%s' failed!", option_name);
3050 void gnc_options_ui_initialize (
void)
3052 SWIG_GetModule(NULL);
3054 g_return_if_fail (optionTable == NULL);
3055 optionTable = g_hash_table_new (g_str_hash, g_str_equal);
3058 gnc_options_initialize_options ();
3070 struct scm_cb *cbdata = data;
3072 if (gnc_option_db_get_changed (win->option_db))
3074 gnc_option_db_commit (win->option_db);
3075 if (cbdata->apply_cb != SCM_BOOL_F)
3077 scm_call_0 (cbdata->apply_cb);
3085 struct scm_cb *cbdata = data;
3087 if (cbdata->close_cb != SCM_BOOL_F)
3089 scm_call_0 (cbdata->close_cb);
3090 scm_gc_unprotect_object (cbdata->close_cb);
3093 if (cbdata->apply_cb != SCM_BOOL_F)
3094 scm_gc_unprotect_object (cbdata->apply_cb);
3103 gnc_options_dialog_set_scm_callbacks (
GNCOptionWin *win, SCM apply_cb,
3108 cbdata = g_new0 (
struct scm_cb, 1);
3109 cbdata->apply_cb = apply_cb;
3110 cbdata->close_cb = close_cb;
3112 if (apply_cb != SCM_BOOL_F)
3113 scm_gc_protect_object (cbdata->apply_cb);
3115 if (close_cb != SCM_BOOL_F)
3116 scm_gc_protect_object (cbdata->close_cb);
3118 gnc_options_dialog_set_apply_cb (win, scm_apply_cb, cbdata);
3119 gnc_options_dialog_set_close_cb (win, scm_close_cb, cbdata);
void gnc_tree_view_account_get_view_info(GncTreeViewAccount *account_view, AccountViewInfo *avi)
void gnc_currency_edit_set_currency(GNCCurrencyEdit *gce, const gnc_commodity *currency)
GList * gnc_tree_view_account_get_selected_accounts(GncTreeViewAccount *view)
Account * gnc_tree_view_account_get_cursor_account(GncTreeViewAccount *view)
#define PINFO(format, args...)
#define DEBUG(format, args...)
Use a 64-bit unsigned int timespec.
void gnc_tree_view_account_set_view_info(GncTreeViewAccount *account_view, AccountViewInfo *avi)
#define PERR(format, args...)
#define ENTER(format, args...)
void gnc_tree_view_account_set_selected_accounts(GncTreeViewAccount *view, GList *account_list, gboolean show_last)
Currency selection widget.
void gnc_tree_view_account_select_subaccounts(GncTreeViewAccount *view, Account *account)
GtkTreeView implementation for gnucash account tree.
GtkTreeView * gnc_tree_view_account_new(gboolean show_root)
gnc_commodity * gnc_currency_edit_get_currency(GNCCurrencyEdit *gce)
All type declarations for the whole Gnucash engine.
Generic api to store and retrieve preferences.
GtkWidget * gnc_currency_edit_new(void)
gboolean gnc_prefs_get_bool(const gchar *group, const gchar *pref_name)
#define LEAVE(format, args...)
provides some utilities for working with the list of budgets in a book.
const gchar * QofLogModule