diff options
Diffstat (limited to 'src/gui/panels/strings.c')
-rw-r--r-- | src/gui/panels/strings.c | 82 |
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)); |