diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2009-09-13 23:11:24 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2009-09-13 23:11:24 (GMT) |
commit | 1c4da24a1d4b96d58fee08e2be21198b22e7eef6 (patch) | |
tree | a0723bd1948395413fa5a7a37a9405567e32c015 /src/editor.c | |
parent | 18134387d5cb025703af8e1d07e0152784e31efc (diff) |
Improved the editor window refreshing when several binaries are loaded.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@114 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/editor.c')
-rw-r--r-- | src/editor.c | 129 |
1 files changed, 117 insertions, 12 deletions
diff --git a/src/editor.c b/src/editor.c index c026426..942e6f4 100644 --- a/src/editor.c +++ b/src/editor.c @@ -45,10 +45,11 @@ #include "gtkext/easygtk.h" #include "gtkext/gtkextstatusbar.h" #include "gtkext/gtkbinview.h" +#include "gtkext/gtkblockview.h" #include "gtkext/gtkdockpanel.h" #include "debug/debuggers.h" -#include "panel/panels.h" +#include "panels/panel.h" @@ -135,11 +136,11 @@ void update_debug_menu_items(GObject *, gboolean); +/* Réagit au changement d'onglet d'un panneau quelconque. */ +static void on_dock_item_switch(GtkDockPanel *, GtkDockItem *, GObject *); - - - - +/* Met en concordance les menus avec l'édition courante. */ +static void refresh_editor_menus(GObject *, GOpenidaBinary *, GtkBinView *); @@ -267,13 +268,13 @@ GtkWidget *create_editor(void) menubar = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menubar); - submenuitem = qck_create_radio_menu_item(NULL, NULL, NULL, _("Text view"), G_CALLBACK(mcb_view_change_support), result); + submenuitem = qck_create_radio_menu_item(ref, "textview", NULL, _("Text view"), G_CALLBACK(mcb_view_change_support), result); 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(NULL, NULL, rgroup, _("Graph view"), G_CALLBACK(mcb_view_change_support), result); + submenuitem = qck_create_radio_menu_item(ref, "graphview", rgroup, _("Graph view"), G_CALLBACK(mcb_view_change_support), result); g_object_set_data(G_OBJECT(submenuitem), "kind_of_view", GUINT_TO_POINTER(BVW_GRAPH)); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); @@ -383,6 +384,12 @@ GtkWidget *create_editor(void) g_object_set_data(G_OBJECT(result), "binpanel", dpanel); gtk_widget_show(dpanel); + + + g_signal_connect(dpanel, "switch-item", G_CALLBACK(on_dock_item_switch), ref); + + + gtk_paned_pack1(GTK_PANED(hpaned1), dpanel, TRUE, TRUE); #if 0 @@ -440,11 +447,13 @@ GtkWidget *create_editor(void) dpanel = gtk_dock_panel_new(); gtk_widget_show(dpanel); + g_signal_connect(dpanel, "switch-item", G_CALLBACK(on_dock_item_switch), ref); + gtk_paned_pack2(GTK_PANED(hpaned1), dpanel, TRUE, TRUE); - ditem = gtk_dock_item_new(_("Symbols"), get_panel(PNT_SYMBOLS)); - gtk_dock_panel_add_item(dpanel, ditem); + place_all_panels_in_editor(dpanel); + ditem = gtk_dock_item_new(_("Registers"), get_panel(PNT_REGISTERS)); gtk_dock_panel_add_item(dpanel, ditem); @@ -452,8 +461,6 @@ GtkWidget *create_editor(void) - - /* Panneau inférieur */ @@ -785,7 +792,9 @@ void mcb_view_change_support(GtkRadioMenuItem *menuitem, GObject *ref) title = g_openida_binary_to_string(binary); ditem = gtk_dock_panel_item_from_name(dpanel, strrchr(title, '/') + 1); - gtk_dock_panel_replace_item_content(dpanel, ditem, panel); + gtk_dock_item_set_panel(ditem, panel); + + notify_panels_of_view_change(binview, true); } @@ -1223,3 +1232,99 @@ void update_debug_menu_items(GObject *ref, gboolean stopped) gtk_widget_set_sensitive(submenuitem, stopped); } + + + + + + + + + +/****************************************************************************** +* * +* Paramètres : panel = panneau de support des éléments concerné. * +* item = nouvel élément présenté à l'affichage. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit au changement d'onglet d'un panneau quelconque. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void on_dock_item_switch(GtkDockPanel *panel, GtkDockItem *item, GObject *ref) +{ + GtkWidget *widget; /* Support réel à traiter */ + GOpenidaBinary *binary; /* Binaire en cours d'édition */ + + widget = gtk_dock_item_get_panel(item); + + if (GTK_IS_SCROLLED_WINDOW(widget)) + widget = gtk_bin_get_child(GTK_BIN(widget)); + + if (GTK_IS_VIEWPORT(widget)) + widget = gtk_bin_get_child(GTK_BIN(widget)); + + if (GTK_IS_BIN_VIEW(widget)) + { + binary = gtk_bin_view_get_binary(GTK_BIN_VIEW(widget)); + + g_object_set_data(ref, "current_binary", binary); + g_object_set_data(ref, "binview", widget); + + refresh_editor_menus(ref, binary, GTK_BIN_VIEW(widget)); + + notify_panels_of_view_change(GTK_BIN_VIEW(widget), false); + + } + +} + + +/****************************************************************************** +* * +* Paramètres : ref = adresse de l'espace de référencement global. * +* binary = représentation de contenu binaire active. * +* view = type de visualisation courante. * +* * +* Description : Met en concordance les menus avec l'édition courante. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void refresh_editor_menus(GObject *ref, GOpenidaBinary *binary, GtkBinView *view) +{ + GtkCheckMenuItem *menuitem; /* Menu à coche à traiter */ + + /* Affichage : type de vue */ + + menuitem = GTK_CHECK_MENU_ITEM(g_object_get_data(ref, "textview")); + g_signal_handlers_disconnect_by_func(menuitem, G_CALLBACK(mcb_view_change_support), ref); + + menuitem = GTK_CHECK_MENU_ITEM(g_object_get_data(ref, "graphview")); + g_signal_handlers_disconnect_by_func(menuitem, G_CALLBACK(mcb_view_change_support), ref); + + if (GTK_IS_BLOCK_VIEW(view)) + { + menuitem = GTK_CHECK_MENU_ITEM(g_object_get_data(ref, "textview")); + gtk_check_menu_item_set_active(menuitem, TRUE); + } + else + { + menuitem = GTK_CHECK_MENU_ITEM(g_object_get_data(ref, "graphview")); + gtk_check_menu_item_set_active(menuitem, TRUE); + } + + menuitem = GTK_CHECK_MENU_ITEM(g_object_get_data(ref, "textview")); + g_signal_connect(menuitem, "toggled", G_CALLBACK(mcb_view_change_support), ref); + + menuitem = GTK_CHECK_MENU_ITEM(g_object_get_data(ref, "graphview")); + g_signal_connect(menuitem, "toggled", G_CALLBACK(mcb_view_change_support), ref); + +} |