summaryrefslogtreecommitdiff
path: root/src/gui/panels/strings.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/panels/strings.c')
-rw-r--r--src/gui/panels/strings.c82
1 files changed, 64 insertions, 18 deletions
diff --git a/src/gui/panels/strings.c b/src/gui/panels/strings.c
index 2eee482..aee5231 100644
--- a/src/gui/panels/strings.c
+++ b/src/gui/panels/strings.c
@@ -45,6 +45,7 @@
#include "../../gtkext/easygtk.h"
#include "../../gtkext/gtkdisplaypanel.h"
#include "../../gtkext/gtkdockable-int.h"
+#include "../../gtkext/named.h"
#include "../../gtkext/tmgt.h"
@@ -111,6 +112,9 @@ static void g_strings_panel_dispose(GStringsPanel *);
/* Procède à la libération totale de la mémoire. */
static void g_strings_panel_finalize(GStringsPanel *);
+/* Fournit le nom interne attribué à l'élément réactif. */
+static char *g_strings_panel_get_key(const GStringsPanel *);
+
/* Réagit au changement de sélection des chaînes textuelles. */
static void on_strings_selection_change(GtkTreeSelection *, gpointer);
@@ -242,7 +246,7 @@ G_DEFINE_TYPE_WITH_CODE(GStringsPanel, g_strings_panel, G_TYPE_PANEL_ITEM,
static void g_strings_panel_class_init(GStringsPanelClass *klass)
{
GObjectClass *object; /* Autre version de la classe */
- GEditorItemClass *editem; /* Encore une autre vision... */
+ GEditorItemClass *item; /* Encore une autre vision... */
GPanelItemClass *panel; /* Version parente de la classe*/
object = G_OBJECT_CLASS(klass);
@@ -250,9 +254,11 @@ static void g_strings_panel_class_init(GStringsPanelClass *klass)
object->dispose = (GObjectFinalizeFunc/* ! */)g_strings_panel_dispose;
object->finalize = (GObjectFinalizeFunc)g_strings_panel_finalize;
- editem = G_EDITOR_ITEM_CLASS(klass);
+ item = G_EDITOR_ITEM_CLASS(klass);
+
+ item->get_key = (get_item_key_fc)g_strings_panel_get_key;
- editem->change_content = (change_item_content_fc)change_strings_panel_current_content;
+ item->change_content = (change_item_content_fc)change_strings_panel_current_content;
panel = G_PANEL_ITEM_CLASS(klass);
@@ -282,7 +288,6 @@ static void g_strings_panel_class_init(GStringsPanelClass *klass)
static void g_strings_panel_init(GStringsPanel *panel)
{
- GEditorItem *base; /* Version basique d'instance */
GPanelItem *pitem; /* Version parente du panneau */
GtkBuilder *builder; /* Constructeur utilisé */
GtkTreeModelFilter *filter; /* Filtre pour l'arborescence */
@@ -294,20 +299,20 @@ static void g_strings_panel_init(GStringsPanel *panel)
/* Eléments de base */
- base = G_EDITOR_ITEM(panel);
-
- base->name = PANEL_STRINGS_ID;
-
pitem = G_PANEL_ITEM(panel);
pitem->personality = PIP_SINGLETON;
- pitem->lname = _("Strings");
+
+ pitem->widget = G_NAMED_WIDGET(gtk_built_named_widget_new_for_panel(_("Strings"),
+ _("Strings contained in the binary"),
+ PANEL_STRINGS_ID));
+
pitem->dock_at_startup = false;
pitem->path = strdup("Ms");
/* Représentation graphique */
- builder = g_panel_item_build(pitem, "strings");
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(pitem->widget));
filter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder, "filter"));
gtk_tree_model_filter_set_visible_column(filter, STC_MATCHED);
@@ -387,6 +392,8 @@ static void g_strings_panel_init(GStringsPanel *panel)
gtk_builder_connect_signals(builder, panel);
+ g_object_unref(G_OBJECT(builder));
+
/* Préparation du menu contextuel */
panel->menu = build_strings_panel_menu(panel);
@@ -484,6 +491,29 @@ GPanelItem *g_strings_panel_new(void)
/******************************************************************************
* *
+* Paramètres : panel = instance à consulter. *
+* *
+* Description : Fournit le nom interne attribué à l'élément réactif. *
+* *
+* Retour : Désignation (courte) de l'élément de l'éditeur. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static char *g_strings_panel_get_key(const GStringsPanel *panel)
+{
+ char *result; /* Description à renvoyer */
+
+ result = strdup(PANEL_STRINGS_ID);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : selection = sélection modifiée. *
* unused = adresse non utilisée ici. *
* *
@@ -681,12 +711,14 @@ static void change_strings_panel_current_content(GStringsPanel *panel, GLoadedCo
/* Réinitialisation */
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
gtk_list_store_clear(store);
+ g_object_unref(G_OBJECT(builder));
+
/* Si le panneau actif représente un binaire, actualisation de l'affichage */
if (binary != NULL)
@@ -750,7 +782,7 @@ static void reload_strings_for_new_list_view(const GStringsPanel *panel, GtkStat
char *real_text; /* Texte avec octet nul final */
GtkTreeIter iter; /* Point d'insertion */
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
@@ -821,6 +853,8 @@ static void reload_strings_for_new_list_view(const GStringsPanel *panel, GtkStat
g_object_unref(G_OBJECT(portions));
g_object_unref(G_OBJECT(format));
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -1002,12 +1036,14 @@ static void do_filtering_on_strings(const GStringsPanel *panel, GtkStatusStack *
}
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
store = GTK_LIST_STORE(gtk_builder_get_object(builder, "store"));
gtk_tree_model_foreach(GTK_TREE_MODEL(store), (GtkTreeModelForeachFunc)filter_string_panel_iter, NULL);
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -1146,7 +1182,7 @@ static GBinSymbol *get_selected_panel_symbol(GStringsPanel *panel, GtkTreeIter *
result = NULL;
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
@@ -1158,6 +1194,8 @@ static GBinSymbol *get_selected_panel_symbol(GStringsPanel *panel, GtkTreeIter *
if (save != NULL)
*save = iter;
+ g_object_unref(G_OBJECT(builder));
+
return result;
}
@@ -1188,7 +1226,7 @@ static void mcb_strings_panel_edit(GtkMenuItem *menuitem, GStringsPanel *panel)
symbol = get_selected_panel_symbol(panel, &iter);
if (symbol == NULL) return;
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
@@ -1201,6 +1239,8 @@ static void mcb_strings_panel_edit(GtkMenuItem *menuitem, GStringsPanel *panel)
gtk_tree_path_free(path);
+ g_object_unref(G_OBJECT(builder));
+
g_object_unref(G_OBJECT(symbol));
}
@@ -1229,7 +1269,7 @@ static void mcb_strings_panel_copy(GtkMenuItem *menuitem, GStringsPanel *panel)
gchar *string; /* Chaîne sélectionnée */
GtkClipboard *clipboard; /* Presse-papiers d'arrivée */
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
@@ -1251,6 +1291,8 @@ static void mcb_strings_panel_copy(GtkMenuItem *menuitem, GStringsPanel *panel)
}
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -1535,7 +1577,7 @@ static void g_strings_panel_introduce(const GStringsPanel *panel, unsigned int u
g_panel_item_switch_to_updating_mask(G_PANEL_ITEM(panel));
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
@@ -1547,6 +1589,8 @@ static void g_strings_panel_introduce(const GStringsPanel *panel, unsigned int u
gtk_tree_view_set_model(treeview, NULL);
}
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -1612,7 +1656,7 @@ static void g_strings_panel_conclude(GStringsPanel *panel, unsigned int uid, str
/* Basculement de l'affichage en ligne */
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
@@ -1621,6 +1665,8 @@ static void g_strings_panel_conclude(GStringsPanel *panel, unsigned int uid, str
g_object_ref(G_OBJECT(model));
gtk_tree_view_set_model(treeview, model);
+ g_object_unref(G_OBJECT(builder));
+
skip_this_step:
g_panel_item_switch_to_updated_content(G_PANEL_ITEM(panel));