diff options
Diffstat (limited to 'src/gui/menus')
-rw-r--r-- | src/gui/menus/menubar.c | 47 | ||||
-rw-r--r-- | src/gui/menus/view.c | 89 | ||||
-rw-r--r-- | src/gui/menus/view.h | 8 |
3 files changed, 109 insertions, 35 deletions
diff --git a/src/gui/menus/menubar.c b/src/gui/menus/menubar.c index 62a3cbe..a847d40 100644 --- a/src/gui/menus/menubar.c +++ b/src/gui/menus/menubar.c @@ -38,6 +38,11 @@ struct _GMenuBar { GEditorItem parent; /* A laisser en premier */ + GtkWidget *file; /* Menu "Fichier" */ + GtkWidget *view; /* Menu "Affichage" */ + GtkWidget *debug; /* Menu "Débogage" */ + GtkWidget *help; /* Menu "Aide" */ + }; @@ -55,6 +60,9 @@ static void g_menu_bar_class_init(GMenuBarClass *); /* Initialise une instance de la barre de menus pour l'éditeur. */ static void g_menu_bar_init(GMenuBar *); +/* Lance une actualisation du fait d'un changement de vue. */ +static void update_menu_bar_for_view(GMenuBar *, GtkViewPanel *); + /* Indique le type défini pour la barre de menus de la fenêtre principale. */ @@ -102,6 +110,8 @@ static void g_menu_bar_init(GMenuBar *bar) item->widget = gtk_menu_bar_new(); gtk_widget_show(item->widget); + item->update_view = (update_item_view_fc)update_menu_bar_for_view; + } @@ -122,7 +132,6 @@ GEditorItem *g_menu_bar_new(GObject *ref, GtkAccelGroup *accgroup) { GMenuBar *result; /* Structure à retourner */ GEditorItem *item; /* Autre version de l'élément */ - GtkWidget *menuitem; /* Elément de menu */ result = g_object_new(G_TYPE_MENU_BAR, NULL); @@ -135,24 +144,44 @@ GEditorItem *g_menu_bar_new(GObject *ref, GtkAccelGroup *accgroup) /* Fichier */ - menuitem = build_menu_file(ref, accgroup); - gtk_container_add(GTK_CONTAINER(item->widget), menuitem); + result->file = build_menu_file(ref, accgroup); + gtk_container_add(GTK_CONTAINER(item->widget), result->file); /* Affichage */ - menuitem = build_menu_view(ref, accgroup); - gtk_container_add(GTK_CONTAINER(item->widget), menuitem); + result->view = build_menu_view(ref, accgroup, result); + gtk_container_add(GTK_CONTAINER(item->widget), result->view); /* Débogage */ - menuitem = build_menu_debug(ref, accgroup); - gtk_container_add(GTK_CONTAINER(item->widget), menuitem); + result->debug = build_menu_debug(ref, accgroup); + gtk_container_add(GTK_CONTAINER(item->widget), result->debug); /* Aide */ - menuitem = build_menu_help(ref, accgroup); - gtk_container_add(GTK_CONTAINER(item->widget), menuitem); + result->help = build_menu_help(ref, accgroup); + gtk_container_add(GTK_CONTAINER(item->widget), result->help); return G_EDITOR_ITEM(result); } + + +/****************************************************************************** +* * +* Paramètres : bar = barre de menus à actualiser. * +* view = nouveau panneau d'affichage actif. * +* * +* Description : Lance une actualisation du fait d'un changement de vue. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void update_menu_bar_for_view(GMenuBar *bar, GtkViewPanel *view) +{ + update_menu_view_for_view(bar->view, view, bar); + +} diff --git a/src/gui/menus/view.c b/src/gui/menus/view.c index d68ffa4..85e65f7 100644 --- a/src/gui/menus/view.c +++ b/src/gui/menus/view.c @@ -33,10 +33,10 @@ /* Réagit avec le menu "Affichage -> Adresse virtuelle". */ -void mcb_view_vaddress(GtkCheckMenuItem *, gpointer); +static void mcb_view_addresses(GtkCheckMenuItem *, GMenuBar *); /* Réagit avec le menu "Affichage -> code binaire". */ -void mcb_view_code(GtkCheckMenuItem *, gpointer); +static void mcb_view_code(GtkCheckMenuItem *, GMenuBar *); @@ -44,6 +44,7 @@ void mcb_view_code(GtkCheckMenuItem *, gpointer); * * * Paramètres : ref = espace de référencement global. * * accgroup = groupe d'accélérateurs pour les menus. * +* bar = barre de menu parente. * * * * Description : Construit le menu "Fichier". * * * @@ -53,7 +54,7 @@ void mcb_view_code(GtkCheckMenuItem *, gpointer); * * ******************************************************************************/ -GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup) +GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *bar) { GtkWidget *result; /* Support à retourner */ GtkWidget *menubar; /* Support pour éléments */ @@ -68,10 +69,12 @@ GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup) submenuitem = qck_create_menu_separator(); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - submenuitem = qck_create_check_menu_item(NULL, NULL, _("Virtual address"), G_CALLBACK(mcb_view_vaddress), result); + submenuitem = qck_create_check_menu_item(G_OBJECT(result), "addr", _("Virtual address"), + G_CALLBACK(mcb_view_addresses), bar); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - submenuitem = qck_create_check_menu_item(NULL, NULL, _("Binary code"), G_CALLBACK(mcb_view_code), result); + submenuitem = qck_create_check_menu_item(G_OBJECT(result), "code", _("Binary code"), + G_CALLBACK(mcb_view_code), bar); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); submenuitem = qck_create_menu_separator(); @@ -84,8 +87,52 @@ GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup) /****************************************************************************** * * +* Paramètres : widget = menu principal à actualiser. * +* view = nouveau panneau d'affichage actif. * +* bar = barre de menu parente. * +* * +* Description : Lance une actualisation du fait d'un changement de vue. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void update_menu_view_for_view(GtkWidget *widget, GtkViewPanel *view, GMenuBar *bar) +{ + GtkWidget *submenuitem; /* Sous-élément de menu */ + bool status; /* Consigne d'affichage */ + + /* Adresses virtuelles */ + + submenuitem = g_object_get_data(G_OBJECT(widget), "addr"); + + g_signal_handlers_disconnect_by_func(submenuitem, G_CALLBACK(mcb_view_addresses), bar); + + status = gtk_view_panel_get_addresses_display(view); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(submenuitem), status); + + g_signal_connect(submenuitem, "toggled", G_CALLBACK(mcb_view_addresses), bar); + + /* Code binaire */ + + submenuitem = g_object_get_data(G_OBJECT(widget), "code"); + + g_signal_handlers_disconnect_by_func(submenuitem, G_CALLBACK(mcb_view_code), bar); + + status = gtk_view_panel_get_code_display(view); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(submenuitem), status); + + g_signal_connect(submenuitem, "toggled", G_CALLBACK(mcb_view_code), bar); + +} + + +/****************************************************************************** +* * * Paramètres : menuitem = élément de menu ayant basculé. * -* data = adresse de l'espace de référencement global. * +* bar = barre de menu parente. * * * * Description : Réagit avec le menu "Affichage -> Adresse virtuelle". * * * @@ -95,27 +142,23 @@ GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup) * * ******************************************************************************/ -void mcb_view_vaddress(GtkCheckMenuItem *menuitem, gpointer data) +static void mcb_view_addresses(GtkCheckMenuItem *menuitem, GMenuBar *bar) { -#if 0 - GtkBinView *binview; /* Zone de code principale */ + GtkViewPanel *panel; /* Affichage courant */ gboolean active; /* Etat de sélection du menu */ - /* FIXME : "binview" -> "current_view" */ - return; - - binview = GTK_BIN_VIEW(g_object_get_data(G_OBJECT(data), "binview")); + panel = g_editor_item_get_current_view(G_EDITOR_ITEM(bar)); active = gtk_check_menu_item_get_active(menuitem); - gtk_binview_show_vaddress(binview, active); -#endif + gtk_view_panel_set_addresses_display(panel, active); + } /****************************************************************************** * * * Paramètres : menuitem = élément de menu ayant basculé. * -* data = adresse de l'espace de référencement global. * +* bar = barre de menu parente. * * * * Description : Réagit avec le menu "Affichage -> code binaire". * * * @@ -125,18 +168,14 @@ void mcb_view_vaddress(GtkCheckMenuItem *menuitem, gpointer data) * * ******************************************************************************/ -void mcb_view_code(GtkCheckMenuItem *menuitem, gpointer data) +static void mcb_view_code(GtkCheckMenuItem *menuitem, GMenuBar *bar) { -#if 0 - GtkBinView *binview; /* Zone de code principale */ + GtkViewPanel *panel; /* Affichage courant */ gboolean active; /* Etat de sélection du menu */ - /* FIXME : "binview" -> "current_view" */ - return; - - binview = GTK_BIN_VIEW(g_object_get_data(G_OBJECT(data), "binview")); + panel = g_editor_item_get_current_view(G_EDITOR_ITEM(bar)); active = gtk_check_menu_item_get_active(menuitem); - gtk_binview_show_code(binview, active); -#endif + gtk_view_panel_set_code_display(panel, active); + } diff --git a/src/gui/menus/view.h b/src/gui/menus/view.h index 4da6a11..2bdc9b6 100644 --- a/src/gui/menus/view.h +++ b/src/gui/menus/view.h @@ -29,9 +29,15 @@ #include <gtk/gtk.h> +#include "menubar.h" + + /* Construit le menu "Fichier". */ -GtkWidget *build_menu_view(GObject *, GtkAccelGroup *); +GtkWidget *build_menu_view(GObject *, GtkAccelGroup *, GMenuBar *); + +/* Lance une actualisation du fait d'un changement de vue. */ +void update_menu_view_for_view(GtkWidget *, GtkViewPanel *, GMenuBar *); |