From 027b336314e0ec99009ddf759a1e9de2c6be15ae Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Thu, 6 Jun 2019 10:31:09 +0200 Subject: [PATCH] Added menu items to show/hide all columns. The GdaExGrdiColumn::set_visible wasn't linked to menu item status. --- po/it.po | 20 +++++++++----- src/grid.c | 70 +++++++++++++++++++++++++++++++++++++++++++++--- src/gridcolumn.c | 10 ++++++- 3 files changed, 90 insertions(+), 10 deletions(-) diff --git a/po/it.po b/po/it.po index c125625..2edd6a3 100644 --- a/po/it.po +++ b/po/it.po @@ -1,13 +1,13 @@ # libgdaexgrid italian translation -# Copyright (C) 2015-2016 Andrea Zagli +# Copyright (C) 2015-2019 Andrea Zagli # This file is distributed under the same license as the libgdaexgrid package. -# Andrea Zagli , 2015-2016. +# Andrea Zagli , 2015-2019. # msgid "" msgstr "" "Project-Id-Version: libgdaexgrid 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-01-02 15:59+0100\n" +"POT-Creation-Date: 2019-06-06 10:11+0200\n" "PO-Revision-Date: 2016-01-02 12:44+0200\n" "Last-Translator: Andrea Zagli \n" "Language-Team: Italian \n" @@ -17,14 +17,22 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../src/grid.c:712 +#: ../src/grid.c:1098 msgid "_Columns" msgstr "_Colonne" -#: ../src/grid.c:786 +#: ../src/grid.c:1106 +msgid "_Show all" +msgstr "_Mostra tutte" + +#: ../src/grid.c:1114 +msgid "_Hide all" +msgstr "_Nascondi tutte" + +#: ../src/grid.c:1192 msgid "_Print..." msgstr "_Stampa..." -#: ../src/grid.c:795 +#: ../src/grid.c:1201 msgid "_Export..." msgstr "_Esporta..." diff --git a/src/grid.c b/src/grid.c index 4be7d1e..bbb957d 100644 --- a/src/grid.c +++ b/src/grid.c @@ -1,7 +1,7 @@ /* * grid.c * - * Copyright (C) 2010-2017 Andrea Zagli + * Copyright (C) 2010-2019 Andrea Zagli * * This file is part of libgdaexgrid. * @@ -75,6 +75,10 @@ static gboolean gdaex_grid_on_button_press_event (GtkWidget *widget, gpointer user_data); static gboolean gdaex_grid_on_popup_menu (GtkWidget *widget, gpointer user_data); +static void gdaex_grid_on_menu_item_showall_activate (GtkMenuItem *menuitem, + gpointer user_data); +static void gdaex_grid_on_menu_item_hideall_activate (GtkMenuItem *menuitem, + gpointer user_data); static void gdaex_grid_on_menu_item_toggled (GtkCheckMenuItem *checkmenuitem, gpointer user_data); @@ -1065,6 +1069,7 @@ static GtkTreeView guint col; guint cols_sorted; + gulong hid; GtkWidget *mitem; GtkWidget *submitem; @@ -1099,6 +1104,26 @@ static GtkTreeView gtk_menu_item_set_submenu (GTK_MENU_ITEM (mitem), submitem); gtk_widget_show (submitem); + mitem = gtk_menu_item_new_with_mnemonic (_("_Show all")); + + g_signal_connect (G_OBJECT (mitem), "activate", + G_CALLBACK (gdaex_grid_on_menu_item_showall_activate), (gpointer)grid); + + gtk_menu_shell_append (GTK_MENU_SHELL (submitem), mitem); + gtk_widget_show (mitem); + + mitem = gtk_menu_item_new_with_mnemonic (_("_Hide all")); + + g_signal_connect (G_OBJECT (mitem), "activate", + G_CALLBACK (gdaex_grid_on_menu_item_hideall_activate), (gpointer)grid); + + gtk_menu_shell_append (GTK_MENU_SHELL (submitem), mitem); + gtk_widget_show (mitem); + + mitem = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (submitem), mitem); + gtk_widget_show (mitem); + cols_sorted = 0; for (col = 0; col < priv->columns->len; col++) { @@ -1146,11 +1171,14 @@ static GtkTreeView g_object_set_data (G_OBJECT (mitem), "GdaExGridColumn", gcolumn); - g_signal_connect (G_OBJECT (mitem), "toggled", - G_CALLBACK (gdaex_grid_on_menu_item_toggled), (gpointer)grid); + hid = g_signal_connect (G_OBJECT (mitem), "toggled", + G_CALLBACK (gdaex_grid_on_menu_item_toggled), (gpointer)grid); gtk_menu_shell_append (GTK_MENU_SHELL (submitem), mitem); gtk_widget_show (mitem); + + g_object_set_data (G_OBJECT (gcolumn), "menuitem", mitem); + g_object_set_data (G_OBJECT (gcolumn), "menuitem_handler_id", GINT_TO_POINTER (hid)); } } @@ -1356,6 +1384,42 @@ gdaex_grid_on_popup_menu (GtkWidget *widget, return TRUE; } +static void +gdaex_grid_on_menu_item_showall_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + GdaExGridPrivate *priv; + + guint col; + GdaExGridColumn *gcolumn; + + priv = GDAEX_GRID_GET_PRIVATE (user_data); + + for (col = 0; col < priv->columns->len; col++) + { + gcolumn = (GdaExGridColumn *)g_ptr_array_index (priv->columns, col); + gdaex_grid_column_set_visible (gcolumn, TRUE); + } +} + +static void +gdaex_grid_on_menu_item_hideall_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + GdaExGridPrivate *priv; + + guint col; + GdaExGridColumn *gcolumn; + + priv = GDAEX_GRID_GET_PRIVATE (user_data); + + for (col = 0; col < priv->columns->len; col++) + { + gcolumn = (GdaExGridColumn *)g_ptr_array_index (priv->columns, col); + gdaex_grid_column_set_visible (gcolumn, FALSE); + } +} + static void gdaex_grid_on_menu_item_toggled (GtkCheckMenuItem *checkmenuitem, gpointer user_data) diff --git a/src/gridcolumn.c b/src/gridcolumn.c index 3024673..3786d07 100644 --- a/src/gridcolumn.c +++ b/src/gridcolumn.c @@ -1,7 +1,7 @@ /* * gridcolumn.c * - * Copyright (C) 2010-2017 Andrea Zagli + * Copyright (C) 2010-2019 Andrea Zagli * * This file is part of libgdaexgrid. * @@ -270,6 +270,14 @@ gdaex_grid_column_set_visible (GdaExGridColumn *column, gboolean visible) if (priv->vcolumn != NULL) { gtk_tree_view_column_set_visible (priv->vcolumn, priv->visible); + + /* update the menuitem status */ + g_signal_handler_block (g_object_get_data (G_OBJECT (column), "menuitem"), + GPOINTER_TO_INT (g_object_get_data (G_OBJECT (column), "menuitem_handler_id"))); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (g_object_get_data (G_OBJECT (column), "menuitem")), + priv->visible); + g_signal_handler_unblock (g_object_get_data (G_OBJECT (column), "menuitem"), + GPOINTER_TO_INT (g_object_get_data (G_OBJECT (column), "menuitem_handler_id"))); } } -- 2.49.0