diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/editor.c | 17 | ||||
| -rw-r--r-- | src/gtkext/gtkbufferview-int.h | 3 | ||||
| -rw-r--r-- | src/gtkext/gtkbufferview.c | 10 | ||||
| -rw-r--r-- | src/gtkext/gtkdockstation.c | 13 | ||||
| -rw-r--r-- | src/gtkext/gtkdockstation.h | 4 | ||||
| -rw-r--r-- | src/gtkext/gtkviewpanel-int.h | 3 | ||||
| -rw-r--r-- | src/gtkext/gtkviewpanel.c | 89 | ||||
| -rw-r--r-- | src/gtkext/gtkviewpanel.h | 12 | ||||
| -rw-r--r-- | src/gui/editem.c | 23 | ||||
| -rw-r--r-- | src/gui/editem.h | 5 | ||||
| -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 | ||||
| -rw-r--r-- | src/gui/panels/panel.c | 20 | ||||
| -rw-r--r-- | src/gui/panels/panel.h | 2 | 
15 files changed, 283 insertions, 62 deletions
diff --git a/src/editor.c b/src/editor.c index 284b16c..936b9a1 100644 --- a/src/editor.c +++ b/src/editor.c @@ -143,7 +143,7 @@ void update_debug_menu_items(GObject *, gboolean);  /* Réagit au changement d'onglet d'un panneau quelconque. */ -static void on_dock_item_switch(GtkDockPanel *, GDockItem *, GObject *); +static void on_dock_item_switch(GtkDockPanel *, GtkWidget *, GObject *);  /* Met en concordance les menus avec l'édition courante. */  static void refresh_editor_menus(GObject *, GOpenidaBinary *, GtkBinView *); @@ -263,6 +263,8 @@ GtkWidget *create_editor(void)      /* Intégration des menus */      editem = g_menu_bar_new(ref, accgroup); +    register_editor_item(editem); +      menuboard = g_editor_item_get_widget(editem);      gtk_box_pack_start(GTK_BOX(vbox1), menuboard, FALSE, FALSE, 0); @@ -463,7 +465,7 @@ GtkWidget *create_editor(void)      {          GtkWidget *support; -        support = init_panels2(); +        support = init_panels2(G_CALLBACK(on_dock_item_switch), ref);          gtk_box_pack_start(GTK_BOX(vbox1), support, TRUE, TRUE, 0);          load_main_panels(); @@ -1416,14 +1418,11 @@ void update_debug_menu_items(GObject *ref, gboolean stopped)  *                                                                             *  ******************************************************************************/ -static void on_dock_item_switch(GtkDockPanel *panel, GDockItem *item, GObject *ref) +static void on_dock_item_switch(GtkDockPanel *panel, GtkWidget *widget, GObject *ref)  { -    GtkWidget *widget;                      /* Support réel à traiter      */      GOpenidaBinary *old_binary;             /* Ancien binaire édité        */      GOpenidaBinary *binary;                 /* Binaire en cours d'édition  */ -    widget = g_dock_item_get_panel(item); -      if (GTK_IS_SCROLLED_WINDOW(widget))          widget = gtk_bin_get_child(GTK_BIN(widget)); @@ -1439,15 +1438,15 @@ static void on_dock_item_switch(GtkDockPanel *panel, GDockItem *item, GObject *r          if (old_binary != binary)          { -            notify_panels_of_binary_change(binary); +            //notify_panels_of_binary_change(binary);              change_editor_items_current_binary(ref, binary);          }          change_editor_items_current_view(ref, GTK_VIEW_PANEL(widget)); -        refresh_editor_menus(ref, binary, GTK_BIN_VIEW(widget)); +        //refresh_editor_menus(ref, binary, GTK_BIN_VIEW(widget)); -        notify_panels_of_view_change(GTK_VIEW_PANEL(widget), false); +        //notify_panels_of_view_change(GTK_VIEW_PANEL(widget), false);      } diff --git a/src/gtkext/gtkbufferview-int.h b/src/gtkext/gtkbufferview-int.h index 31b911e..db27b9e 100644 --- a/src/gtkext/gtkbufferview-int.h +++ b/src/gtkext/gtkbufferview-int.h @@ -40,9 +40,6 @@ struct _GtkBufferView      GCodeBuffer *buffer;                    /* Code sous forme de texte    */      GBufferView *buffer_view;               /* Affichage de cette forme    */ -    bool *display_addr;                     /* Affichage des adresses ?    */ -    bool *display_code;                     /* Affichage du code binaire ? */ -      gint line_height;                       /* Hauteur maximale des lignes */      gint left_margin;                       /* Marge gauche + espace       */      gint left_text;                         /* Début d'impression du code  */ diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c index 6a2e93d..3e58500 100644 --- a/src/gtkext/gtkbufferview.c +++ b/src/gtkext/gtkbufferview.c @@ -181,7 +181,8 @@ static void gtk_buffer_view_size_request(GtkWidget *widget, GtkRequisition *requ      if (view->buffer_view != NULL)          g_buffer_view_get_size(view->buffer_view,                                 &requisition->width, &requisition->height, -                               *view->display_addr, *view->display_code); +                               *GTK_VIEW_PANEL(view)->display_addr, +                               *GTK_VIEW_PANEL(view)->display_code);  } @@ -225,7 +226,7 @@ static void gtk_buffer_view_size_allocate(GtkWidget *widget, GtkAllocation *allo      view = GTK_BUFFER_VIEW(widget);      g_buffer_view_get_size(view->buffer_view, &width, &height, -                           *view->display_addr, *view->display_code); +                           *panel->display_addr, *panel->display_code);      gtk_view_panel_compute_allocation(panel, &valloc); @@ -324,7 +325,7 @@ static gboolean gtk_buffer_view_expose(GtkWidget *widget, GdkEventExpose *event)      if (view->buffer_view != NULL)          g_buffer_view_draw(view->buffer_view, event, pview->gc, fake_x, fake_y, -                           *view->display_addr, *view->display_code); +                           *pview->display_addr, *pview->display_code);      gdk_window_end_paint(drawable); @@ -383,9 +384,6 @@ void gtk_buffer_view_attach_buffer(GtkBufferView *view, GCodeBuffer *buffer, boo      view->buffer_view = g_buffer_view_new(view->buffer); -    view->display_addr = addr; -    view->display_code = code; -      //gdk_threads_enter();      /* Taille des marges */ diff --git a/src/gtkext/gtkdockstation.c b/src/gtkext/gtkdockstation.c index afea11d..4b837bc 100644 --- a/src/gtkext/gtkdockstation.c +++ b/src/gtkext/gtkdockstation.c @@ -29,6 +29,7 @@  #include "easygtk.h" +#include "iodamarshal.h" @@ -61,6 +62,13 @@ G_DEFINE_TYPE(GtkDockStation, gtk_dock_station, GTK_TYPE_VBOX)  static void gtk_dock_station_class_init(GtkDockStationClass *class)  { +    g_signal_new("switch-widget", +                 GTK_TYPE_DOCK_STATION, +                 G_SIGNAL_RUN_LAST, +                 G_STRUCT_OFFSET(GtkDockStationClass, switch_widget), +                 NULL, NULL, +                 g_cclosure_user_marshal_VOID__OBJECT, +                 G_TYPE_NONE, 1, GTK_TYPE_WIDGET);  } @@ -175,7 +183,7 @@ static gboolean gtk_dock_station_switch_panel(GtkNotebook *notebook, GtkNotebook      gtk_dock_panel_update_title(GTK_DOCK_STATION(data), widget, caption); -    //g_signal_emit_by_name(GTK_DOCK_PANEL(data), "switch-item", ditem); +    g_signal_emit_by_name(GTK_DOCK_STATION(data), "switch-widget", widget);      return TRUE; @@ -214,6 +222,9 @@ void gtk_dock_panel_add_widget(GtkDockStation *station, GtkWidget *widget, const      gtk_dock_panel_update_title(station, widget, caption); +    if (gtk_notebook_get_n_pages(station->notebook) == 1) +        g_signal_emit_by_name(station, "switch-widget", widget); +  } diff --git a/src/gtkext/gtkdockstation.h b/src/gtkext/gtkdockstation.h index c92f43d..41adacc 100644 --- a/src/gtkext/gtkdockstation.h +++ b/src/gtkext/gtkdockstation.h @@ -59,6 +59,10 @@ struct _GtkDockStationClass  {      GtkVBoxClass parent_class;              /* Présence obligatoire en 1er */ +    /* Signaux */ + +    void (* switch_widget) (GtkDockStation *, GtkWidget *); +  }; diff --git a/src/gtkext/gtkviewpanel-int.h b/src/gtkext/gtkviewpanel-int.h index 6ef3567..79f6f4c 100644 --- a/src/gtkext/gtkviewpanel-int.h +++ b/src/gtkext/gtkviewpanel-int.h @@ -56,6 +56,9 @@ struct _GtkViewPanel      attach_binary_fc attach;                /* Association avec un binaire */      scroll_fc scroll;                       /* Défilement du contenu       */ +    bool *display_addr;                     /* Affichage des adresses ?    */ +    bool *display_code;                     /* Affichage du code binaire ? */ +  };  /* Composant d'affichage générique (classe) */ diff --git a/src/gtkext/gtkviewpanel.c b/src/gtkext/gtkviewpanel.c index 7ffeccc..9ccf209 100644 --- a/src/gtkext/gtkviewpanel.c +++ b/src/gtkext/gtkviewpanel.c @@ -339,6 +339,9 @@ void gtk_view_panel_attach_binary(GtkViewPanel *panel, GOpenidaBinary *binary, b      g_object_ref(G_OBJECT(binary));      panel->binary = binary; +    panel->display_addr = addr; +    panel->display_code = code; +      panel->attach(panel, binary, addr, code);  } @@ -348,6 +351,92 @@ void gtk_view_panel_attach_binary(GtkViewPanel *panel, GOpenidaBinary *binary, b  *                                                                             *  *  Paramètres  : panel = composant GTK à consulter.                           *  *                                                                             * +*  Description : Indique si les adresses doivent apparaître dans le rendu.    * +*                                                                             * +*  Retour      : Consigne d'affichage.                                        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool gtk_view_panel_get_addresses_display(const GtkViewPanel *panel) +{ +    return *panel->display_addr; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : panel = composant GTK à consulter.                           * +*                state = nouvel état à prendre en compte.                     * +*                                                                             * +*  Description : Définit si les adresses doivent apparaître dans le rendu.    * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +void gtk_view_panel_set_addresses_display(const GtkViewPanel *panel, bool state) +{ +    if (*panel->display_addr != state) +    { +        *panel->display_addr = state; +        gtk_widget_queue_draw(GTK_WIDGET(panel)); +    } + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : panel = composant GTK à consulter.                           * +*                                                                             * +*  Description : Indique si le code doit apparaître dans le rendu.            * +*                                                                             * +*  Retour      : Consigne d'affichage.                                        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool gtk_view_panel_get_code_display(const GtkViewPanel *panel) +{ +    return *panel->display_code; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : panel = composant GTK à consulter.                           * +*                state = nouvel état à prendre en compte.                     * +*                                                                             * +*  Description : Définit si le code doit apparaître dans le rendu.            * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +void gtk_view_panel_set_code_display(const GtkViewPanel *panel, bool state) +{ +    if (*panel->display_code != state) +    { +        *panel->display_code = state; +        gtk_widget_queue_draw(GTK_WIDGET(panel)); +    } + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : panel = composant GTK à consulter.                           * +*                                                                             *  *  Description : Fournit le binaire associé à la représentation.              *  *                                                                             *  *  Retour      : Représentation de contenu binaire.                           * diff --git a/src/gtkext/gtkviewpanel.h b/src/gtkext/gtkviewpanel.h index d2b69af..6edee69 100644 --- a/src/gtkext/gtkviewpanel.h +++ b/src/gtkext/gtkviewpanel.h @@ -53,6 +53,18 @@ GType gtk_view_panel_get_type(void);  /* Associe à un panneau d'affichage un binaire chargé. */  void gtk_view_panel_attach_binary(GtkViewPanel *, GOpenidaBinary *, bool *, bool *); +/* Indique si les adresses doivent apparaître dans le rendu. */ +bool gtk_view_panel_get_addresses_display(const GtkViewPanel *); + +/* Définit si les adresses doivent apparaître dans le rendu. */ +void gtk_view_panel_set_addresses_display(const GtkViewPanel *, bool); + +/* Indique si le code doit apparaître dans le rendu. */ +bool gtk_view_panel_get_code_display(const GtkViewPanel *); + +/* Définit si le code doit apparaître dans le rendu. */ +void gtk_view_panel_set_code_display(const GtkViewPanel *, bool); +  /* Fournit le binaire associé à la représentation. */  GOpenidaBinary *gtk_view_panel_get_binary(const GtkViewPanel *); diff --git a/src/gui/editem.c b/src/gui/editem.c index ac3461c..4afd7bd 100644 --- a/src/gui/editem.c +++ b/src/gui/editem.c @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * editem.c - gestion des différents éléments réactifs de l'éditeurs   * - * Copyright (C) 2010-2011 Cyrille Bagard + * Copyright (C) 2010-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -113,6 +113,25 @@ GtkWidget *g_editor_item_get_widget(const GEditorItem *item)  } +/****************************************************************************** +*                                                                             * +*  Paramètres  : item = instance à consulter.                                 * +*                                                                             * +*  Description : Fournit l'affichage de binaire courant.                      * +*                                                                             * +*  Retour      : Instance en place ou NULL si aucune.                         * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +GtkViewPanel *g_editor_item_get_current_view(const GEditorItem *item) +{ +    return g_object_get_data(item->ref, "current_view"); + +} + +  /* ---------------------------------------------------------------------------------- */  /*                              MANIPULATION D'ENSEMBLES                              */ @@ -184,7 +203,7 @@ void change_editor_items_current_view(GObject *ref, GtkViewPanel *view)      g_object_set_data(ref, "current_view", view);      editem_list_for_each(iter, _editem_list) -        if (iter->update_binary != NULL) +        if (iter->update_view != NULL)              iter->update_view(iter, view);  } diff --git a/src/gui/editem.h b/src/gui/editem.h index 267a679..40be0c7 100644 --- a/src/gui/editem.h +++ b/src/gui/editem.h @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * editem.h - prototypes pour la gestion des différents éléments réactifs de l'éditeurs   * - * Copyright (C) 2010-2011 Cyrille Bagard + * Copyright (C) 2010-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -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 l'affichage de binaire courant. */ +GtkViewPanel *g_editor_item_get_current_view(const GEditorItem *); +  /* ---------------------------- MANIPULATION D'ENSEMBLES ---------------------------- */ 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 *); diff --git a/src/gui/panels/panel.c b/src/gui/panels/panel.c index 8cc79ce..584ec09 100644 --- a/src/gui/panels/panel.c +++ b/src/gui/panels/panel.c @@ -37,10 +37,14 @@ -/* Support de fond pour les composants */ +/* Support de fond pour les composants. */  static GtkWidget *_support; -/* Liste des panneaux en place */ +/* Procédure à appeler lors des changements de panneaux. */ +static GCallback _handler; +static gpointer _data; + +/* Liste des panneaux en place. */  static GPanelItem *_panels_list = NULL; @@ -261,6 +265,7 @@ void g_panel_item_dock(GPanelItem *item)          gtk_container_add(GTK_CONTAINER(_support), GTK_WIDGET(class->first));          station = gtk_dock_station_new(); +        g_signal_connect(station, "switch-widget", _handler, _data);          gtk_widget_show(station);          gtk_container_add(GTK_CONTAINER(class->first), station); @@ -425,6 +430,8 @@ static void create_panel_division(GtkWidget *parent, GtkWidget *child1, const ch      if (!GTK_IS_DOCK_STATION(child1))      {          station = gtk_dock_station_new(); +        g_signal_connect(station, "switch-widget", _handler, _data); +          gtk_widget_show(station);          gtk_dock_panel_add_widget(GTK_DOCK_STATION(station), child1, name1); @@ -435,6 +442,8 @@ static void create_panel_division(GtkWidget *parent, GtkWidget *child1, const ch      if (!GTK_IS_DOCK_STATION(child2))      {          station = gtk_dock_station_new(); +        g_signal_connect(station, "switch-widget", _handler, _data); +          gtk_widget_show(station);          gtk_dock_panel_add_widget(GTK_DOCK_STATION(station), child2, name2); @@ -609,7 +618,8 @@ static void _g_panel_item_dock(GtkWidget *base, GEditorItem *item, const char *p  /******************************************************************************  *                                                                             * -*  Paramètres  : -                                                            * +*  Paramètres  : handler = procédure à réveiller en cas de changements.       * +*                data    = donnée à faire suivre.                             *  *                                                                             *  *  Description : Prépare le terrain pour l'affichage central.                 *  *                                                                             * @@ -619,7 +629,7 @@ static void _g_panel_item_dock(GtkWidget *base, GEditorItem *item, const char *p  *                                                                             *  ******************************************************************************/ -GtkWidget *init_panels2(void) +GtkWidget *init_panels2(GCallback handler, gpointer data)  {      GtkWidget *result;                      /* Support à retourner         */ @@ -627,6 +637,8 @@ GtkWidget *init_panels2(void)      gtk_widget_show(result);      _support = result; +    _handler = handler; +    _data = data;      return result; diff --git a/src/gui/panels/panel.h b/src/gui/panels/panel.h index afdce93..dd9ae5e 100644 --- a/src/gui/panels/panel.h +++ b/src/gui/panels/panel.h @@ -63,7 +63,7 @@ void g_panel_item_dock(GPanelItem *);  /* Prépare le terrain pour l'affichage central. */ -GtkWidget *init_panels2(void); +GtkWidget *init_panels2(GCallback, gpointer);  /* Charge les principaux panneaux de l'éditeur. */  void load_main_panels(void);  | 
