diff options
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/editem.c | 19 | ||||
-rw-r--r-- | src/gui/editem.h | 3 | ||||
-rw-r--r-- | src/gui/menus/view.c | 81 |
3 files changed, 103 insertions, 0 deletions
diff --git a/src/gui/editem.c b/src/gui/editem.c index 4afd7bd..0516f4d 100644 --- a/src/gui/editem.c +++ b/src/gui/editem.c @@ -117,6 +117,25 @@ GtkWidget *g_editor_item_get_widget(const GEditorItem *item) * * * Paramètres : item = instance à consulter. * * * +* Description : Fournit le gestionnaire du binaire courant. * +* * +* Retour : Instance en place ou NULL si aucune. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GOpenidaBinary *g_editor_item_get_current_binary(const GEditorItem *item) +{ + return g_object_get_data(item->ref, "current_binary"); + +} + + +/****************************************************************************** +* * +* Paramètres : item = instance à consulter. * +* * * Description : Fournit l'affichage de binaire courant. * * * * Retour : Instance en place ou NULL si aucune. * diff --git a/src/gui/editem.h b/src/gui/editem.h index 40be0c7..286013c 100644 --- a/src/gui/editem.h +++ b/src/gui/editem.h @@ -58,6 +58,9 @@ GType g_editor_item_get_type(void); /* Fournit le composant GTK associé à l'élément réactif. */ GtkWidget *g_editor_item_get_widget(const GEditorItem *); +/* Fournit le gestionnaire du binaire courant. */ +GOpenidaBinary *g_editor_item_get_current_binary(const GEditorItem *); + /* Fournit l'affichage de binaire courant. */ GtkViewPanel *g_editor_item_get_current_view(const GEditorItem *); diff --git a/src/gui/menus/view.c b/src/gui/menus/view.c index 85e65f7..273b41b 100644 --- a/src/gui/menus/view.c +++ b/src/gui/menus/view.c @@ -28,10 +28,16 @@ #include <i18n.h> +#include "../editem-int.h" +#include "../../project.h" #include "../../gtkext/easygtk.h" +#include "../../gtkext/gtkdockstation.h" +/* Réagit avec le menu "Affichage -> Vue xxx". */ +static void mcb_view_change_support(GtkRadioMenuItem *, GMenuBar *); + /* Réagit avec le menu "Affichage -> Adresse virtuelle". */ static void mcb_view_addresses(GtkCheckMenuItem *, GMenuBar *); @@ -59,6 +65,7 @@ GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *bar) GtkWidget *result; /* Support à retourner */ GtkWidget *menubar; /* Support pour éléments */ GtkWidget *submenuitem; /* Sous-élément de menu */ + GSList *rgroup; /* Groupe des boutons radio */ result = gtk_menu_item_new_with_mnemonic(_("_View")); gtk_widget_show(result); @@ -66,6 +73,28 @@ GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *bar) menubar = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(result), menubar); + submenuitem = qck_create_radio_menu_item(ref, "textview", NULL, _("Text view"), + G_CALLBACK(mcb_view_change_support), bar); + add_accelerator_to_menu_item(submenuitem, "F2", accgroup); + g_object_set_data(G_OBJECT(submenuitem), "kind_of_view", GUINT_TO_POINTER(BVW_BLOCK)); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + rgroup = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(submenuitem)); + + submenuitem = qck_create_radio_menu_item(ref, "graphview", rgroup, _("Graph view"), + G_CALLBACK(mcb_view_change_support), bar); + add_accelerator_to_menu_item(submenuitem, "F3", accgroup); + g_object_set_data(G_OBJECT(submenuitem), "kind_of_view", GUINT_TO_POINTER(BVW_GRAPH)); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + rgroup = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(submenuitem)); + + submenuitem = qck_create_radio_menu_item(ref, "sourceview", rgroup, _("Source code"), + G_CALLBACK(mcb_view_change_support), bar); + add_accelerator_to_menu_item(submenuitem, "F4", accgroup); + g_object_set_data(G_OBJECT(submenuitem), "kind_of_view", GUINT_TO_POINTER(BVW_SOURCE)); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + submenuitem = qck_create_menu_separator(); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); @@ -134,6 +163,58 @@ void update_menu_view_for_view(GtkWidget *widget, GtkViewPanel *view, GMenuBar * * Paramètres : menuitem = élément de menu ayant basculé. * * bar = barre de menu parente. * * * +* Description : Réagit avec le menu "Affichage -> Vue xxx". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_view_change_support(GtkRadioMenuItem *menuitem, GMenuBar *bar) +{ + GSList *group; /* Liste de menus radio */ + GSList *iter; /* Boucle de parcours */ + BinaryView view; /* Nouvelle vue à présenter */ + GtkViewPanel *vpanel; /* Afficheur effectif de code */ + GtkWidget *station; /* Base du remplacement */ + GOpenidaBinary *binary; /* Edition courante */ + GtkWidget *scroll; /* Nouveau support à utiliser */ + + /* On ne traite qu'une seule fois ! */ + if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) return; + + group = gtk_radio_menu_item_get_group(menuitem); + + for (iter = group; iter != NULL; iter = g_slist_next(iter)) + { + if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(iter->data))) continue; + + view = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(iter->data), "kind_of_view")); + + vpanel = g_editor_item_get_current_view(G_EDITOR_ITEM(bar)); + station = gtk_widget_get_parent(GTK_WIDGET(vpanel)); /* ScrollWindow */ + station = gtk_widget_get_parent(station); /* NoteBook */ + station = gtk_widget_get_parent(station); /* DockStation */ + + binary = g_editor_item_get_current_binary(G_EDITOR_ITEM(bar)); + scroll = get_view_for_openida_project_binary(get_current_openida_project(), + binary, view, &vpanel); + + gtk_dock_panel_change_active_widget(GTK_DOCK_STATION(station), scroll); + + change_editor_items_current_view(G_EDITOR_ITEM(bar)->ref, vpanel); + + } + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu ayant basculé. * +* bar = barre de menu parente. * +* * * Description : Réagit avec le menu "Affichage -> Adresse virtuelle". * * * * Retour : - * |