diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-03-09 18:04:49 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-03-09 18:04:49 (GMT) |
commit | dc8a2b19dbb32bfe49b1ff6640cc609238b392ca (patch) | |
tree | 2103c99baeb3b792bc82fc3db28bd16ecf72b70e /src/gui/panels | |
parent | f8f804cf7ff9a62404b843cf303c762101572784 (diff) |
Stored and loaded panels attributes using the global configuration.
Diffstat (limited to 'src/gui/panels')
-rw-r--r-- | src/gui/panels/bookmarks.c | 3 | ||||
-rw-r--r-- | src/gui/panels/glance.c | 4 | ||||
-rw-r--r-- | src/gui/panels/history.c | 4 | ||||
-rw-r--r-- | src/gui/panels/log.c | 3 | ||||
-rw-r--r-- | src/gui/panels/panel-int.h | 3 | ||||
-rw-r--r-- | src/gui/panels/panel.c | 147 | ||||
-rw-r--r-- | src/gui/panels/panel.h | 9 | ||||
-rw-r--r-- | src/gui/panels/regedit.c | 3 | ||||
-rw-r--r-- | src/gui/panels/strings.c | 4 | ||||
-rw-r--r-- | src/gui/panels/symbols.c | 3 |
10 files changed, 168 insertions, 15 deletions
diff --git a/src/gui/panels/bookmarks.c b/src/gui/panels/bookmarks.c index 87789b6..222176a 100644 --- a/src/gui/panels/bookmarks.c +++ b/src/gui/panels/bookmarks.c @@ -255,7 +255,8 @@ static void g_bookmarks_panel_init(GBookmarksPanel *panel) pitem->personality = PIP_SINGLETON; pitem->lname = _("Bookmarks"); - pitem->path = "SE"; + pitem->dock_at_startup = false; + pitem->path = strdup("SE"); /* Représentation graphique */ diff --git a/src/gui/panels/glance.c b/src/gui/panels/glance.c index 1dab8b4..c473116 100644 --- a/src/gui/panels/glance.c +++ b/src/gui/panels/glance.c @@ -25,6 +25,7 @@ #include "glance.h" +#include <string.h> #include <gtk/gtk.h> @@ -186,7 +187,8 @@ static void g_glance_panel_init(GGlancePanel *panel) pitem->personality = PIP_SINGLETON; pitem->lname = _("Glance"); - pitem->path = "es"; + pitem->dock_at_startup = true; + pitem->path = strdup("es"); /* Support de dessin */ diff --git a/src/gui/panels/history.c b/src/gui/panels/history.c index 526a775..15574be 100644 --- a/src/gui/panels/history.c +++ b/src/gui/panels/history.c @@ -25,6 +25,7 @@ #include "history.h" +#include <string.h> #include <cairo-gobject.h> @@ -176,7 +177,8 @@ static void g_history_panel_init(GHistoryPanel *panel) pitem->personality = PIP_SINGLETON; pitem->lname = _("Change history"); - pitem->path = "eN"; + pitem->dock_at_startup = true; + pitem->path = strdup("eN"); /* Représentation graphique */ diff --git a/src/gui/panels/log.c b/src/gui/panels/log.c index 1b8c6bc..da35c8f 100644 --- a/src/gui/panels/log.c +++ b/src/gui/panels/log.c @@ -168,7 +168,8 @@ static void g_log_panel_init(GLogPanel *panel) pitem->personality = PIP_SINGLETON; pitem->lname = _("Misc information"); - pitem->path = "S"; + pitem->dock_at_startup = true; + pitem->path = strdup("S"); /* Représentation graphique */ diff --git a/src/gui/panels/panel-int.h b/src/gui/panels/panel-int.h index 5e906f0..7e44275 100644 --- a/src/gui/panels/panel-int.h +++ b/src/gui/panels/panel-int.h @@ -48,7 +48,8 @@ struct _GPanelItem const char *lname; /* Description longue */ - const char *path; /* Chemin vers la place idéale */ + bool dock_at_startup; /* Recommandation au démarrage */ + char *path; /* Chemin vers la place idéale */ bool docked; /* Panneau inscrusté ? */ diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c index 00a4eea..71fa155 100644 --- a/src/gui/panels/panel.c +++ b/src/gui/panels/panel.c @@ -26,9 +26,11 @@ #include <assert.h> +#include <stdio.h> #include "panel-int.h" +#include "../../common/extstr.h" #include "../../gtkext/gtkdockable-int.h" @@ -51,6 +53,9 @@ static const char *gtk_panel_item_get_desc(const GPanelItem *); /* Fournit le composant graphique intégrable dans un ensemble. */ static GtkWidget *gtk_panel_item_get_widget(GPanelItem *); +/* Construit la chaîne d'accès à un élément de configuration. */ +static char *gtk_panel_item_build_configuration_key(const GPanelItem *, const char *); + /* Indique le type défini pour un élément destiné à un panneau. */ @@ -140,10 +145,11 @@ static void g_panel_item_dockable_interface_init(GtkDockableInterface *iface) /****************************************************************************** * * * Paramètres : personality = nature du panneau à mettre en place. * -* name = nom associé à l'élément. * -* lname = description longue du panneau. * -* widget = composant à présenter à l'affichage. * -* path = chemin vers la place idéale pour le futur panneau. * +* name = nom associé à l'élément. * +* lname = description longue du panneau. * +* widget = composant à présenter à l'affichage. * +* startup = chargement au démarrage ? * +* path = chemin vers la place idéale pour le futur panneau. * * * * Description : Crée un élément de panneau réactif. * * * @@ -153,7 +159,7 @@ static void g_panel_item_dockable_interface_init(GtkDockableInterface *iface) * * ******************************************************************************/ -GPanelItem *g_panel_item_new(PanelItemPersonality personality, const char *name, const char *lname, GtkWidget *widget, const char *path) +GPanelItem *g_panel_item_new(PanelItemPersonality personality, const char *name, const char *lname, GtkWidget *widget, bool startup, const char *path) { GPanelItem *result; /* Structure à retourner */ GEditorItem *parent; /* Autre version de l'élément */ @@ -170,7 +176,8 @@ GPanelItem *g_panel_item_new(PanelItemPersonality personality, const char *name, result->lname = lname; - result->path = path; + result->dock_at_startup = startup; + result->path = strdup(path); return result; @@ -236,6 +243,134 @@ static GtkWidget *gtk_panel_item_get_widget(GPanelItem *item) /****************************************************************************** * * +* Paramètres : item = instance GTK à consulter. * +* attrib = élément de configuration à inclure dans le résultat.* +* * +* Description : Construit la chaîne d'accès à un élément de configuration. * +* * +* Retour : Chaîne de caractères à libérer après usage. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static char *gtk_panel_item_build_configuration_key(const GPanelItem *item, const char *attrib) +{ + char *result; /* Construction à renvoyer */ + const char *name; /* Nom court du panneau */ + + name = g_editor_item_get_name(G_EDITOR_ITEM(item)); + + asprintf(&result, "gui.panels.%s.%s", name, attrib); + + result = strrpl(result, " ", "_"); + + result = strlower(result); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : item = instance GTK à consulter. * +* config = configuration à compléter. * +* * +* Description : Met en place les bases de la configuration du panneau. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool gtk_panel_item_setup_configuration(const GPanelItem *item, GGenConfig *config) +{ + bool result; /* Bilan à retourner */ + char *key; /* Clef d'accès à un paramètre */ + GCfgParam *param; /* Paramètre chargé */ + + result = true; + + key = gtk_panel_item_build_configuration_key(item, "dock_at_startup"); + + param = g_generic_config_create_param(config, key, CPT_BOOLEAN, item->dock_at_startup); + + if (param == NULL) + { + result = false; + goto gpisc_exit; + } + + free(key); + + key = gtk_panel_item_build_configuration_key(item, "path"); + + param = g_generic_config_create_param(config, key, CPT_STRING, item->path); + if (param == NULL) + result = false; + + gpisc_exit: + + free(key); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : item = instance GTK à consulter. * +* config = configuration à charger. * +* * +* Description : Charge un panneau sur les bases de la configuration fournie. * +* * +* Retour : true, par conformité avec browse_all_item_panels(). * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool gtk_panel_item_apply_configuration(GPanelItem *item, GGenConfig *config) +{ + char *key; /* Clef d'accès à un paramètre */ + const char *new_path; /* Nouveau chemin de placement */ + bool status; /* Statut de l'encapsulation */ + + key = gtk_panel_item_build_configuration_key(item, "path"); + + if (g_generic_config_get_value(config, key, &new_path)) + { + free(item->path); + + item->path = strdup(new_path); + + } + + free(key); + + key = gtk_panel_item_build_configuration_key(item, "dock_at_startup"); + + if (g_generic_config_get_value(config, key, &status)) + { + item->dock_at_startup = status; + + if (item->dock_at_startup) + g_signal_emit_by_name(item, "dock-request"); + + } + + free(key); + + return true; + +} + + +/****************************************************************************** +* * * Paramètres : item = instance GTK à consulter. * * * * Description : Fournit une indication sur la personnalité du panneau. * diff --git a/src/gui/panels/panel.h b/src/gui/panels/panel.h index bb46c5a..cbe9030 100644 --- a/src/gui/panels/panel.h +++ b/src/gui/panels/panel.h @@ -30,6 +30,7 @@ #include "../editem.h" +#include "../../glibext/configuration.h" @@ -66,7 +67,13 @@ typedef enum _PanelItemPersonality GType g_panel_item_get_type(void); /* Crée un élément de panneau réactif. */ -GPanelItem *g_panel_item_new(PanelItemPersonality, const char *, const char *, GtkWidget *, const char *); +GPanelItem *g_panel_item_new(PanelItemPersonality, const char *, const char *, GtkWidget *, bool, const char *); + +/* Met en place les bases de la configuration du panneau. */ +bool gtk_panel_item_setup_configuration(const GPanelItem *, GGenConfig *); + +/* Charge un panneau sur les bases de la configuration fournie. */ +bool gtk_panel_item_apply_configuration(GPanelItem *, GGenConfig *); /* Fournit une indication sur la personnalité du panneau. */ PanelItemPersonality gtk_panel_item_get_personality(const GPanelItem *); diff --git a/src/gui/panels/regedit.c b/src/gui/panels/regedit.c index a62f824..5e224ec 100644 --- a/src/gui/panels/regedit.c +++ b/src/gui/panels/regedit.c @@ -225,7 +225,8 @@ static void g_regedit_panel_init(GRegeditPanel *panel) pitem->personality = PIP_SINGLETON; pitem->lname = _("Configuration parameters"); - pitem->path = "N"; + pitem->dock_at_startup = true; + pitem->path = strdup("N"); /* Représentation graphique */ diff --git a/src/gui/panels/strings.c b/src/gui/panels/strings.c index 0c39b4b..ae436cf 100644 --- a/src/gui/panels/strings.c +++ b/src/gui/panels/strings.c @@ -25,6 +25,7 @@ #include "strings.h" +#include <string.h> #include <inttypes.h> @@ -233,7 +234,8 @@ static void g_strings_panel_init(GStringsPanel *panel) pitem->personality = PIP_SINGLETON; pitem->lname = _("Strings"); - pitem->path = "SE"; + pitem->dock_at_startup = false; + pitem->path = strdup("N"); /* Représentation graphique */ diff --git a/src/gui/panels/symbols.c b/src/gui/panels/symbols.c index 1b7453b..422c9b4 100644 --- a/src/gui/panels/symbols.c +++ b/src/gui/panels/symbols.c @@ -259,7 +259,8 @@ static void g_symbols_panel_init(GSymbolsPanel *panel) pitem->personality = PIP_SINGLETON; pitem->lname = _("Binary symbols"); - pitem->path = "eN"; + pitem->dock_at_startup = true; + pitem->path = strdup("eN"); /* Représentation graphique */ |