summaryrefslogtreecommitdiff
path: root/src/gui/panels/symbols.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/panels/symbols.c')
-rw-r--r--src/gui/panels/symbols.c96
1 files changed, 74 insertions, 22 deletions
diff --git a/src/gui/panels/symbols.c b/src/gui/panels/symbols.c
index 2cb2b34..ec85479 100644
--- a/src/gui/panels/symbols.c
+++ b/src/gui/panels/symbols.c
@@ -47,6 +47,7 @@
#include "../../format/symiter.h"
#include "../../gtkext/easygtk.h"
#include "../../gtkext/gtkdisplaypanel.h"
+#include "../../gtkext/named.h"
#include "../../gtkext/tmgt.h"
#include "../../mangling/demangler.h"
@@ -119,6 +120,9 @@ static void g_symbols_panel_dispose(GSymbolsPanel *);
/* Procède à la libération totale de la mémoire. */
static void g_symbols_panel_finalize(GSymbolsPanel *);
+/* Fournit le nom interne attribué à l'élément réactif. */
+static char *g_symbols_panel_get_key(const GSymbolsPanel *);
+
/* Bascule d'affichage des symboles en liste. */
static void on_symbols_list_display_toggle(GtkToggleToolButton *, GSymbolsPanel *);
@@ -249,7 +253,7 @@ G_DEFINE_TYPE_WITH_CODE(GSymbolsPanel, g_symbols_panel, G_TYPE_PANEL_ITEM,
static void g_symbols_panel_class_init(GSymbolsPanelClass *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*/
gchar *filename; /* Chemin d'accès à utiliser */
@@ -258,9 +262,11 @@ static void g_symbols_panel_class_init(GSymbolsPanelClass *klass)
object->dispose = (GObjectFinalizeFunc/* ! */)g_symbols_panel_dispose;
object->finalize = (GObjectFinalizeFunc)g_symbols_panel_finalize;
- editem = G_EDITOR_ITEM_CLASS(klass);
+ item = G_EDITOR_ITEM_CLASS(klass);
+
+ item->get_key = (get_item_key_fc)g_symbols_panel_get_key;
- editem->change_content = (change_item_content_fc)change_symbols_panel_current_content;
+ item->change_content = (change_item_content_fc)change_symbols_panel_current_content;
panel = G_PANEL_ITEM_CLASS(klass);
@@ -314,7 +320,6 @@ static void g_symbols_panel_class_init(GSymbolsPanelClass *klass)
static void g_symbols_panel_init(GSymbolsPanel *panel)
{
- GEditorItem *base; /* Version basique d'instance */
GPanelItem *pitem; /* Version parente du panneau */
GtkBuilder *builder; /* Constructeur utilisé */
GtkTreeModelFilter *filter; /* Filtre pour l'arborescence */
@@ -324,20 +329,20 @@ static void g_symbols_panel_init(GSymbolsPanel *panel)
/* Eléments de base */
- base = G_EDITOR_ITEM(panel);
-
- base->name = PANEL_SYMBOLS_ID;
-
pitem = G_PANEL_ITEM(panel);
pitem->personality = PIP_SINGLETON;
- pitem->lname = _("Binary symbols");
+
+ pitem->widget = G_NAMED_WIDGET(gtk_built_named_widget_new_for_panel(_("Symbols"),
+ _("Binary symbols"),
+ PANEL_SYMBOLS_ID));
+
pitem->dock_at_startup = true;
pitem->path = strdup("MEN");
/* Représentation graphique */
- builder = g_panel_item_build(pitem, "symbols");
+ 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, SBC_MATCHED);
@@ -387,6 +392,8 @@ static void g_symbols_panel_init(GSymbolsPanel *panel)
gtk_builder_connect_signals(builder, panel);
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -480,6 +487,29 @@ GPanelItem *g_symbols_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_symbols_panel_get_key(const GSymbolsPanel *panel)
+{
+ char *result; /* Description à renvoyer */
+
+ result = strdup(PANEL_SYMBOLS_ID);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : button = bouton de la barre activé. *
* panel = structure contenant les informations maîtresses. *
* *
@@ -501,7 +531,7 @@ static void on_symbols_list_display_toggle(GtkToggleToolButton *button, GSymbols
{
/* Accès aux boutons complémentaires */
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
other = GTK_WIDGET(gtk_builder_get_object(builder, "collapse"));
gtk_widget_set_sensitive(other, FALSE);
@@ -512,6 +542,8 @@ static void on_symbols_list_display_toggle(GtkToggleToolButton *button, GSymbols
other = GTK_WIDGET(gtk_builder_get_object(builder, "classes"));
gtk_widget_set_sensitive(other, FALSE);
+ g_object_unref(G_OBJECT(builder));
+
/* Actualisation de l'affichage */
if (panel->binary != NULL)
@@ -552,7 +584,7 @@ static void on_symbols_tree_display_toggle(GtkToggleToolButton *button, GSymbols
{
/* Accès aux boutons complémentaires */
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
other = GTK_WIDGET(gtk_builder_get_object(builder, "collapse"));
gtk_widget_set_sensitive(other, TRUE);
@@ -563,6 +595,8 @@ static void on_symbols_tree_display_toggle(GtkToggleToolButton *button, GSymbols
other = GTK_WIDGET(gtk_builder_get_object(builder, "classes"));
gtk_widget_set_sensitive(other, TRUE);
+ g_object_unref(G_OBJECT(builder));
+
/* Actualisation de l'affichage */
if (panel->binary != NULL)
@@ -671,7 +705,7 @@ static void change_symbols_panel_current_content(GSymbolsPanel *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_TREE_STORE(gtk_builder_get_object(builder, "store"));
@@ -721,6 +755,8 @@ static void change_symbols_panel_current_content(GSymbolsPanel *panel, GLoadedCo
}
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -744,7 +780,7 @@ static void reload_symbols_panel_content(const GSymbolsPanel *panel, GtkStatusSt
GtkBuilder *builder; /* Constructeur utilisé */
GtkToggleToolButton *button; /* Mode de représentation */
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
button = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "list_display"));
@@ -754,6 +790,8 @@ static void reload_symbols_panel_content(const GSymbolsPanel *panel, GtkStatusSt
else
reload_symbols_for_new_tree_view(panel, status, id, data);
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -796,7 +834,7 @@ static void reload_symbols_for_new_list_view(const GSymbolsPanel *panel, GtkStat
VMPA_BUFFER(virt); /* Version humainement lisible */
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_TREE_STORE(gtk_builder_get_object(builder, "store"));
@@ -878,6 +916,8 @@ static void reload_symbols_for_new_list_view(const GSymbolsPanel *panel, GtkStat
g_object_unref(G_OBJECT(format));
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -947,7 +987,7 @@ static GtkTreeIter ensure_symbol_node_exist(const GSymbolsPanel *panel, GtkTreeI
gchar *string; /* Chaîne sélectionnée */
char *name; /* Etiquette mise en relief */
- builder = G_PANEL_ITEM(panel)->builder;
+ builder = gtk_built_named_widget_get_builder(GTK_BUILT_NAMED_WIDGET(G_PANEL_ITEM(panel)->widget));
store = GTK_TREE_STORE(gtk_builder_get_object(builder, "store"));
@@ -984,6 +1024,8 @@ static GtkTreeIter ensure_symbol_node_exist(const GSymbolsPanel *panel, GtkTreeI
}
+ g_object_unref(G_OBJECT(builder));
+
return iter;
}
@@ -1077,7 +1119,7 @@ static void reload_symbols_for_new_tree_view(const GSymbolsPanel *panel, GtkStat
char virt[VMPA_MAX_LEN]; /* Version humainement lisible */
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_TREE_STORE(gtk_builder_get_object(builder, "store"));
@@ -1195,7 +1237,7 @@ static void reorganize_symbols_tree_view(GtkToolButton *button, const GSymbolsPa
GtkToolButton *ref_expand; /* Bouton de référence #2 */
GtkTreeStore *store; /* Modèle de gestion */
- 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"));
@@ -1218,6 +1260,8 @@ static void reorganize_symbols_tree_view(GtkToolButton *button, const GSymbolsPa
}
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -1451,7 +1495,7 @@ static void do_filtering_on_symbols(const GSymbolsPanel *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_TREE_STORE(gtk_builder_get_object(builder, "store"));
button = GTK_TOGGLE_TOOL_BUTTON(gtk_builder_get_object(builder, "list_display"));
@@ -1460,6 +1504,8 @@ static void do_filtering_on_symbols(const GSymbolsPanel *panel, GtkStatusStack *
gtk_tree_model_foreach(GTK_TREE_MODEL(store), (GtkTreeModelForeachFunc)filter_symbol_panel_iter, &as_list);
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -1594,7 +1640,7 @@ static const char *g_symbols_panel_setup(const GSymbolsPanel *panel, unsigned in
/* Mémorisation de tous les noeuds ouverts */
- 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"));
@@ -1618,6 +1664,8 @@ static const char *g_symbols_panel_setup(const GSymbolsPanel *panel, unsigned in
gtk_tree_view_map_expanded_rows(treeview, (GtkTreeViewMappingFunc)keep_track_of_expanded, *data);
+ g_object_unref(G_OBJECT(builder));
+
return result;
}
@@ -1647,7 +1695,7 @@ static void g_symbols_panel_introduce(const GSymbolsPanel *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"));
@@ -1659,6 +1707,8 @@ static void g_symbols_panel_introduce(const GSymbolsPanel *panel, unsigned int u
gtk_tree_view_set_model(treeview, NULL);
}
+ g_object_unref(G_OBJECT(builder));
+
}
@@ -1727,7 +1777,7 @@ static void g_symbols_panel_conclude(GSymbolsPanel *panel, unsigned int uid, sym
/* 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"));
@@ -1753,6 +1803,8 @@ static void g_symbols_panel_conclude(GSymbolsPanel *panel, unsigned int uid, sym
if (!gtk_toggle_tool_button_get_active(button))
reorganize_symbols_tree_view(NULL, panel);
+ g_object_unref(G_OBJECT(builder));
+
skip_this_step:
g_panel_item_switch_to_updated_content(G_PANEL_ITEM(panel));