diff options
Diffstat (limited to 'src/gui/menus')
-rw-r--r-- | src/gui/menus/binary.c | 104 | ||||
-rw-r--r-- | src/gui/menus/binary.h | 3 | ||||
-rw-r--r-- | src/gui/menus/menubar.c | 2 |
3 files changed, 99 insertions, 10 deletions
diff --git a/src/gui/menus/binary.c b/src/gui/menus/binary.c index c4c4e22..3a143da 100644 --- a/src/gui/menus/binary.c +++ b/src/gui/menus/binary.c @@ -31,11 +31,13 @@ #include "../agroup.h" #include "../editem-int.h" #include "../core/global.h" -#include "../dialogs/export.h" +#include "../dialogs/export_disass.h" +#include "../dialogs/export_graph.h" #include "../dialogs/gotox.h" #include "../dialogs/storage.h" #include "../../gtkext/easygtk.h" #include "../../gtkext/gtkdisplaypanel.h" +#include "../../gtkext/gtkgraphdisplay.h" @@ -48,8 +50,11 @@ static void mcb_binary_attach_debugger(GtkMenuItem *, GMenuBar *); /* Réagit au menu "Binaire -> Enregistrements...". */ static void mcb_binary_storage(GtkMenuItem *, GMenuBar *); -/* Réagit au menu "Binaire -> Exporter...". */ -static void mcb_binary_export(GtkMenuItem *, GMenuBar *); +/* Réagit au menu "Binaire -> Exporter -> Désassemblage". */ +static void mcb_binary_export_disass(GtkMenuItem *, gpointer); + +/* Réagit au menu "Binaire -> Exporter -> Vue graphique". */ +static void mcb_binary_export_graph(GtkMenuItem *, gpointer); @@ -70,7 +75,9 @@ GtkWidget *build_menu_binary(GObject *ref, GMenuBar *bar) { GtkWidget *result; /* Support à retourner */ GtkWidget *menubar; /* Support pour éléments */ - GtkWidget *submenuitem; /* Sous-élément de menu */ + GtkWidget *submenuitem; /* Sous-élément de menu #1 */ + GtkWidget *deepmenubar; /* Support pour éléments #2 */ + GtkWidget *deepmenuitem; /* Sous-élément de menu #2 */ result = gtk_menu_item_new_with_mnemonic(_("_Binary")); gtk_widget_show(result); @@ -96,10 +103,26 @@ GtkWidget *build_menu_binary(GObject *ref, GMenuBar *bar) G_CALLBACK(mcb_binary_storage), bar); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); - submenuitem = qck_create_menu_item(ref, "mnu_binary_export", _("Export..."), - G_CALLBACK(mcb_binary_export), bar); + /* Séparation */ + + submenuitem = qck_create_menu_separator(); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + /* Exportations */ + + submenuitem = qck_create_menu_item(NULL, NULL, _("Export"), NULL, NULL); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + deepmenubar = qck_create_menu(GTK_MENU_ITEM(submenuitem)); + + deepmenuitem = qck_create_menu_item(ref, "mnu_binary_export_disass", _("Disassembly"), + G_CALLBACK(mcb_binary_export_disass), bar); + gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem); + + deepmenuitem = qck_create_menu_item(ref, "mnu_binary_export_graph", _("Graph view"), + G_CALLBACK(mcb_binary_export_graph), NULL); + gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem); + return result; } @@ -137,7 +160,37 @@ void update_access_for_content_in_menu_binary(GLoadedContent *new) item = GTK_WIDGET(g_object_get_data(ref, "mnu_binary_storage")); gtk_widget_set_sensitive(item, access); - item = GTK_WIDGET(g_object_get_data(ref, "mnu_binary_export")); + item = GTK_WIDGET(g_object_get_data(ref, "mnu_binary_export_disass")); + gtk_widget_set_sensitive(item, access); + +} + + +/****************************************************************************** +* * +* Paramètres : new = nouvelle vue du contenu chargé analysé. * +* * +* Description : Lance une actualisation du fait d'un changement de support. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void update_access_for_view_in_menu_binary(GLoadedPanel *new) +{ + GObject *ref; /* Espace de référencements */ + gboolean access; /* Accès à déterminer */ + GtkWidget *item; /* Elément de menu à traiter */ + + ref = get_global_ref(); + + /* Exportation de graphiques */ + + access = GTK_IS_GRAPH_DISPLAY(new); + + item = GTK_WIDGET(g_object_get_data(ref, "mnu_binary_export_graph")); gtk_widget_set_sensitive(item, access); } @@ -249,9 +302,9 @@ static void mcb_binary_storage(GtkMenuItem *menuitem, GMenuBar *bar) /****************************************************************************** * * * Paramètres : menuitem = élément de menu sélectionné. * -* bar = barre de menu parente. * +* unused = adresse non utilisée ici. * * * -* Description : Réagit au menu "Binaire -> Exporter...". * +* Description : Réagit au menu "Binaire -> Exporter -> Désassemblage". * * * * Retour : - * * * @@ -259,7 +312,7 @@ static void mcb_binary_storage(GtkMenuItem *menuitem, GMenuBar *bar) * * ******************************************************************************/ -static void mcb_binary_export(GtkMenuItem *menuitem, GMenuBar *bar) +static void mcb_binary_export_disass(GtkMenuItem *menuitem, gpointer unused) { GLoadedBinary *binary; /* Edition courante */ @@ -270,3 +323,34 @@ static void mcb_binary_export(GtkMenuItem *menuitem, GMenuBar *bar) g_object_unref(G_OBJECT(binary)); } + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* unused = adresse non utilisée ici. * +* * +* Description : Réagit au menu "Binaire -> Exporter -> Vue graphique". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_binary_export_graph(GtkMenuItem *menuitem, gpointer unused) +{ + GtkGraphDisplay *panel; /* Panneau de code courant */ + GLoadedBinary *binary; /* Edition courante */ + + binary = G_LOADED_BINARY(get_current_content()); + + panel = GTK_GRAPH_DISPLAY(get_current_view()); + + run_graph_export_assistant(binary, panel, get_editor_window()); + + g_object_unref(G_OBJECT(panel)); + + g_object_unref(G_OBJECT(binary)); + +} diff --git a/src/gui/menus/binary.h b/src/gui/menus/binary.h index c68b67c..a752626 100644 --- a/src/gui/menus/binary.h +++ b/src/gui/menus/binary.h @@ -40,6 +40,9 @@ GtkWidget *build_menu_binary(GObject *, GMenuBar *); /* Réagit à un changement d'affichage principal de contenu. */ void update_access_for_content_in_menu_binary(GLoadedContent *); +/* Lance une actualisation du fait d'un changement de support. */ +void update_access_for_view_in_menu_binary(GLoadedPanel *); + #endif /* _GUI_MENUS_BINARY_H */ diff --git a/src/gui/menus/menubar.c b/src/gui/menus/menubar.c index 886387c..aa89a13 100644 --- a/src/gui/menus/menubar.c +++ b/src/gui/menus/menubar.c @@ -311,6 +311,8 @@ static void change_menubar_current_view(GMenuBar *bar, GLoadedPanel *old, GLoade update_access_for_view_in_menu_view(G_EDITOR_ITEM(bar)->ref, new); + update_access_for_view_in_menu_binary(new); + } |