diff options
Diffstat (limited to 'src/gui/tb/portions.c')
-rw-r--r-- | src/gui/tb/portions.c | 99 |
1 files changed, 78 insertions, 21 deletions
diff --git a/src/gui/tb/portions.c b/src/gui/tb/portions.c index 1823bda..f8b2b92 100644 --- a/src/gui/tb/portions.c +++ b/src/gui/tb/portions.c @@ -43,6 +43,8 @@ struct _GPortionsTbItem { GToolbarItem parent; /* A laisser en premier */ + GtkWidget *support; /* Composant GTK de support */ + }; @@ -67,8 +69,14 @@ static void g_portions_tbitem_dispose(GPortionsTbItem *); /* Procède à la libération totale de la mémoire. */ static void g_portions_tbitem_finalize(GPortionsTbItem *); +/* Fournit le nom interne attribué à l'élément réactif. */ +static char *g_portions_tbitem_get_key(const GPortionsTbItem *); + +/* Fournit le composant GTK associé à l'élément réactif. */ +static GtkWidget *g_portions_tbitem_get_widget(const GPortionsTbItem *); + /* Réagit à un changement du binaire courant. */ -static void change_portions_tbitem_current_content(GEditorItem *, GLoadedContent *, GLoadedContent *); +static void change_portions_tbitem_current_content(GPortionsTbItem *, GLoadedContent *, GLoadedContent *); /* Fait suivre un changement d'adresse dans la barre. */ static void track_address_on_binary_strip(GtkBinaryStrip *, GEditorItem *); @@ -97,12 +105,16 @@ static void g_portions_tbitem_class_init(GPortionsTbItemClass *klass) GEditorItemClass *item; /* Encore une autre vision */ object = G_OBJECT_CLASS(klass); - item = G_EDITOR_ITEM_CLASS(klass); object->dispose = (GObjectFinalizeFunc/* ! */)g_portions_tbitem_dispose; object->finalize = (GObjectFinalizeFunc)g_portions_tbitem_finalize; - item->change_content = change_portions_tbitem_current_content; + item = G_EDITOR_ITEM_CLASS(klass); + + item->get_key = (get_item_key_fc)g_portions_tbitem_get_key; + item->get_widget = (get_item_widget_fc)g_portions_tbitem_get_widget; + + item->change_content = (change_item_content_fc)change_portions_tbitem_current_content; } @@ -121,20 +133,18 @@ static void g_portions_tbitem_class_init(GPortionsTbItemClass *klass) static void g_portions_tbitem_init(GPortionsTbItem *item) { - GtkWidget *widget; /* Composant principal */ GtkWidget *strip; /* Bande pour binaire */ - widget = GTK_WIDGET(gtk_tool_item_new()); - gtk_tool_item_set_expand(GTK_TOOL_ITEM(widget), TRUE); - gtk_widget_show(widget); + item->support = GTK_WIDGET(gtk_tool_item_new()); - G_EDITOR_ITEM(item)->widget = widget; + gtk_tool_item_set_expand(GTK_TOOL_ITEM(item->support), TRUE); + gtk_widget_show(item->support); strip = gtk_binary_strip_new(); gtk_widget_show(strip); - gtk_container_add(GTK_CONTAINER(widget), strip); + gtk_container_add(GTK_CONTAINER(item->support), strip); - g_object_set_data(G_OBJECT(widget), "strip", strip); + g_object_set_data(G_OBJECT(item->support), "strip", strip); g_signal_connect(strip, "select-address", G_CALLBACK(track_address_on_binary_strip), @@ -157,6 +167,8 @@ static void g_portions_tbitem_init(GPortionsTbItem *item) static void g_portions_tbitem_dispose(GPortionsTbItem *item) { + g_clear_object(&item->support); + G_OBJECT_CLASS(g_portions_tbitem_parent_class)->dispose(G_OBJECT(item)); } @@ -193,13 +205,63 @@ static void g_portions_tbitem_finalize(GPortionsTbItem *item) * * ******************************************************************************/ -GEditorItem *create_portions_tb_item(GObject *ref) +GEditorItem *g_portions_tbitem_new(GObject *ref) { GPortionsTbItem *result; /* Structure à retourner */ result = g_object_new(G_TYPE_PORTIONS_TBITEM, NULL); - return g_toolbar_item_setup(G_TOOLBAR_ITEM(result), ref, "portions", _("Portions")); + g_toolbar_item_setup(G_TOOLBAR_ITEM(result), ref); + + return G_EDITOR_ITEM(result); + +} + + +/****************************************************************************** +* * +* Paramètres : item = 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_portions_tbitem_get_key(const GPortionsTbItem *item) +{ + char *result; /* Description à renvoyer */ + + result = strdup(PORTIONS_TBITEM_ID); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : item = instance à consulter. * +* * +* Description : Fournit le composant GTK associé à l'élément réactif. * +* * +* Retour : Instance de composant graphique chargé. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static GtkWidget *g_portions_tbitem_get_widget(const GPortionsTbItem *item) +{ + GtkWidget *result; /* Composant à retourner */ + + result = item->support; + + g_object_ref(G_OBJECT(result)); + + return result; } @@ -218,10 +280,9 @@ GEditorItem *create_portions_tb_item(GObject *ref) * * ******************************************************************************/ -static void change_portions_tbitem_current_content(GEditorItem *item, GLoadedContent *old, GLoadedContent *new) +static void change_portions_tbitem_current_content(GPortionsTbItem *item, GLoadedContent *old, GLoadedContent *new) { GLoadedBinary *binary; /* Autre version de l'instance */ - GtkWidget *widget; /* Elément graphique principal */ GtkBinaryStrip *strip; /* Bande pour binaire */ if (G_IS_LOADED_BINARY(new)) @@ -229,19 +290,15 @@ static void change_portions_tbitem_current_content(GEditorItem *item, GLoadedCon else binary = NULL; - widget = g_editor_item_get_widget(item); - - strip = GTK_BINARY_STRIP(g_object_get_data(G_OBJECT(widget), "strip")); + strip = GTK_BINARY_STRIP(g_object_get_data(G_OBJECT(item->support), "strip")); if (binary != NULL) { gtk_binary_strip_attach(strip, binary); - gtk_widget_show(GTK_WIDGET(widget)); + gtk_widget_show(item->support); } else - gtk_widget_hide(GTK_WIDGET(widget)); - - g_object_unref(G_OBJECT(widget)); + gtk_widget_hide(item->support); } |