40 #include <glib/gi18n.h>
44 #include "dialog-utils.h"
47 #include "gnc-gui-query.h"
57 SOURCE_COL_FQ_SUPPORTED,
64 GtkWidget * namespace_combo;
65 GtkWidget * commodity_combo;
66 GtkWidget * select_user_prompt;
67 GtkWidget * ok_button;
71 const char * default_cusip;
72 const char * default_fullname;
73 const char * default_mnemonic;
74 const char * default_user_symbol;
82 GtkWidget * fullname_entry;
83 GtkWidget * mnemonic_entry;
84 GtkWidget * user_symbol_entry;
85 GtkWidget * namespace_combo;
86 GtkWidget * code_entry;
87 GtkWidget * fraction_spinbutton;
88 GtkWidget * get_quote_check;
89 GtkWidget * source_label;
90 GtkWidget * source_button[SOURCE_MAX];
91 GtkWidget * source_menu[SOURCE_MAX];
92 GtkWidget * quote_tz_label;
93 GtkWidget * quote_tz_menu;
94 GtkWidget * ok_button;
96 guint comm_section_top;
97 guint comm_section_bottom;
98 guint comm_symbol_line;
100 guint fq_section_bottom;
102 gboolean is_currency;
109 static gnc_commodity_help_callback help_callback = NULL;
114 gnc_ui_select_commodity_create(
const gnc_commodity * orig_sel,
124 void gnc_ui_commodity_changed_cb(GtkWidget * dummy, gpointer user_data);
125 void gnc_ui_commodity_quote_info_cb(GtkWidget *w, gpointer data);
129 static void gnc_ui_select_commodity_response_cb (GtkDialog * dialog, gint response, gpointer data);
150 const char * user_message,
152 const char * fullname,
153 const char * mnemonic)
156 const gchar *initial;
157 gchar *user_prompt_text;
162 win = gnc_ui_select_commodity_create(orig_sel, mode);
163 win->default_cusip = cusip;
164 win->default_fullname = fullname;
165 win->default_mnemonic = mnemonic;
166 win->default_user_symbol =
"";
169 gtk_window_set_transient_for (GTK_WINDOW (win->dialog), GTK_WINDOW (parent));
171 if (user_message != NULL)
172 initial = user_message;
173 else if ((cusip != NULL) || (fullname != NULL) || (mnemonic != NULL))
174 initial = _(
"\nPlease select a commodity to match:");
179 g_strdup_printf(
"%s%s%s%s%s%s%s",
181 fullname ? _(
"\nCommodity: ") :
"",
182 fullname ? fullname :
"",
187 cusip ? _(
"\nExchange code (ISIN, CUSIP or similar): ") :
"",
189 mnemonic ? _(
"\nMnemonic (Ticker symbol or similar): ") :
"",
190 mnemonic ? mnemonic :
"");
191 gtk_label_set_text ((GtkLabel *)(win->select_user_prompt),
193 g_free(user_prompt_text);
199 switch (value = gtk_dialog_run(GTK_DIALOG(win->dialog)))
201 case GTK_RESPONSE_OK:
203 retval = win->selection;
206 case GNC_RESPONSE_NEW:
211 DEBUG(
"default: %d", value);
217 gtk_widget_destroy (GTK_WIDGET (win->dialog));
246 gnc_ui_select_commodity_create(
const gnc_commodity * orig_sel,
251 const char *title, *text;
253 GtkWidget *button, *label;
255 builder = gtk_builder_new();
256 gnc_builder_add_from_file (builder,
"dialog-commodity.glade",
"liststore1");
257 gnc_builder_add_from_file (builder,
"dialog-commodity.glade",
"liststore2");
258 gnc_builder_add_from_file (builder,
"dialog-commodity.glade",
"Security Selector Dialog");
260 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, retval);
262 retval->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"Security Selector Dialog"));
263 retval->namespace_combo = GTK_WIDGET(gtk_builder_get_object (builder,
"ss_namespace_cbwe"));
264 retval->commodity_combo = GTK_WIDGET(gtk_builder_get_object (builder,
"ss_commodity_cbwe"));
265 retval->select_user_prompt = GTK_WIDGET(gtk_builder_get_object (builder,
"select_user_prompt"));
266 retval->ok_button = GTK_WIDGET(gtk_builder_get_object (builder,
"ss_ok_button"));
267 label = GTK_WIDGET(gtk_builder_get_object (builder,
"item_label"));
269 gnc_cbwe_require_list_item(GTK_COMBO_BOX(retval->namespace_combo));
270 gnc_cbwe_require_list_item(GTK_COMBO_BOX(retval->commodity_combo));
272 gtk_label_set_text (GTK_LABEL (retval->select_user_prompt),
"");
275 g_signal_connect (G_OBJECT (retval->dialog),
"close",
276 G_CALLBACK (select_commodity_close), retval);
277 g_signal_connect (G_OBJECT (retval->dialog),
"response",
278 G_CALLBACK (gnc_ui_select_commodity_response_cb), retval);
284 title = _(
"Select security/currency");
285 text = _(
"_Security/currency:");
288 title = _(
"Select security");
289 text = _(
"_Security:");
293 title = _(
"Select currency");
294 text = _(
"Cu_rrency:");
295 button = GTK_WIDGET(gtk_builder_get_object (builder,
"ss_new_button"));
296 gtk_widget_destroy(button);
299 gtk_window_set_title (GTK_WINDOW(retval->dialog), title);
300 gtk_label_set_text_with_mnemonic (GTK_LABEL(label), text);
310 g_object_unref(G_OBJECT(builder));
345 w->default_user_symbol,
346 w->default_fraction);
381 const gchar *fullname;
384 ENTER(
"cbwe=%p, user_data=%p", cbwe, user_data);
386 fullname = gtk_entry_get_text(GTK_ENTRY (gtk_bin_get_child(GTK_BIN (GTK_COMBO_BOX(w->commodity_combo)))));
388 DEBUG(
"namespace=%s, name=%s", name_space, fullname);
389 w->selection = gnc_commodity_table_find_full(gnc_get_current_commodities(),
390 name_space, fullname);
393 ok = (w->selection != NULL);
394 gtk_widget_set_sensitive(w->ok_button, ok);
395 gtk_dialog_set_default_response(GTK_DIALOG(w->dialog), ok ? 0 : 2);
396 LEAVE(
"sensitive=%d, default = %d", ok, ok ? 0 : 2);
423 ENTER(
"cbwe=%p, user_data=%p", cbwe, user_data);
425 DEBUG(
"name_space=%s", name_space);
436 collate(gconstpointer a, gconstpointer b)
442 return g_utf8_collate(a, b);
448 const gchar * name_space,
449 const gchar * init_string)
452 GList * iterator = NULL;
453 GList * commodity_items = NULL;
454 GtkComboBox *combo_box;
459 gint current = 0, match = 0;
462 g_return_if_fail(GTK_IS_COMBO_BOX(cbwe));
463 g_return_if_fail(name_space);
466 combo_box = GTK_COMBO_BOX(cbwe);
467 model = gtk_combo_box_get_model(combo_box);
468 gtk_list_store_clear(GTK_LIST_STORE(model));
471 entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo_box)));
472 gtk_editable_delete_text(GTK_EDITABLE(entry), 0, -1);
474 gtk_combo_box_set_active(combo_box, -1);
478 for (iterator = commodities; iterator; iterator = iterator->next)
481 g_list_append(commodity_items,
484 g_list_free(commodities);
486 commodity_items = g_list_sort(commodity_items, collate);
487 for (iterator = commodity_items; iterator; iterator = iterator->next)
489 name = (
char *)iterator->data;
490 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
491 gtk_list_store_set (GTK_LIST_STORE(model), &iter, 0, name, -1);
493 if (init_string && g_utf8_collate(name, init_string) == 0)
498 gtk_combo_box_set_active(combo_box, match);
499 g_list_free(commodity_items);
510 g_return_if_fail (w != NULL);
512 gtk_widget_destroy (GTK_WIDGET (w->dialog));
520 gnc_ui_select_commodity_response_cb (GtkDialog * dialog, gint response, gpointer data)
524 const gchar *fullname;
529 case GTK_RESPONSE_OK:
531 fullname = gtk_entry_get_text (GTK_ENTRY (w->commodity_entry));
533 commodity = gnc_commodity_table_find_full (gnc_get_current_commodities (),
534 namespace, fullname);
537 if (commodity != NULL)
539 if (w->callback != NULL)
540 (w->callback) (commodity, w->callback_data);
541 gnc_ui_select_commodity_destroy (w);
545 gnc_warning_dialog (dialog,
546 _(
"You must select a commodity. "
547 "To create a new one, click \"New\""));
550 case GNC_RESPONSE_NEW:
558 w->default_fraction);
559 if (commodity != NULL)
564 (commodity), TRUE, FALSE);
572 if (w->callback != NULL)
573 (w->callback) (NULL, w->callback_data);
575 gnc_ui_select_commodity_destroy (w);
590 gnc_set_commodity_section_sensitivity (GtkWidget *widget, gpointer user_data)
595 gtk_container_child_get(GTK_CONTAINER(cw->table), widget,
596 "top-attach", &offset,
599 if ((offset < cw->comm_section_top) || (offset >= cw->comm_section_bottom))
602 gtk_widget_set_sensitive(widget, offset == cw->comm_symbol_line);
608 gtk_container_foreach(GTK_CONTAINER(cw->table),
609 gnc_set_commodity_section_sensitivity, cw);
614 gnc_set_fq_sensitivity (GtkWidget *widget, gpointer user_data)
619 gtk_container_child_get(GTK_CONTAINER(cw->table), widget,
620 "top-attach", &offset,
623 if ((offset < cw->fq_section_top) || (offset >= cw->fq_section_bottom))
625 g_object_set(widget,
"sensitive", FALSE, NULL);
632 gtk_container_foreach(GTK_CONTAINER(cw->table),
633 gnc_set_fq_sensitivity, cw);
642 const char * init_string,
645 GtkComboBox *combo_box;
648 GList *namespaces, *node;
649 gint current = 0, match = 0;
651 g_return_if_fail(GTK_IS_COMBO_BOX (cbwe));
654 combo_box = GTK_COMBO_BOX(cbwe);
655 model = gtk_combo_box_get_model(combo_box);
656 gtk_list_store_clear(GTK_LIST_STORE(model));
657 gtk_combo_box_set_active(combo_box, -1);
670 node = g_list_find_custom (namespaces, GNC_COMMODITY_NS_CURRENCY, collate);
673 namespaces = g_list_remove_link (namespaces, node);
674 g_list_free_1 (node);
683 namespaces = g_list_prepend (NULL, GNC_COMMODITY_NS_CURRENCY);
688 namespaces = g_list_sort(namespaces, collate);
689 for (node = namespaces; node; node = node->next)
694 if (g_utf8_collate(node->data,
"template" ) != 0)
696 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
697 gtk_list_store_set (GTK_LIST_STORE(model), &iter, 0, node->data, -1);
700 if (init_string && (g_utf8_collate(node->data, init_string) == 0))
705 gtk_combo_box_set_active(combo_box, match);
706 g_list_free(namespaces);
713 const gchar *name_space;
715 g_return_val_if_fail(GTK_IS_COMBO_BOX (cbwe), NULL);
717 name_space = gtk_entry_get_text( GTK_ENTRY( gtk_bin_get_child( GTK_BIN( GTK_COMBO_BOX(cbwe)))));
719 if (g_strcmp0 (name_space, GNC_COMMODITY_NS_ISO) == 0)
722 return g_strdup(GNC_COMMODITY_NS_CURRENCY);
725 return g_strdup(name_space);
733 gnc_ui_commodity_quote_info_cb (GtkWidget *w, gpointer data)
736 gboolean get_quote, allow_src, active;
741 get_quote = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w));
743 text = gtk_entry_get_text( GTK_ENTRY( gtk_bin_get_child( GTK_BIN( GTK_COMBO_BOX(cw->namespace_combo)))));
747 gtk_widget_set_sensitive(cw->source_label, get_quote && allow_src);
751 if (!cw->source_button[i])
754 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cw->source_button[i]));
755 gtk_widget_set_sensitive(cw->source_button[i], get_quote && allow_src);
756 gtk_widget_set_sensitive(cw->source_menu[i], get_quote && allow_src && active);
758 gtk_widget_set_sensitive(cw->quote_tz_label, get_quote);
759 gtk_widget_set_sensitive(cw->quote_tz_menu, get_quote);
765 gnc_ui_commodity_changed_cb(GtkWidget * dummy, gpointer user_data)
769 const char * fullname;
770 const char * mnemonic;
773 ENTER(
"widget=%p, user_data=%p", dummy, user_data);
777 fullname = gtk_entry_get_text(GTK_ENTRY(w->fullname_entry));
778 mnemonic = gtk_entry_get_text(GTK_ENTRY(w->mnemonic_entry));
779 DEBUG(
"namespace=%s, name=%s, mnemonic=%s", name_space, fullname, mnemonic);
780 ok = (fullname && name_space && mnemonic &&
781 fullname[0] && name_space[0] && mnemonic[0]);
788 gtk_widget_set_sensitive(w->ok_button, ok);
789 gtk_dialog_set_default_response(GTK_DIALOG(w->dialog), ok ? 0 : 1);
790 LEAVE(
"sensitive=%d, default = %d", ok, ok ? 0 : 1);
810 GtkCellRenderer *renderer;
813 store = gtk_list_store_new(NUM_SOURCE_COLS, G_TYPE_STRING, G_TYPE_BOOLEAN);
816 gtk_list_store_append(store, &iter);
817 gtk_list_store_set(store, &iter,
818 SOURCE_COL_NAME, _(
"Currency"),
819 SOURCE_COL_FQ_SUPPORTED, TRUE,
825 for (i = 0; i < max; i++)
832 gtk_list_store_append(store, &iter);
833 gtk_list_store_set(store, &iter,
834 SOURCE_COL_NAME, name,
835 SOURCE_COL_FQ_SUPPORTED, supported,
840 combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
841 g_object_unref(store);
842 renderer = gtk_cell_renderer_text_new();
843 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, TRUE);
844 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(combo), renderer,
845 "text", SOURCE_COL_NAME);
846 gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(combo), renderer,
847 "sensitive", SOURCE_COL_FQ_SUPPORTED);
848 gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
849 gtk_widget_show(combo);
871 gnc_find_timezone_menu_position(
const gchar *timezone)
874 gboolean found = FALSE;
876 while (!found && known_timezones[i])
878 if (g_strcmp0(timezone, known_timezones[i]) != 0)
887 if (found)
return i + 1;
893 gnc_timezone_menu_position_to_string(guint pos)
895 if (pos == 0)
return NULL;
896 return known_timezones[pos - 1];
901 gnc_ui_quote_tz_menu_create(
void)
912 combo = gtk_combo_box_text_new();
913 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), _(
"Use local time"));
914 for (itemstr = &known_timezones[0]; *itemstr; itemstr++)
916 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), *itemstr);
919 gtk_widget_show(combo);
928 gnc_ui_build_commodity_dialog(
const char * selected_namespace,
930 const char * fullname,
931 const char * mnemonic,
932 const char * user_symbol,
938 GtkWidget *help_button;
941 GtkWidget *widget, *sec_label;
943 gboolean include_iso;
947 ENTER(
"widget=%p, selected namespace=%s, fullname=%s, mnemonic=%s",
948 parent, selected_namespace, fullname, mnemonic);
950 builder = gtk_builder_new();
951 gnc_builder_add_from_file (builder,
"dialog-commodity.glade",
"liststore2");
952 gnc_builder_add_from_file (builder,
"dialog-commodity.glade",
"adjustment1");
953 gnc_builder_add_from_file (builder,
"dialog-commodity.glade",
"Security Dialog");
955 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, retval);
957 retval->dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"Security Dialog"));
959 gtk_window_set_transient_for (GTK_WINDOW (retval->dialog), GTK_WINDOW (parent));
960 retval->edit_commodity = NULL;
962 help_button = GTK_WIDGET(gtk_builder_get_object (builder,
"help_button"));
964 gtk_widget_hide (help_button);
967 retval->fullname_entry = GTK_WIDGET(gtk_builder_get_object (builder,
"fullname_entry"));
968 retval->mnemonic_entry = GTK_WIDGET(gtk_builder_get_object (builder,
"mnemonic_entry"));
969 retval->user_symbol_entry = GTK_WIDGET(gtk_builder_get_object (builder,
"user_symbol_entry"));
970 retval->namespace_combo = GTK_WIDGET(gtk_builder_get_object (builder,
"namespace_cbwe"));
971 retval->code_entry = GTK_WIDGET(gtk_builder_get_object (builder,
"code_entry"));
972 retval->fraction_spinbutton = GTK_WIDGET(gtk_builder_get_object (builder,
"fraction_spinbutton"));
973 retval->ok_button = GTK_WIDGET(gtk_builder_get_object (builder,
"ok_button"));
974 retval->get_quote_check = GTK_WIDGET(gtk_builder_get_object (builder,
"get_quote_check"));
975 retval->source_label = GTK_WIDGET(gtk_builder_get_object (builder,
"source_label"));
976 retval->source_button[
SOURCE_SINGLE] = GTK_WIDGET(gtk_builder_get_object (builder,
"single_source_button"));
977 retval->source_button[
SOURCE_MULTI] = GTK_WIDGET(gtk_builder_get_object (builder,
"multi_source_button"));
978 retval->quote_tz_label = GTK_WIDGET(gtk_builder_get_object (builder,
"quote_tz_label"));
981 retval->table = GTK_WIDGET(gtk_builder_get_object (builder,
"edit_table"));
982 sec_label = GTK_WIDGET(gtk_builder_get_object (builder,
"security_label"));
983 gtk_container_child_get(GTK_CONTAINER(retval->table), sec_label,
984 "bottom-attach", &retval->comm_section_top, NULL);
985 widget = GTK_WIDGET(gtk_builder_get_object (builder,
"quote_label"));
986 gtk_container_child_get(GTK_CONTAINER(retval->table), widget,
987 "top-attach", &retval->comm_section_bottom, NULL);
988 gtk_container_child_get(GTK_CONTAINER(retval->table),
989 retval->user_symbol_entry,
"top-attach",
990 &retval->comm_symbol_line, NULL);
993 box = GTK_WIDGET(gtk_builder_get_object (builder,
"single_source_box"));
1003 gtk_box_pack_start(GTK_BOX(box), menu, TRUE, TRUE, 0);
1005 box = GTK_WIDGET(gtk_builder_get_object (builder,
"multi_source_box"));
1008 gtk_box_pack_start(GTK_BOX(box), menu, TRUE, TRUE, 0);
1013 GTK_WIDGET(gtk_builder_get_object (builder,
"unknown_source_button"));
1014 box = GTK_WIDGET(gtk_builder_get_object (builder,
"unknown_source_box"));
1017 gtk_box_pack_start(GTK_BOX(box), menu, TRUE, TRUE, 0);
1023 widget = GTK_WIDGET(gtk_builder_get_object (builder,
"unknown_source_alignment"));
1024 gtk_container_child_get(GTK_CONTAINER(retval->table), widget,
1025 "top-attach", &row, NULL);
1026 gtk_table_set_row_spacing(GTK_TABLE(retval->table), row, 0);
1027 gtk_widget_destroy(widget);
1028 widget = GTK_WIDGET(gtk_builder_get_object (builder,
"unknown_source_box"));
1029 gtk_widget_destroy(widget);
1032 box = GTK_WIDGET(gtk_builder_get_object (builder,
"quote_tz_box"));
1033 retval->quote_tz_menu = gnc_ui_quote_tz_menu_create();
1034 gtk_box_pack_start(GTK_BOX(box), retval->quote_tz_menu, TRUE, TRUE, 0);
1039 retval->is_currency = TRUE;
1040 gnc_ui_update_commodity_info (retval);
1042 title = _(
"Edit currency");
1043 text = g_strdup_printf(
"<b>%s</b>", _(
"Currency Information"));
1047 include_iso = FALSE;
1048 title = edit ? _(
"Edit security") : _(
"New security");
1049 text = g_strdup_printf(
"<b>%s</b>", _(
"Security Information"));
1051 gtk_window_set_title(GTK_WINDOW(retval->dialog), title);
1052 gtk_label_set_markup(GTK_LABEL(sec_label), text);
1058 gtk_widget_destroy(GTK_WIDGET(gtk_builder_get_object (builder,
"finance_quote_warning")));
1063 widget = GTK_WIDGET(gtk_builder_get_object (builder,
"fq_warning_alignment"));
1064 gtk_container_child_get(GTK_CONTAINER(retval->table), widget,
1065 "bottom-attach", &retval->fq_section_top, NULL);
1066 widget = GTK_WIDGET(gtk_builder_get_object (builder,
"quote_tz_alignment"));
1067 gtk_container_child_get(GTK_CONTAINER(retval->table), widget,
1068 "bottom-attach", &retval->fq_section_bottom, NULL);
1069 gnc_ui_update_fq_info (retval);
1073 g_signal_connect (G_OBJECT (retval->dialog),
"close",
1074 G_CALLBACK (commodity_close), retval);
1077 gtk_entry_set_text (GTK_ENTRY (retval->fullname_entry), fullname ? fullname :
"");
1078 gtk_entry_set_text (GTK_ENTRY (retval->mnemonic_entry), mnemonic ? mnemonic :
"");
1079 gtk_entry_set_text (GTK_ENTRY (retval->user_symbol_entry), user_symbol ? user_symbol :
"");
1080 gnc_cbwe_add_completion(GTK_COMBO_BOX(retval->namespace_combo));
1084 gtk_entry_set_text (GTK_ENTRY (retval->code_entry), cusip ? cusip :
"");
1087 gtk_spin_button_set_value (GTK_SPIN_BUTTON (retval->fraction_spinbutton),
1090 g_object_unref(G_OBJECT(builder));
1103 gboolean has_quote_src;
1104 const char *quote_tz;
1111 source = gnc_commodity_get_default_quote_source (commodity);
1114 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (win->get_quote_check),
1119 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(win->source_button[type]), TRUE);
1120 gtk_combo_box_set_active(GTK_COMBO_BOX(win->source_menu[type]),
1126 pos = gnc_find_timezone_menu_position(quote_tz);
1132 gtk_combo_box_set_active(GTK_COMBO_BOX(win->quote_tz_menu), pos);
1140 const char * name_space,
1142 const char * fullname,
1143 const char * mnemonic,
1144 const char * user_symbol,
1173 win = gnc_ui_build_commodity_dialog(name_space, parent, fullname,
1174 mnemonic, user_symbol, cusip,
1175 fraction, (commodity != NULL));
1178 gnc_ui_commodity_update_quote_info(win, commodity);
1179 win->edit_commodity = commodity;
1182 gnc_ui_commodity_quote_info_cb(win->get_quote_check, win);
1188 value = gtk_dialog_run(GTK_DIALOG(win->dialog));
1191 case GTK_RESPONSE_OK:
1193 done = gnc_ui_commodity_dialog_to_object(win);
1194 retval = win->edit_commodity;
1196 case GTK_RESPONSE_HELP:
1202 DEBUG(
"default: %d", value);
1208 gtk_widget_destroy (GTK_WIDGET (win->dialog));
1223 const char * fullname,
1224 const char * mnemonic,
1225 const char * user_symbol,
1231 result = gnc_ui_common_commodity_modal(NULL, parent, name_space, cusip,
1232 fullname, mnemonic, user_symbol,
1249 result = gnc_ui_common_commodity_modal(NULL, parent, default_namespace, NULL,
1250 NULL, NULL, NULL, 0);
1271 result = gnc_ui_common_commodity_modal(commodity, parent, NULL, NULL,
1272 NULL, NULL, NULL, 0);
1274 return result != NULL;
1286 const char * fullname = gtk_entry_get_text(GTK_ENTRY(w->fullname_entry));
1288 const char * mnemonic = gtk_entry_get_text(GTK_ENTRY(w->mnemonic_entry));
1289 const char * user_symbol = gtk_entry_get_text(GTK_ENTRY(w->user_symbol_entry));
1290 const char * code = gtk_entry_get_text(GTK_ENTRY(w->code_entry));
1291 QofBook * book = gnc_get_current_book ();
1292 int fraction = gtk_spin_button_get_value_as_int
1293 (GTK_SPIN_BUTTON(w->fraction_spinbutton));
1302 if (w->edit_commodity)
1305 quote_set = gtk_toggle_button_get_active
1306 (GTK_TOGGLE_BUTTON (w->get_quote_check));
1307 c = w->edit_commodity;
1308 gnc_commodity_begin_edit(c);
1312 selection = gtk_combo_box_get_active(GTK_COMBO_BOX(w->quote_tz_menu));
1313 string = gnc_timezone_menu_position_to_string(selection);
1321 gnc_commodity_commit_edit(c);
1324 gnc_warning_dialog(w->dialog,
"%s",
1325 _(
"You may not create a new national currency."));
1332 if (g_utf8_collate(name_space,
"template") == 0)
1334 gnc_warning_dialog (w->dialog,
1335 _(
"%s is a reserved commodity type."
1336 " Please use something else."),
"template");
1340 if (fullname && fullname[0] &&
1341 name_space && name_space[0] &&
1342 mnemonic && mnemonic[0])
1344 c = gnc_commodity_table_lookup (gnc_get_current_commodities(),
1345 name_space, mnemonic);
1347 if ((!w->edit_commodity && c) ||
1348 (w->edit_commodity && c && (c != w->edit_commodity)))
1350 gnc_warning_dialog (w->dialog,
"%s", _(
"That commodity already exists."));
1355 if (!w->edit_commodity)
1358 w->edit_commodity = c;
1359 gnc_commodity_begin_edit(c);
1363 c = w->edit_commodity;
1364 gnc_commodity_begin_edit(c);
1376 (GTK_TOGGLE_BUTTON (w->get_quote_check)));
1380 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->source_button[type])))
1383 selection = gtk_combo_box_get_active(GTK_COMBO_BOX(w->source_menu[type]));
1387 selection = gtk_combo_box_get_active(GTK_COMBO_BOX(w->quote_tz_menu));
1388 string = gnc_timezone_menu_position_to_string(selection);
1390 gnc_commodity_commit_edit(c);
1397 gnc_warning_dialog(w->dialog,
"%s",
1398 _(
"You must enter a non-empty \"Full name\", "
1399 "\"Symbol/abbreviation\", "
1400 "and \"Type\" for the commodity."));
gnc_commodity * gnc_commodity_table_insert(gnc_commodity_table *table, gnc_commodity *comm)
const char * gnc_commodity_get_cusip(const gnc_commodity *cm)
gnc_commodity_table * gnc_commodity_table_get_table(QofBook *book)
int gnc_commodity_get_fraction(const gnc_commodity *cm)
const char * gnc_quote_source_get_user_name(const gnc_quote_source *source)
const char * gnc_commodity_get_mnemonic(const gnc_commodity *cm)
utility functions for the GnuCash UI
gchar * gnc_ui_namespace_picker_ns(GtkWidget *cbwe)
gboolean gnc_commodity_get_quote_flag(const gnc_commodity *cm)
void gnc_ui_commodity_set_help_callback(gnc_commodity_help_callback cb)
void gnc_commodity_set_quote_tz(gnc_commodity *cm, const char *tz)
gnc_commodity * gnc_ui_new_commodity_modal(const char *default_namespace, GtkWidget *parent)
const char * gnc_commodity_get_quote_tz(const gnc_commodity *cm)
#define DEBUG(format, args...)
void gnc_commodity_set_fraction(gnc_commodity *cm, int fraction)
gboolean gnc_quote_source_get_supported(const gnc_quote_source *source)
gboolean gnc_ui_edit_commodity_modal(gnc_commodity *commodity, GtkWidget *parent)
QuoteSourceType gnc_quote_source_get_type(const gnc_quote_source *source)
const char * gnc_commodity_get_namespace(const gnc_commodity *cm)
gnc_commodity * gnc_ui_new_commodity_modal_full(const char *name_space, GtkWidget *parent, const char *cusip, const char *fullname, const char *mnemonic, const char *user_symbol, int fraction)
gnc_quote_source * gnc_quote_source_lookup_by_ti(QuoteSourceType type, gint index)
#define ENTER(format, args...)
void gnc_commodity_user_set_quote_flag(gnc_commodity *cm, const gboolean flag)
void gnc_commodity_set_user_symbol(gnc_commodity *cm, const char *user_symbol)
void gnc_commodity_set_quote_source(gnc_commodity *cm, gnc_quote_source *src)
gint gnc_quote_source_num_entries(QuoteSourceType type)
GList * gnc_commodity_table_get_namespaces(const gnc_commodity_table *table)
void gnc_ui_select_commodity_new_cb(GtkButton *button, gpointer user_data)
void gnc_commodity_set_cusip(gnc_commodity *cm, const char *cusip)
gnc_commodity * gnc_ui_select_commodity_modal_full(gnc_commodity *orig_sel, GtkWidget *parent, dialog_commodity_mode mode, const char *user_message, const char *cusip, const char *fullname, const char *mnemonic)
void gnc_ui_update_commodity_picker(GtkWidget *cbwe, const gchar *name_space, const gchar *init_string)
gnc_commodity * gnc_commodity_new(QofBook *book, const char *fullname, const char *name_space, const char *mnemonic, const char *cusip, int fraction)
gboolean gnc_commodity_namespace_is_iso(const char *name_space)
const char * gnc_commodity_get_fullname(const gnc_commodity *cm)
#define GNC_COMMODITY_NS_LEGACY
const char * gnc_commodity_get_nice_symbol(const gnc_commodity *cm)
void gnc_ui_select_commodity_changed_cb(GtkComboBox *cbwe, gpointer user_data)
gnc_commodity * gnc_ui_select_commodity_modal(gnc_commodity *orig_sel, GtkWidget *parent, dialog_commodity_mode mode)
void gnc_ui_select_commodity_namespace_changed_cb(GtkComboBox *cbwe, gpointer user_data)
All type declarations for the whole Gnucash engine.
CommodityList * gnc_commodity_table_get_commodities(const gnc_commodity_table *table, const char *name_space)
const char * gnc_commodity_get_printname(const gnc_commodity *cm)
void gnc_commodity_set_fullname(gnc_commodity *cm, const char *fullname)
gnc_quote_source * gnc_commodity_get_quote_source(const gnc_commodity *cm)
void gnc_commodity_set_mnemonic(gnc_commodity *cm, const char *mnemonic)
gint gnc_quote_source_get_index(const gnc_quote_source *source)
#define LEAVE(format, args...)
void gnc_commodity_table_remove(gnc_commodity_table *table, gnc_commodity *comm)
void gnc_commodity_set_namespace(gnc_commodity *cm, const char *name_space)
void gnc_ui_update_namespace_picker(GtkWidget *cbwe, const gchar *sel, dialog_commodity_mode mode)
"select" and "new" commodity windows
gboolean gnc_commodity_is_iso(const gnc_commodity *cm)
gboolean gnc_quote_source_fq_installed(void)
const gchar * QofLogModule