[gimp] app: allow hiding groups in the dashboard
- From: N/A <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: allow hiding groups in the dashboard
- Date: Mon, 2 Apr 2018 21:02:37 +0000 (UTC)
commit 4c041b2e8acb2f9edfa3e206d62e54831f15e3dc
Author: Ell <ell_se yahoo com>
Date: Mon Apr 2 16:24:09 2018 -0400
app: allow hiding groups in the dashboard
Add a "groups" submenu to the dashboard popup menu, which can be
used to control which groups are shown in the dashboard.
app/actions/dashboard-actions.c | 2 +
app/menus/menus.c | 4 +-
app/widgets/gimpdashboard.c | 192 +++++++++++++++++++++++++++++++++++----
app/widgets/gimpdashboard.h | 3 +
app/widgets/gimphelp-ids.h | 1 +
menus/dashboard-menu.xml | 7 +-
6 files changed, 188 insertions(+), 21 deletions(-)
---
diff --git a/app/actions/dashboard-actions.c b/app/actions/dashboard-actions.c
index 9ed2f4b..f62cee3 100644
--- a/app/actions/dashboard-actions.c
+++ b/app/actions/dashboard-actions.c
@@ -40,6 +40,8 @@ static const GimpActionEntry dashboard_actions[] =
NC_("dashboard-action", "Dashboard Menu"), NULL, NULL, NULL,
GIMP_HELP_DASHBOARD_DIALOG },
+ { "dashboard-groups", NULL,
+ NC_("dashboard-action", "Groups") },
{ "dashboard-update-interval", NULL,
NC_("dashboard-action", "Update Interval") },
{ "dashboard-history-duration", NULL,
diff --git a/app/menus/menus.c b/app/menus/menus.c
index 2c7ff98..0726bb8 100644
--- a/app/menus/menus.c
+++ b/app/menus/menus.c
@@ -30,6 +30,7 @@
#include "core/gimp.h"
#include "widgets/gimpactionfactory.h"
+#include "widgets/gimpdashboard.h"
#include "widgets/gimpmenufactory.h"
#include "dockable-menu.h"
@@ -392,8 +393,7 @@ menus_init (Gimp *gimp,
"dashboard",
NULL,
"/dashboard-popup",
- "dashboard-menu.xml",
- NULL,
+ "dashboard-menu.xml", gimp_dashboard_menu_setup,
NULL);
}
diff --git a/app/widgets/gimpdashboard.c b/app/widgets/gimpdashboard.c
index f0cbd49..77cfda4 100644
--- a/app/widgets/gimpdashboard.c
+++ b/app/widgets/gimpdashboard.c
@@ -42,12 +42,14 @@
#include "core/gimp.h"
+#include "gimpactiongroup.h"
#include "gimpdocked.h"
#include "gimpdashboard.h"
#include "gimpdialogfactory.h"
#include "gimphelp-ids.h"
#include "gimpmeter.h"
#include "gimpsessioninfo-aux.h"
+#include "gimpuimanager.h"
#include "gimpwidgets-utils.h"
#include "gimpwindowstrategy.h"
@@ -160,6 +162,7 @@ struct _GroupInfo
const gchar *name;
const gchar *title;
const gchar *description;
+ gboolean default_active;
gboolean default_expanded;
gboolean has_meter;
Variable meter_limit;
@@ -200,19 +203,21 @@ struct _FieldData
struct _GroupData
{
- gint n_fields;
- gint n_meter_values;
+ gint n_fields;
+ gint n_meter_values;
- gdouble limit;
+ gboolean active;
+ gdouble limit;
- GtkExpander *expander;
- GtkLabel *header_values_label;
- GtkButton *menu_button;
- GtkMenu *menu;
- GimpMeter *meter;
- GtkTable *table;
+ GtkToggleAction *action;
+ GtkExpander *expander;
+ GtkLabel *header_values_label;
+ GtkButton *menu_button;
+ GtkMenu *menu;
+ GimpMeter *meter;
+ GtkTable *table;
- FieldData *fields;
+ FieldData *fields;
};
struct _GimpDashboardPrivate
@@ -256,7 +261,9 @@ static gboolean gimp_dashboard_group_expander_button_press (GimpDashboard
GdkEventButton *bevent,
GtkWidget *widget);
-static void gimp_dashboard_group_menu_item_toggled (GimpDashboard *dashboard,
+static void gimp_dashboard_group_action_toggled (GimpDashboard *dashboard,
+ GtkToggleAction *action);
+static void gimp_dashboard_field_menu_item_toggled (GimpDashboard *dashboard,
GtkCheckMenuItem *item);
static gpointer gimp_dashboard_sample (GimpDashboard *dashboard);
@@ -302,6 +309,9 @@ static void gimp_dashboard_update_group (GimpDashboard
static void gimp_dashboard_update_group_values (GimpDashboard *dashboard,
Group group);
+static void gimp_dashboard_group_set_active (GimpDashboard *dashboard,
+ Group group,
+ gboolean active);
static void gimp_dashboard_field_set_active (GimpDashboard *dashboard,
Group group,
gint field,
@@ -459,6 +469,7 @@ static const GroupInfo groups[] =
{ .name = "cache",
.title = NC_("dashboard-group", "Cache"),
.description = N_("In-memory tile cache"),
+ .default_active = TRUE,
.default_expanded = TRUE,
.has_meter = TRUE,
.meter_limit = VARIABLE_CACHE_LIMIT,
@@ -495,6 +506,7 @@ static const GroupInfo groups[] =
{ .name = "swap",
.title = NC_("dashboard-group", "Swap"),
.description = N_("On-disk tile swap"),
+ .default_active = TRUE,
.default_expanded = TRUE,
.has_meter = TRUE,
.meter_limit = VARIABLE_SWAP_LIMIT,
@@ -524,6 +536,7 @@ static const GroupInfo groups[] =
{ .name = "cpu",
.title = NC_("dashboard-group", "CPU"),
.description = N_("CPU usage"),
+ .default_active = TRUE,
.default_expanded = FALSE,
.has_meter = TRUE,
.meter_led = VARIABLE_CPU_ACTIVE,
@@ -655,7 +668,6 @@ gimp_dashboard_init (GimpDashboard *dashboard)
group_info->default_expanded);
gtk_expander_set_label_fill (GTK_EXPANDER (expander), TRUE);
gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 0);
- gtk_widget_show (expander);
g_object_set_data (G_OBJECT (expander),
"gimp-dashboard-group", GINT_TO_POINTER (group));
@@ -736,7 +748,7 @@ gimp_dashboard_init (GimpDashboard *dashboard)
g_object_set_data (G_OBJECT (item),
"gimp-dashboard-field", GINT_TO_POINTER (field));
g_signal_connect_swapped (item, "toggled",
- G_CALLBACK (gimp_dashboard_group_menu_item_toggled),
+ G_CALLBACK (gimp_dashboard_field_menu_item_toggled),
dashboard);
gimp_dashboard_field_set_active (dashboard, group, field,
@@ -819,6 +831,8 @@ gimp_dashboard_init (GimpDashboard *dashboard)
gtk_box_pack_start (GTK_BOX (vbox2), table, FALSE, FALSE, 0);
gtk_widget_show (table);
+ gimp_dashboard_group_set_active (dashboard, group,
+ group_info->default_active);
gimp_dashboard_update_group (dashboard, group);
}
@@ -847,10 +861,46 @@ gimp_dashboard_docked_iface_init (GimpDockedInterface *iface)
static void
gimp_dashboard_constructed (GObject *object)
{
- GimpDashboard *dashboard = GIMP_DASHBOARD (object);
+ GimpDashboard *dashboard = GIMP_DASHBOARD (object);
+ GimpDashboardPrivate *priv = dashboard->priv;
+ GimpUIManager *ui_manager;
+ GimpActionGroup *action_group;
+ Group group;
G_OBJECT_CLASS (parent_class)->constructed (object);
+ ui_manager = gimp_editor_get_ui_manager (GIMP_EDITOR (dashboard));
+ action_group = gimp_ui_manager_get_action_group (ui_manager, "dashboard");
+
+ /* group actions */
+ for (group = FIRST_GROUP; group < N_GROUPS; group++)
+ {
+ const GroupInfo *group_info = &groups[group];
+ GroupData *group_data = &priv->groups[group];
+ GimpToggleActionEntry entry = {};
+ GtkAction *action;
+
+ entry.name = g_strdup_printf ("dashboard-group-%s", group_info->name);
+ entry.label = g_dpgettext2 (NULL, "dashboard-group", group_info->title);
+ entry.tooltip = g_dgettext (NULL, group_info->description);
+ entry.help_id = GIMP_HELP_DASHBOARD_GROUPS;
+ entry.is_active = group_data->active;
+
+ gimp_action_group_add_toggle_actions (action_group, "dashboard-groups",
+ &entry, 1);
+
+ action = gimp_ui_manager_find_action (ui_manager, "dashboard", entry.name);
+ group_data->action = GTK_TOGGLE_ACTION (action);
+
+ g_object_set_data (G_OBJECT (action),
+ "gimp-dashboard-group", GINT_TO_POINTER (group));
+ g_signal_connect_swapped (action, "toggled",
+ G_CALLBACK (gimp_dashboard_group_action_toggled),
+ dashboard);
+
+ g_free ((gpointer) entry.name);
+ }
+
gimp_editor_add_action_button (GIMP_EDITOR (dashboard), "dashboard",
"dashboard-reset", NULL);
}
@@ -991,6 +1041,20 @@ gimp_dashboard_set_aux_info (GimpDocked *docked,
const GroupInfo *group_info = &groups[group];
GroupData *group_data = &priv->groups[group];
+ name = g_strdup_printf ("%s-active", group_info->name);
+
+ if (! strcmp (aux->name, name))
+ {
+ gboolean active = ! strcmp (aux->value, "yes");
+
+ gimp_dashboard_group_set_active (dashboard, group, active);
+
+ g_free (name);
+ goto next_aux_info;
+ }
+
+ g_free (name);
+
name = g_strdup_printf ("%s-expanded", group_info->name);
if (! strcmp (aux->name, name))
@@ -1081,8 +1145,18 @@ gimp_dashboard_get_aux_info (GimpDocked *docked)
{
const GroupInfo *group_info = &groups[group];
GroupData *group_data = &priv->groups[group];
+ gboolean active = group_data->active;
gboolean expanded = gtk_expander_get_expanded (group_data->expander);
+ if (active != group_info->default_active)
+ {
+ name = g_strdup_printf ("%s-active", group_info->name);
+ value = active ? "yes" : "no";
+ aux = gimp_session_info_aux_new (name, value);
+ aux_info = g_list_append (aux_info, aux);
+ g_free (name);
+ }
+
if (expanded != group_info->default_expanded)
{
name = g_strdup_printf ("%s-expanded", group_info->name);
@@ -1161,7 +1235,24 @@ gimp_dashboard_group_expander_button_press (GimpDashboard *dashboard,
}
static void
-gimp_dashboard_group_menu_item_toggled (GimpDashboard *dashboard,
+gimp_dashboard_group_action_toggled (GimpDashboard *dashboard,
+ GtkToggleAction *action)
+{
+ GimpDashboardPrivate *priv = dashboard->priv;
+ Group group;
+ GroupData *group_data;
+
+ group = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (action),
+ "gimp-dashboard-group"));
+ group_data = &priv->groups[group];
+
+ group_data->active = gtk_toggle_action_get_active (action);
+
+ gimp_dashboard_update_group (dashboard, group);
+}
+
+static void
+gimp_dashboard_field_menu_item_toggled (GimpDashboard *dashboard,
GtkCheckMenuItem *item)
{
GimpDashboardPrivate *priv = dashboard->priv;
@@ -1806,6 +1897,12 @@ gimp_dashboard_update_group (GimpDashboard *dashboard,
gboolean add_separator;
gint field;
+ gtk_widget_set_visible (GTK_WIDGET (group_data->expander),
+ group_data->active);
+
+ if (! group_data->active)
+ return;
+
n_rows = 0;
add_separator = FALSE;
@@ -1949,6 +2046,9 @@ gimp_dashboard_update_group_values (GimpDashboard *dashboard,
GString *header_values;
gint field;
+ if (! group_data->active)
+ return;
+
if (group_info->has_meter)
{
if (group_info->meter_limit)
@@ -2039,6 +2139,33 @@ gimp_dashboard_update_group_values (GimpDashboard *dashboard,
}
static void
+gimp_dashboard_group_set_active (GimpDashboard *dashboard,
+ Group group,
+ gboolean active)
+{
+ GimpDashboardPrivate *priv = dashboard->priv;
+ GroupData *group_data = &priv->groups[group];
+
+ if (active != group_data->active)
+ {
+ group_data->active = active;
+
+ if (group_data->action)
+ {
+ g_signal_handlers_block_by_func (group_data->action,
+ gimp_dashboard_group_action_toggled,
+ dashboard);
+
+ gtk_toggle_action_set_active (group_data->action, active);
+
+ g_signal_handlers_unblock_by_func (group_data->action,
+ gimp_dashboard_group_action_toggled,
+ dashboard);
+ }
+ }
+}
+
+static void
gimp_dashboard_field_set_active (GimpDashboard *dashboard,
Group group,
gint field,
@@ -2053,13 +2180,13 @@ gimp_dashboard_field_set_active (GimpDashboard *dashboard,
field_data->active = active;
g_signal_handlers_block_by_func (field_data->menu_item,
- gimp_dashboard_group_menu_item_toggled,
+ gimp_dashboard_field_menu_item_toggled,
dashboard);
gtk_check_menu_item_set_active (field_data->menu_item, active);
g_signal_handlers_unblock_by_func (field_data->menu_item,
- gimp_dashboard_group_menu_item_toggled,
+ gimp_dashboard_field_menu_item_toggled,
dashboard);
}
}
@@ -2467,3 +2594,34 @@ gimp_dashboard_get_low_swap_space_warning (GimpDashboard *dashboard)
return dashboard->priv->low_swap_space_warning;
}
+
+void
+gimp_dashboard_menu_setup (GimpUIManager *manager,
+ const gchar *ui_path)
+{
+ guint merge_id;
+ Group group;
+
+ g_return_if_fail (GIMP_IS_UI_MANAGER (manager));
+ g_return_if_fail (ui_path != NULL);
+
+ merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (manager));
+
+ for (group = FIRST_GROUP; group < N_GROUPS; group++)
+ {
+ const GroupInfo *group_info = &groups[group];
+ gchar *action_name;
+ gchar *action_path;
+
+ action_name = g_strdup_printf ("dashboard-group-%s", group_info->name);
+ action_path = g_strdup_printf ("%s/Groups/Groups", ui_path);
+
+ gtk_ui_manager_add_ui (GTK_UI_MANAGER (manager), merge_id,
+ action_path, action_name, action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ g_free (action_name);
+ g_free (action_path);
+ }
+}
diff --git a/app/widgets/gimpdashboard.h b/app/widgets/gimpdashboard.h
index e8e9249..b0daffb 100644
--- a/app/widgets/gimpdashboard.h
+++ b/app/widgets/gimpdashboard.h
@@ -68,5 +68,8 @@ void gimp_dashboard_set_low_swap_space_warning (GimpDa
gboolean
low_swap_space_warning);
gboolean gimp_dashboard_get_low_swap_space_warning (GimpDashboard
*dashboard);
+void gimp_dashboard_menu_setup (GimpUIManager
*manager,
+ const gchar
*ui_path);
+
#endif /* __GIMP_DASHBOARD_H__ */
diff --git a/app/widgets/gimphelp-ids.h b/app/widgets/gimphelp-ids.h
index f58690d..b71df70 100644
--- a/app/widgets/gimphelp-ids.h
+++ b/app/widgets/gimphelp-ids.h
@@ -665,6 +665,7 @@
#define GIMP_HELP_SAMPLE_POINT_SAMPLE_MERGED "gimp-sample-point-sample-merged"
#define GIMP_HELP_DASHBOARD_DIALOG "gimp-dashboard-dialog"
+#define GIMP_HELP_DASHBOARD_GROUPS "gimp-dashboard-groups"
#define GIMP_HELP_DASHBOARD_UPDATE_INTERVAL "gimp-dashboard-update-interval"
#define GIMP_HELP_DASHBOARD_HISTORY_DURATION "gimp-dashboard-history-duration"
#define GIMP_HELP_DASHBOARD_RESET "gimp-dashboard-reset"
diff --git a/menus/dashboard-menu.xml b/menus/dashboard-menu.xml
index 30548a7..21064ef 100644
--- a/menus/dashboard-menu.xml
+++ b/menus/dashboard-menu.xml
@@ -3,14 +3,17 @@
<ui>
<popup action="dashboard-popup">
- <menu action="dashboard-update-interval">
+ <menu action="dashboard-groups" name="Groups">
+ <placeholder name="Groups" />
+ </menu>
+ <menu action="dashboard-update-interval" name="Update Interval">
<menuitem action="dashboard-update-interval-0-25-sec" />
<menuitem action="dashboard-update-interval-0-5-sec" />
<menuitem action="dashboard-update-interval-1-sec" />
<menuitem action="dashboard-update-interval-2-sec" />
<menuitem action="dashboard-update-interval-4-sec" />
</menu>
- <menu action="dashboard-history-duration">
+ <menu action="dashboard-history-duration" name="History Duration">
<menuitem action="dashboard-history-duration-15-sec" />
<menuitem action="dashboard-history-duration-30-sec" />
<menuitem action="dashboard-history-duration-60-sec" />
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]