static void gnc_currency_edit_mnemonic_changed (GObject *gobject, GParamSpec *pspec, gpointer user_data) { GNCCurrencyEdit *self = GNC_CURRENCY_EDIT (gobject); GNCCurrencyEditPrivate *priv = GET_PRIVATE (self); gnc_commodity *currency = gnc_commodity_table_lookup (gnc_get_current_commodities (), GNC_COMMODITY_NS_CURRENCY, priv->mnemonic); /* If there isn't any such commodity, get the default */ if (!currency) { currency = gnc_locale_default_currency(); DEBUG("gce %p, default currency mnemonic %s", self, gnc_commodity_get_mnemonic(currency)); } g_signal_handlers_block_by_func(G_OBJECT(self), G_CALLBACK(gnc_currency_edit_mnemonic_changed), user_data); gnc_currency_edit_set_currency(self, currency); g_signal_handlers_unblock_by_func(G_OBJECT(self), G_CALLBACK(gnc_currency_edit_mnemonic_changed), user_data); }
/* Retrieve the displayed currency of the widget. * * @param gce The currency editor widget whose values should be retrieved. * * @return A pointer to the selected currency (a gnc_commodity * structure). */ gnc_commodity * gnc_currency_edit_get_currency (GNCCurrencyEdit *gce) { gnc_commodity *commodity; const char *fullname; char *mnemonic, *name; GtkTreeModel *model; GtkTreeIter iter; GValue value = { 0 }; g_return_val_if_fail(gce != NULL, NULL); g_return_val_if_fail(GNC_IS_CURRENCY_EDIT(gce), NULL); if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(gce), &iter)) { model = gtk_combo_box_get_model(GTK_COMBO_BOX(gce)); gtk_tree_model_get_value(model, &iter, 0, &value); fullname = g_value_get_string(&value); mnemonic = g_strdup(fullname); g_value_unset(&value); name = strchr(mnemonic, ' '); if (name != NULL) *name = '\0'; commodity = gnc_commodity_table_lookup (gnc_get_current_commodities (), GNC_COMMODITY_NS_CURRENCY, mnemonic); g_free(mnemonic); } else { g_warning("Combo box returned 'inactive'. Using locale default currency."); commodity = gnc_locale_default_currency(); } return commodity; }
/** Create the preferences dialog. This function first reads the * dialog-preferences.glade file to obtain the content and then * the dialog is created with a set of common preferences. It then * runs the list of add-ins, calling a helper function to add each full/partial * page to this dialog, Finally it builds the "interesting widgets" * table that is used for connecting the widgets up to callback functions. * * @internal * * @return A pointer to the newly created dialog. */ static GtkWidget * gnc_preferences_dialog_create(void) { GtkBuilder *builder; GtkWidget *dialog, *notebook, *label, *image; GtkWidget *box, *date, *period, *currency; GHashTable *prefs_table; GDate* gdate = NULL; gchar buf[128]; GtkListStore *store; GtkTreePath *path; GtkTreeIter iter; gnc_commodity *locale_currency; const gchar *currency_name; QofBook *book; KvpFrame *book_frame; gint64 month, day; GDate fy_end; gboolean date_is_valid = FALSE; ENTER(""); DEBUG("Opening dialog-preferences.glade:"); builder = gtk_builder_new(); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "auto_decimal_places_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "autosave_interval_minutes_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "save_on_close_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "date_backmonth_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "max_transactions_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "key_length_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "new_search_limit_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "retain_days_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "tab_width_adj"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "date_formats"); gnc_builder_add_from_file (builder, "dialog-preferences.glade", "GnuCash Preferences"); dialog = GTK_WIDGET(gtk_builder_get_object (builder, "GnuCash Preferences")); #ifndef REGISTER2_ENABLED /* Hide preferences that are related to register2 */ box = GTK_WIDGET (gtk_builder_get_object (builder, "label14")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/key-length")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/show-extra-dates")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/show-calendar-buttons")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/selection-to-blank-on-expand")); gtk_widget_hide (box); box = GTK_WIDGET (gtk_builder_get_object (builder, "pref/general.register/show-extra-dates-on-selection")); gtk_widget_hide (box); #endif label = GTK_WIDGET(gtk_builder_get_object (builder, "sample_account")); g_object_set_data(G_OBJECT(dialog), "sample_account", label); image = GTK_WIDGET(gtk_builder_get_object (builder, "separator_error")); g_object_set_data(G_OBJECT(dialog), "separator_error", image); DEBUG("autoconnect"); gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dialog); DEBUG("done"); notebook = GTK_WIDGET(gtk_builder_get_object (builder, "notebook1")); prefs_table = g_hash_table_new(g_str_hash, g_str_equal); g_object_set_data(G_OBJECT(dialog), NOTEBOOK, notebook); g_object_set_data_full(G_OBJECT(dialog), PREFS_WIDGET_HASH, prefs_table, (GDestroyNotify)g_hash_table_destroy); book = gnc_get_current_book(); g_date_clear (&fy_end, 1); qof_instance_get (QOF_INSTANCE (book), "fy-end", &fy_end, NULL); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_START_PERIOD)); period = gnc_period_select_new(TRUE); gtk_widget_show (period); gtk_box_pack_start (GTK_BOX (box), period, TRUE, TRUE, 0); if (date_is_valid) gnc_period_select_set_fy_end(GNC_PERIOD_SELECT (period), &fy_end); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_END_PERIOD)); period = gnc_period_select_new(FALSE); gtk_widget_show (period); gtk_box_pack_start (GTK_BOX (box), period, TRUE, TRUE, 0); if (date_is_valid) gnc_period_select_set_fy_end(GNC_PERIOD_SELECT (period), &fy_end); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_START_DATE)); date = gnc_date_edit_new(gnc_time (NULL), FALSE, FALSE); gtk_widget_show (date); gtk_box_pack_start (GTK_BOX (box), date, TRUE, TRUE, 0); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_ACCT_SUMMARY "/" GNC_PREF_END_DATE)); date = gnc_date_edit_new(gnc_time (NULL), FALSE, FALSE); gtk_widget_show (date); gtk_box_pack_start (GTK_BOX (box), date, TRUE, TRUE, 0); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_GENERAL "/" GNC_PREF_CURRENCY_OTHER)); currency = gnc_currency_edit_new(); gnc_currency_edit_set_currency (GNC_CURRENCY_EDIT(currency), gnc_default_currency()); gtk_widget_show (currency); gtk_box_pack_start(GTK_BOX (box), currency, TRUE, TRUE, 0); box = GTK_WIDGET(gtk_builder_get_object (builder, "pref/" GNC_PREFS_GROUP_GENERAL_REPORT "/" GNC_PREF_CURRENCY_OTHER)); currency = gnc_currency_edit_new(); gnc_currency_edit_set_currency (GNC_CURRENCY_EDIT(currency), gnc_default_currency()); gtk_widget_show (currency); gtk_box_pack_start(GTK_BOX (box), currency, TRUE, TRUE, 0); /* Add to the list of interesting widgets */ gnc_prefs_build_widget_table(builder, dialog); g_slist_foreach(add_ins, gnc_preferences_build_page, dialog); /* Sort tabs alphabetically */ gnc_prefs_sort_pages(GTK_NOTEBOOK(notebook)); gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0); DEBUG("We have the following interesting widgets:"); g_hash_table_foreach(prefs_table, (GHFunc)gnc_prefs_connect_one, dialog); DEBUG("Done with interesting widgets."); /* Other stuff */ gdate = g_date_new_dmy(31, G_DATE_JULY, 2013); g_date_strftime(buf, sizeof(buf), "%x", gdate); store = GTK_LIST_STORE(gtk_builder_get_object (builder, "date_formats")); path = gtk_tree_path_new_from_indices (QOF_DATE_FORMAT_LOCALE, -1); if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path)) gtk_list_store_set (store, &iter, 1, buf, -1); g_date_free(gdate); locale_currency = gnc_locale_default_currency (); currency_name = gnc_commodity_get_printname(locale_currency); label = GTK_WIDGET(gtk_builder_get_object (builder, "locale_currency")); gtk_label_set_label(GTK_LABEL(label), currency_name); label = GTK_WIDGET(gtk_builder_get_object (builder, "locale_currency2")); gtk_label_set_label(GTK_LABEL(label), currency_name); g_object_unref(G_OBJECT(builder)); LEAVE("dialog %p", dialog); return dialog; }
static void gnc_main_window_summary_refresh (GNCMainSummary * summary) { Account *root; char asset_string[256]; char profit_string[256]; GNCCurrencyAcc *currency_accum; GList *currency_list; GList *current; GNCSummarybarOptions options; root = gnc_get_current_root_account (); options.default_currency = xaccAccountGetCommodity(root); if(options.default_currency == NULL) { options.default_currency = gnc_default_currency (); } options.euro = gnc_gconf_get_bool(GCONF_GENERAL, KEY_ENABLE_EURO, NULL); options.grand_total = gnc_gconf_get_bool(GCONF_SECTION, KEY_GRAND_TOTAL, NULL); options.non_currency = gnc_gconf_get_bool(GCONF_SECTION, KEY_NON_CURRENCY, NULL); options.start_date = gnc_accounting_period_fiscal_start(); options.end_date = gnc_accounting_period_fiscal_end(); currency_list = NULL; /* grand total should be first in the list */ if (options.grand_total) { gnc_ui_get_currency_accumulator (¤cy_list, options.default_currency, TOTAL_GRAND_TOTAL); } /* Make sure there's at least one accumulator in the list. */ gnc_ui_get_currency_accumulator (¤cy_list, options.default_currency, TOTAL_SINGLE); gnc_ui_accounts_recurse(root, ¤cy_list, options); { GtkTreeIter iter; char asset_amount_string[256], profit_amount_string[256]; struct lconv *lc; lc = gnc_localeconv(); g_object_ref(summary->datamodel); gtk_combo_box_set_model(GTK_COMBO_BOX(summary->totals_combo), NULL); gtk_list_store_clear(summary->datamodel); for (current = g_list_first(currency_list); current; current = g_list_next(current)) { const char *mnemonic; gchar *total_mode_label; currency_accum = current->data; if (gnc_commodity_equiv (currency_accum->currency, gnc_locale_default_currency ())) mnemonic = lc->currency_symbol; else mnemonic = gnc_commodity_get_mnemonic (currency_accum->currency); if (mnemonic == NULL) mnemonic = ""; *asset_string = '\0'; xaccSPrintAmount(asset_amount_string, currency_accum->assets, gnc_commodity_print_info(currency_accum->currency, TRUE)); *profit_string = '\0'; xaccSPrintAmount(profit_amount_string, currency_accum->profits, gnc_commodity_print_info(currency_accum->currency, TRUE)); gtk_list_store_append(summary->datamodel, &iter); total_mode_label = get_total_mode_label(mnemonic, currency_accum->total_mode); gtk_list_store_set(summary->datamodel, &iter, COLUMN_MNEMONIC_TYPE, total_mode_label, COLUMN_ASSETS, _("Net Assets:"), COLUMN_ASSETS_VALUE, asset_amount_string, COLUMN_PROFITS, _("Profits:"), COLUMN_PROFITS_VALUE, profit_amount_string, -1); g_free(total_mode_label); } gtk_combo_box_set_model(GTK_COMBO_BOX(summary->totals_combo), GTK_TREE_MODEL(summary->datamodel)); g_object_unref(summary->datamodel); gtk_combo_box_set_active(GTK_COMBO_BOX(summary->totals_combo), 0); } /* Free the list we created for this */ for (current = g_list_first(currency_list); current; current = g_list_next(current)) { g_free(current->data); } g_list_free(currency_list); }