From eadd8bd4aa844e2ce9b0866f99fd20eae5bf388e Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Sun, 1 Feb 2015 15:41:22 +0000 Subject: [PATCH] Bug 343227 Summary bar alignment patch. This patch aligns the text in the account summary bar so all text is inline. The bar is split into three and each part is aligned centraly and on the popup it is aligned to the left. --- src/gnome-utils/window-main-summarybar.c | 98 +++++++++++++++++++----- 1 file changed, 77 insertions(+), 21 deletions(-) diff --git a/src/gnome-utils/window-main-summarybar.c b/src/gnome-utils/window-main-summarybar.c index aae5b94470..5f367acc33 100644 --- a/src/gnome-utils/window-main-summarybar.c +++ b/src/gnome-utils/window-main-summarybar.c @@ -40,11 +40,12 @@ typedef struct { - GtkWidget * hbox; - GtkWidget * totals_combo; + GtkWidget *hbox; + GtkWidget *totals_combo; GtkListStore *datamodel; - int component_id; - int cnxn_id; + int component_id; + int cnxn_id; + gboolean combo_popped; } GNCMainSummary; #define WINDOW_SUMMARYBAR_CM_CLASS "summary-bar" @@ -318,7 +319,7 @@ enum COLUMN_ASSETS_VALUE, COLUMN_PROFITS, COLUMN_PROFITS_VALUE, - N_COLUMNS, + N_COLUMNS }; /* The gnc_main_window_summary_refresh() subroutine redraws summary @@ -342,8 +343,6 @@ 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; @@ -381,9 +380,6 @@ gnc_main_window_summary_refresh (GNCMainSummary * summary) { 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); @@ -399,12 +395,10 @@ gnc_main_window_summary_refresh (GNCMainSummary * summary) 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)); @@ -459,23 +453,75 @@ prefs_changed_cb (gpointer prefs, gchar *pref, gpointer user_data) gnc_main_window_summary_refresh(summary); } +static void +cdf (GtkCellLayout *cell_layout, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, + gpointer user_data) +{ + GNCMainSummary * summary = user_data; + gchar *type, *assets, *assets_val, *profits, *profits_val; + gint viewcol; + + viewcol = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), "view_column")); + + if (summary->combo_popped) + g_object_set (cell, "xalign", 0.0, NULL); + else + g_object_set (cell, "xalign", 0.5, NULL); + + gtk_tree_model_get (GTK_TREE_MODEL (tree_model), iter, + COLUMN_MNEMONIC_TYPE, &type, + COLUMN_ASSETS, &assets, + COLUMN_ASSETS_VALUE, &assets_val, + COLUMN_PROFITS, &profits, + COLUMN_PROFITS_VALUE, &profits_val, -1); + + if (viewcol == 0) + g_object_set (cell, "text", type, NULL); + + if (viewcol == 2) + { + gchar *a_string = g_strconcat (assets, " ", assets_val, NULL); + g_object_set (cell, "text", a_string, NULL); + g_free (a_string); + } + + if (viewcol == 4) + { + gchar *p_string = g_strconcat (profits, " ", profits_val, NULL); + g_object_set (cell, "text", p_string, NULL); + g_free (p_string); + } + + g_free (type); + g_free (assets); + g_free (assets_val); + g_free (profits); + g_free (profits_val); +} + +static void +summary_combo_popped (GObject *widget, GParamSpec *pspec, gpointer user_data) +{ + GNCMainSummary * summary = user_data; + if (summary->combo_popped) + summary->combo_popped = FALSE; + else + summary->combo_popped = TRUE; +} + GtkWidget * gnc_main_window_summary_new (void) { GNCMainSummary * retval = g_new0(GNCMainSummary, 1); GtkCellRenderer *textRenderer; int i; - // These options lead to a better looking layout for the combo-box, where - // the "Assets: $####.##" and "Profit: $####.##" values are visually next - // to each other. - gboolean expandOptions[] = { TRUE, FALSE, TRUE, FALSE, TRUE }; - retval->datamodel = gtk_list_store_new( N_COLUMNS, + retval->datamodel = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, - G_TYPE_STRING ); + G_TYPE_STRING); retval->hbox = gtk_hbox_new (FALSE, 5); retval->totals_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (retval->datamodel)); @@ -489,11 +535,21 @@ gnc_main_window_summary_new (void) QOF_EVENT_DESTROY | GNC_EVENT_ITEM_CHANGED); - for ( i = 0; i < N_COLUMNS; i++ ) + // Allows you to get when the popup menu is present + g_signal_connect (retval->totals_combo, "notify::popup-shown",G_CALLBACK (summary_combo_popped), retval); + + retval->combo_popped = FALSE; + + for (i = 0; i <= N_COLUMNS; i += 2) { textRenderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new()); - gtk_cell_layout_pack_start( GTK_CELL_LAYOUT(retval->totals_combo), textRenderer, expandOptions[i] ); - gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(retval->totals_combo), textRenderer, "text", i ); + + gtk_cell_renderer_set_fixed_size (textRenderer, 50, -1); + + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT(retval->totals_combo), textRenderer, TRUE); + + g_object_set_data (G_OBJECT(textRenderer), "view_column", GINT_TO_POINTER (i)); + gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT(retval->totals_combo), textRenderer, cdf, retval, NULL); } gtk_container_set_border_width (GTK_CONTAINER (retval->hbox), 2);