diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/analysis/binary-int.h | 3 | ||||
| -rw-r--r-- | src/analysis/binary.c | 86 | ||||
| -rw-r--r-- | src/analysis/binary.h | 12 | ||||
| -rw-r--r-- | src/glibext/gbufferline.c | 20 | ||||
| -rw-r--r-- | src/glibext/gbufferline.h | 6 | ||||
| -rw-r--r-- | src/glibext/gcodebuffer.c | 47 | ||||
| -rw-r--r-- | src/glibext/gcodebuffer.h | 4 | ||||
| -rw-r--r-- | src/gtkext/gtkblockview.c | 8 | ||||
| -rw-r--r-- | src/gtkext/gtkbufferview.c | 15 | ||||
| -rw-r--r-- | src/gtkext/gtkbufferview.h | 2 | ||||
| -rw-r--r-- | src/gtkext/gtkgraphview.c | 9 | ||||
| -rw-r--r-- | src/gtkext/gtksourceview.c | 8 | ||||
| -rw-r--r-- | src/gtkext/gtkviewpanel-int.h | 8 | ||||
| -rw-r--r-- | src/gtkext/gtkviewpanel.c | 111 | ||||
| -rw-r--r-- | src/gtkext/gtkviewpanel.h | 11 | ||||
| -rw-r--r-- | src/gui/menus/view.c | 87 | ||||
| -rw-r--r-- | src/project.c | 4 | 
17 files changed, 192 insertions, 249 deletions
diff --git a/src/analysis/binary-int.h b/src/analysis/binary-int.h index 28d4594..fa06a25 100644 --- a/src/analysis/binary-int.h +++ b/src/analysis/binary-int.h @@ -77,7 +77,7 @@ struct _GLoadedBinary      size_t decbuf_count;                    /* Taille des tableaux         */      size_t defsrc;                          /* Fichier source principal    */ -    bool text_display[BVW_COUNT][2];        /* Position et code binaire #1 */ +    bool col_display[BVW_COUNT][BLC_DISPLAY];/* Position et code binaire   */      bool lines_display;                     /* Affichage des lignes        */  }; @@ -90,6 +90,7 @@ struct _GLoadedBinaryClass      /* Signaux */      void (* disassembly_done) (GLoadedBinary *); +    void (* display_changed) (GLoadedBinary *, BinaryView, BufferLineColumn);  }; diff --git a/src/analysis/binary.c b/src/analysis/binary.c index 18dca8c..6c8bcba 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -41,6 +41,7 @@  #include "../common/extstr.h"  #include "../common/cpp.h"  #include "../core/params.h" +#include "../glibext/chrysamarshal.h" @@ -117,6 +118,14 @@ static void g_loaded_binary_class_init(GLoadedBinaryClass *klass)                   g_cclosure_marshal_VOID__VOID,                   G_TYPE_NONE, 0); +    g_signal_new("display-changed", +                 G_TYPE_LOADED_BINARY, +                 G_SIGNAL_RUN_LAST, +                 G_STRUCT_OFFSET(GLoadedBinaryClass, display_changed), +                 NULL, NULL, +                 g_cclosure_user_marshal_VOID__ENUM_ENUM, +                 G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); +  } @@ -144,12 +153,15 @@ static void g_loaded_binary_init(GLoadedBinary *binary)      binary->storages[DBF_SEGMENTS_DISPLAY] = DBS_ALL_LOCAL;      binary->storages[DBF_BOOKMARKS] = DBS_ALL_LOCAL; -    binary->text_display[BVW_BLOCK][0] = true; -    binary->text_display[BVW_BLOCK][1] = true; -    binary->text_display[BVW_BLOCK][2] = true; -    binary->text_display[BVW_GRAPH][0] = false; -    binary->text_display[BVW_GRAPH][1] = false; -    binary->text_display[BVW_GRAPH][2] = false; +    binary->col_display[BVW_BLOCK][BLC_PHYSICAL] = true; +    binary->col_display[BVW_BLOCK][BLC_VIRTUAL] = true; +    binary->col_display[BVW_BLOCK][BLC_BINARY] = true; +    binary->col_display[BVW_GRAPH][BLC_PHYSICAL] = false; +    binary->col_display[BVW_GRAPH][BLC_VIRTUAL] = false; +    binary->col_display[BVW_GRAPH][BLC_BINARY] = false; +    binary->col_display[BVW_SOURCE][BLC_PHYSICAL] = false; +    binary->col_display[BVW_SOURCE][BLC_VIRTUAL] = false; +    binary->col_display[BVW_SOURCE][BLC_BINARY] = false;      binary->lines_display = true; @@ -1305,39 +1317,60 @@ GCodeBuffer *g_loaded_binary_get_disassembled_buffer(const GLoadedBinary *binary  /******************************************************************************  *                                                                             *  *  Paramètres  : binary = élément binaire à consulter.                        * -*                view   = type de représentation visée.                       * +*                index  = indice du fichier à retrouver.                      *  *                                                                             * -*  Description : Indique si les adresses doivent apparaître dans le rendu.    * +*  Description : Fournit le tampon associé au contenu d'un fichier source.    *  *                                                                             * -*  Retour      : Consigne d'affichage. [OUT]                                  * +*  Retour      : Tampon mis en place ou NULL si aucun (!).                    *  *                                                                             *  *  Remarques   : -                                                            *  *                                                                             *  ******************************************************************************/ -bool *g_loaded_binary_display_addresses_in_text(GLoadedBinary *binary, BinaryView view) +GCodeBuffer *g_loaded_binary_get_decompiled_buffer(const GLoadedBinary *binary, size_t index)  { -    return &binary->text_display[view][0]; +    GCodeBuffer *result;                    /* Tampon à retourner          */ + +    if (binary->decbuf_count == 0) +        result = NULL; + +    else if (index >= binary->decbuf_count) +        result = binary->dec_buffers[binary->defsrc]; + +    else +        result = binary->dec_buffers[index]; + +    return result;  }  /******************************************************************************  *                                                                             * -*  Paramètres  : binary = élément binaire à consulter.                        * +*  Paramètres  : binary = élément binaire à mettre à jour.                    *  *                view   = type de représentation visée.                       * +*                col    = indice de colonne dont l'affichage est à modifier.  * +*                state  = nouvel état de l'affichage.                         *  *                                                                             * -*  Description : Indique si le code doit apparaître dans le rendu.            * +*  Description : Définit si une colonne donnée doit apparaître dans le rendu. *  *                                                                             * -*  Retour      : Consigne d'affichage. [OUT]                                  * +*  Retour      : -                                                            *  *                                                                             *  *  Remarques   : -                                                            *  *                                                                             *  ******************************************************************************/ -bool *g_loaded_binary_display_code_in_text(GLoadedBinary *binary, BinaryView view) +void g_loaded_binary_set_column_display(GLoadedBinary *binary, BinaryView view, BufferLineColumn col, bool state)  { -    return &binary->text_display[view][1]; +    bool old;                               /* Ancien état à remplacer     */ + +    old = binary->col_display[view][col]; + +    if (state != old) +    { +        binary->col_display[view][col] = state; +        g_signal_emit_by_name(binary, "display-changed", view, col); +    }  } @@ -1345,30 +1378,19 @@ bool *g_loaded_binary_display_code_in_text(GLoadedBinary *binary, BinaryView vie  /******************************************************************************  *                                                                             *  *  Paramètres  : binary = élément binaire à consulter.                        * -*                index  = indice du fichier à retrouver.                      * +*                view   = type de représentation visée.                       *  *                                                                             * -*  Description : Fournit le tampon associé au contenu d'un fichier source.    * +*  Description : Indique quelles colonnes doivent apparaître dans le rendu.   *  *                                                                             * -*  Retour      : Tampon mis en place ou NULL si aucun (!).                    * +*  Retour      : Consigne d'affichage. [OUT]                                  *  *                                                                             *  *  Remarques   : -                                                            *  *                                                                             *  ******************************************************************************/ -GCodeBuffer *g_loaded_binary_get_decompiled_buffer(const GLoadedBinary *binary, size_t index) +const bool *g_loaded_binary_get_column_display(GLoadedBinary *binary, BinaryView view)  { -    GCodeBuffer *result;                    /* Tampon à retourner          */ - -    if (binary->decbuf_count == 0) -        result = NULL; - -    else if (index >= binary->decbuf_count) -        result = binary->dec_buffers[binary->defsrc]; - -    else -        result = binary->dec_buffers[index]; - -    return result; +    return binary->col_display[view];  } diff --git a/src/analysis/binary.h b/src/analysis/binary.h index 17da200..8574f28 100644 --- a/src/analysis/binary.h +++ b/src/analysis/binary.h @@ -169,15 +169,15 @@ GArchInstruction *g_loaded_binary_get_instructions(const GLoadedBinary *);  /* Fournit le tampon associé au contenu assembleur d'un binaire. */  GCodeBuffer *g_loaded_binary_get_disassembled_buffer(const GLoadedBinary *); -/* Indique si les adresses doivent apparaître dans le rendu. */ -bool *g_loaded_binary_display_addresses_in_text(GLoadedBinary *, BinaryView); - -/* Indique si le code doit apparaître dans le rendu. */ -bool *g_loaded_binary_display_code_in_text(GLoadedBinary *, BinaryView); -  /* Fournit le tampon associé au contenu d'un fichier source. */  GCodeBuffer *g_loaded_binary_get_decompiled_buffer(const GLoadedBinary *, size_t); +/* Définit si une colonne donnée doit apparaître dans le rendu. */ +void g_loaded_binary_set_column_display(GLoadedBinary *, BinaryView, BufferLineColumn, bool); + +/* Indique quelles colonnes doivent apparaître dans le rendu. */ +const bool *g_loaded_binary_get_column_display(GLoadedBinary *, BinaryView); +  /* Indique si les lignes doivent apparaître dans le rendu. */  bool *g_loaded_binary_display_decomp_lines(GLoadedBinary *); diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c index 758dff7..cb5c267 100644 --- a/src/glibext/gbufferline.c +++ b/src/glibext/gbufferline.c @@ -717,11 +717,9 @@ gint g_buffer_line_get_column_width(GBufferLine *line, BufferLineColumn index)  /******************************************************************************  *                                                                             * -*  Paramètres  : line  = ligne à venir compléter.                             * -*                merge = précise la première colonne marquant la fusion. [OUT]* -*                phys  = indique si les positions doivent être affichées.     * -*                virt  = indique si les adresses doivent être affichées.      * -*                code  = indique si le code binaire doit être affiché.        * +*  Paramètres  : line    = ligne à venir compléter.                           * +*                merge   = précise la première colonne marquant la fusion. [OUT]* +*                display = règles d'affichage des colonnes modulables.        *  *                                                                             *  *  Description : Fournit la dernière largeur d'une ligne avec fusion.         *  *                                                                             * @@ -731,7 +729,7 @@ gint g_buffer_line_get_column_width(GBufferLine *line, BufferLineColumn index)  *                                                                             *  ******************************************************************************/ -gint g_buffer_line_get_merge_width(GBufferLine *line, BufferLineColumn *merge, bool phys, bool virt, bool code) +gint g_buffer_line_get_merge_width(GBufferLine *line, BufferLineColumn *merge, const bool *display)  {      gint result;                            /* Largeur à retourner         */ @@ -779,9 +777,7 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start)  *                max_widths = largeurs de colonne à respecter.                *  *                x_init     = abscisse du point d'impression de départ.       *  *                y          = ordonnée du point d'impression.                 * -*                phys       = indique si les positions doivent être affichées.* -*                virt       = indique si les adresses doivent être affichées. * -*                code       = indique si le code binaire doit être affiché.   * +*                display    = règles d'affichage des colonnes modulables.     *  *                                                                             *  *  Description : Imprime la ligne de texte représentée.                       *  *                                                                             * @@ -791,7 +787,7 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start)  *                                                                             *  ******************************************************************************/ -void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths[BLC_COUNT], gint x_init, gint y, bool phys, bool virt, bool code) +void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths[BLC_COUNT], gint x_init, gint y, const bool *display)  {      GBufferLineClass *class;                /* Stockage de briques de base */      gint x;                                 /* Point de départ d'impression*/ @@ -806,9 +802,7 @@ void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths      for (i = 0; i < BLC_COUNT; i++)      { -        if (i == BLC_PHYSICAL && !phys) continue; -        if (i == BLC_VIRTUAL && !virt) continue; -        if (i == BLC_BINARY && !code) continue; +        if (i < BLC_DISPLAY && !display[i]) continue;          draw_segments_of_column(&line->columns[i], cairo, x, y); diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h index b96f7a6..8e436d9 100644 --- a/src/glibext/gbufferline.h +++ b/src/glibext/gbufferline.h @@ -69,6 +69,8 @@ typedef enum _BufferLineColumn  } BufferLineColumn; +/* Première colonne toujours affichée */ +#define BLC_DISPLAY BLC_ASSEMBLY_HEAD  /* Confort pour l'insertion de texte */ @@ -113,13 +115,13 @@ char *g_buffer_line_get_text(const GBufferLine *);  gint g_buffer_line_get_column_width(GBufferLine *, BufferLineColumn);  /* Fournit la dernière largeur d'une ligne avec fusion. */ -gint g_buffer_line_get_merge_width(GBufferLine *, BufferLineColumn *, bool, bool, bool); +gint g_buffer_line_get_merge_width(GBufferLine *, BufferLineColumn *, const bool *);  /* Définit la colonne à partir de laquelle la fusion opère. */  void g_buffer_line_start_merge_at(GBufferLine *, BufferLineColumn);  /* Imprime la ligne de texte représentée. */ -void g_buffer_line_draw(GBufferLine *, cairo_t *, const gint [BLC_COUNT], gint, gint, bool, bool, bool); +void g_buffer_line_draw(GBufferLine *, cairo_t *, const gint [BLC_COUNT], gint, gint, const bool *);  /* Exporte la ligne de texte représentée. */  void g_buffer_line_export(GBufferLine *, int, BufferExportType, bool, bool, bool, bool); diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c index 0ac3bb3..1ea8f69 100644 --- a/src/glibext/gcodebuffer.c +++ b/src/glibext/gcodebuffer.c @@ -182,7 +182,7 @@ static void g_buffer_view_reset_required_height(GBufferView *);  static void g_buffer_view_reset_required_widths(GBufferView *);  /* Calcule les largeurs requises par une visualisation. */ -static void g_buffer_view_compute_required_widths(GBufferView *, bool, bool, bool); +static void g_buffer_view_compute_required_widths(GBufferView *, const bool *); @@ -893,9 +893,7 @@ static void g_buffer_view_compute_required_height(GBufferView *view)  /******************************************************************************  *                                                                             *  *  Paramètres  : view = visualisation à mettre à jour.                        * -*                phys = indique si les positions doivent être affichées.      * -*                virt = indique si les adresses doivent être affichées.       * -*                code = indique si le code binaire doit être affiché.         * +*                display = règles d'affichage des colonnes modulables.        *  *                                                                             *  *  Description : Calcule les largeurs requises par une visualisation.         *  *                                                                             * @@ -905,7 +903,7 @@ static void g_buffer_view_compute_required_height(GBufferView *view)  *                                                                             *  ******************************************************************************/ -static void g_buffer_view_compute_required_widths(GBufferView *view, bool phys, bool virt, bool code) +static void g_buffer_view_compute_required_widths(GBufferView *view, const bool *display)  {      GBufferLine **lines;                    /* Liste des lignes à traiter  */      size_t first;                           /* Première ligne intégrée     */ @@ -938,7 +936,7 @@ static void g_buffer_view_compute_required_widths(GBufferView *view, bool phys,                  view->max_widths[j] = MAX(view->max_widths[j], width);              } -            width = g_buffer_line_get_merge_width(lines[i], &merge, phys, virt, code); +            width = g_buffer_line_get_merge_width(lines[i], &merge, display);              view->last_width = MAX(view->last_width, width);              if (merge != BLC_COUNT)              { @@ -980,10 +978,8 @@ gint g_buffer_view_get_line_height(GBufferView *view)  /******************************************************************************  *                                                                             * -*  Paramètres  : view = visualisation à consulter.                            * -*                phys = indique si les positions doivent être affichées.      * -*                virt = indique si les adresses doivent être affichées.       * -*                code = indique si le code binaire doit être affiché.         * +*  Paramètres  : view    = visualisation à consulter.                         * +*                display = règles d'affichage des colonnes modulables.        *  *                                                                             *  *  Description : Fournit la largeur requise par une visualisation.            *  *                                                                             * @@ -993,7 +989,7 @@ gint g_buffer_view_get_line_height(GBufferView *view)  *                                                                             *  ******************************************************************************/ -gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code) +gint g_buffer_view_get_width(GBufferView *view, const bool *display)  {      gint result;                            /* Taille à retourner          */      gint col_width;                         /* Calcul selon les colonnes   */ @@ -1001,7 +997,7 @@ gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code)      BufferLineColumn i;                     /* Boucle de parcours          */      if (!WIDTHS_CACHED(view)) -        g_buffer_view_compute_required_widths(view, phys, virt, code); +        g_buffer_view_compute_required_widths(view, display);      result = view->left_text; @@ -1012,9 +1008,7 @@ gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code)      for (i = 0; i < BLC_COUNT; i++)      { -        if (i == BLC_PHYSICAL && !phys) continue; -        if (i == BLC_VIRTUAL && !virt) continue; -        if (i == BLC_BINARY && !code) continue; +        if (i < BLC_DISPLAY && !display[i]) continue;          col_width += view->max_widths[i]; @@ -1027,9 +1021,7 @@ gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code)      for (i = 0; i < view->last_merge; i++)      { -        if (i == BLC_PHYSICAL && !phys) continue; -        if (i == BLC_VIRTUAL && !virt) continue; -        if (i == BLC_BINARY && !code) continue; +        if (i < BLC_DISPLAY && !display[i]) continue;          full_width += view->max_widths[i]; @@ -1344,14 +1336,12 @@ void g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y)  /******************************************************************************  *                                                                             * -*  Paramètres  : view   = visualisation à représenter.                        * -*                cr     = contexte graphique dédié à la procédure.            * -*                fake_x = abscisse réelle du point 0 à l'écran.               * -*                fake_y = ordonnée réelle du point 0 à l'écran.               * -*                area   = position et surface à traiter.                      * -*                phys   = indique si les positions doivent être affichées.    * -*                virt   = indique si les adresses doivent être affichées.     * -*                code   = indique si le code binaire doit être affiché.       * +*  Paramètres  : view    = visualisation à représenter.                       * +*                cr      = contexte graphique dédié à la procédure.           * +*                fake_x  = abscisse réelle du point 0 à l'écran.              * +*                fake_y  = ordonnée réelle du point 0 à l'écran.              * +*                area    = position et surface à traiter.                     * +*                display = règles d'affichage des colonnes modulables.        *  *                                                                             *  *  Description : Imprime la visualisation du tampon de code désassemblé.      *  *                                                                             * @@ -1361,7 +1351,7 @@ void g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y)  *                                                                             *  ******************************************************************************/ -void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint fake_y, const cairo_rectangle_int_t *area, bool phys, bool virt, bool code) +void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint fake_y, const cairo_rectangle_int_t *area, const bool *display)  {      gint real_x;                            /* Abscisse réelle pour tampon */      gint real_y;                            /* Ordonnée réelle pour tampon */ @@ -1397,8 +1387,7 @@ void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint                  view->drawing_extra(lines[i], drawable, gc, fake_x, y, view->drawing_data);              */ -            g_buffer_line_draw(lines[i], cr, -                               view->max_widths, real_x, y, phys, virt, code); +            g_buffer_line_draw(lines[i], cr, view->max_widths, real_x, y, display);              y += view->line_height; diff --git a/src/glibext/gcodebuffer.h b/src/glibext/gcodebuffer.h index 472d403..1387eb9 100644 --- a/src/glibext/gcodebuffer.h +++ b/src/glibext/gcodebuffer.h @@ -123,7 +123,7 @@ GCodeBuffer *g_buffer_view_get_buffer(const GBufferView *);  gint g_buffer_view_get_line_height(GBufferView *);  /* Fournit la largeur requise par une visualisation. */ -gint g_buffer_view_get_width(GBufferView *, bool, bool, bool); +gint g_buffer_view_get_width(GBufferView *, const bool *);  /* Fournit la hauteur requise par une visualisation. */  gint g_buffer_view_get_height(const GBufferView *); @@ -141,7 +141,7 @@ bool g_buffer_view_unhighlight_segments(GBufferView *);  void g_buffer_view_highlight_segments(GBufferView *, gint, gint);  /* Imprime la visualisation du tampon de code désassemblé. */ -void g_buffer_view_draw(const GBufferView *, cairo_t *, gint, gint, const cairo_rectangle_int_t *, bool, bool, bool); +void g_buffer_view_draw(const GBufferView *, cairo_t *, gint, gint, const cairo_rectangle_int_t *, const bool *);  /* Fournit la ligne présente à une ordonnée donnée. */  GBufferLine *g_buffer_view_find_line_at(GBufferView *, gint, size_t *); diff --git a/src/gtkext/gtkblockview.c b/src/gtkext/gtkblockview.c index 5e0a4cf..c0004b5 100644 --- a/src/gtkext/gtkblockview.c +++ b/src/gtkext/gtkblockview.c @@ -59,7 +59,7 @@ static gboolean gtk_block_view_button_press_event(GtkBlockView *, GdkEventButton  static gboolean gtk_block_view_need_redraw(GBufferView *, GtkBlockView *);  /* Prend acte de l'association d'un binaire chargé. */ -static void gtk_block_view_attach_binary(GtkBlockView *, GLoadedBinary *, bool *, bool *); +static void gtk_block_view_attach_binary(GtkBlockView *, GLoadedBinary *); @@ -212,8 +212,6 @@ static gboolean gtk_block_view_need_redraw(GBufferView *view, GtkBlockView *bloc  *                                                                             *  *  Paramètres  : view   = composant GTK à mettre à jour.                      *  *                binary = binaire associé à intégrer.                         * -*                addr   = indique si les positions doivent être affichées.    * -*                code   = indique si le code binaire doit être affiché.       *  *                                                                             *  *  Description : Prend acte de l'association d'un binaire chargé.             *  *                                                                             * @@ -223,7 +221,7 @@ static gboolean gtk_block_view_need_redraw(GBufferView *view, GtkBlockView *bloc  *                                                                             *  ******************************************************************************/ -static void gtk_block_view_attach_binary(GtkBlockView *view, GLoadedBinary *binary, bool *addr, bool *code) +static void gtk_block_view_attach_binary(GtkBlockView *view, GLoadedBinary *binary)  {      GCodeBuffer *buffer;                    /* Tampon par défaut           */      GBufferView *bview;                     /* Vue sur ce même tampon      */ @@ -231,7 +229,7 @@ static void gtk_block_view_attach_binary(GtkBlockView *view, GLoadedBinary *bina      buffer = g_loaded_binary_get_disassembled_buffer(binary);      bview = g_buffer_view_new(buffer); -    gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(view), bview, addr, code); +    gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(view), bview);      g_signal_connect(G_OBJECT(bview), "need-redraw",                       G_CALLBACK(gtk_block_view_need_redraw), view); diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c index 4b515b4..d5780ed 100644 --- a/src/gtkext/gtkbufferview.c +++ b/src/gtkext/gtkbufferview.c @@ -380,8 +380,7 @@ static gboolean gtk_buffer_view_draw(GtkWidget *widget, cairo_t *cr)          fake_y = 0;          gtk_buffer_view_compute_fake_coord(view, &fake_x, &fake_y); -        g_buffer_view_draw(view->buffer_view, cr, fake_x, fake_y, &area, -                           *pview->display_phys, *pview->display_addr, *pview->display_code); +        g_buffer_view_draw(view->buffer_view, cr, fake_x, fake_y, &area, pview->display);      } @@ -459,10 +458,7 @@ static gboolean gtk_buffer_view_key_press(GtkWidget *widget, GdkEventKey *event)  static void gtk_buffer_view_compute_requested_size(GtkBufferView *view, gint *width, gint *height)  {      if (width != NULL && view->buffer_view != NULL) -        *width = g_buffer_view_get_width(view->buffer_view, -                                         *GTK_VIEW_PANEL(view)->display_phys, -                                         *GTK_VIEW_PANEL(view)->display_addr, -                                         *GTK_VIEW_PANEL(view)->display_code); +        *width = g_buffer_view_get_width(view->buffer_view, GTK_VIEW_PANEL(view)->display);      if (height != NULL && view->buffer_view != NULL)          *height = g_buffer_view_get_height(view->buffer_view); @@ -528,9 +524,6 @@ static void gtk_buffer_view_cache_glance(GtkBufferView *view, cairo_t *cairo, co  *                                                                             *  *  Paramètres  : view   = composant GTK à mettre à jour.                      *  *                buffer = tampon de lignes à encadrer.                        * -*                phys   = indique si les positions doivent être affichées.    * -*                virt   = indique si les adresses doivent être affichées.     * -*                code   = indique si le code binaire doit être affiché.       *  *                                                                             *  *  Description : Prend acte de l'association d'un tampon de lignes.           *  *                                                                             * @@ -540,7 +533,7 @@ static void gtk_buffer_view_cache_glance(GtkBufferView *view, cairo_t *cairo, co  *                                                                             *  ******************************************************************************/ -void gtk_buffer_view_attach_buffer(GtkBufferView *view, GBufferView *buffer, /*bool *phys, */bool *addr, bool *code) +void gtk_buffer_view_attach_buffer(GtkBufferView *view, GBufferView *buffer)  {      gint width;                             /* Largeur de l'objet actuelle */      gint height;                            /* Hauteur de l'objet actuelle */ @@ -564,7 +557,7 @@ void gtk_buffer_view_attach_buffer(GtkBufferView *view, GBufferView *buffer, /*b      /* Validation finale */ -    width = g_buffer_view_get_width(view->buffer_view, true/* FIXME : *phys*/, *addr, *code); +    width = g_buffer_view_get_width(view->buffer_view, GTK_VIEW_PANEL(view)->display);      height = g_buffer_view_get_height(view->buffer_view);      width += -view->left_text + 1; diff --git a/src/gtkext/gtkbufferview.h b/src/gtkext/gtkbufferview.h index 7505cdd..1ee17fe 100644 --- a/src/gtkext/gtkbufferview.h +++ b/src/gtkext/gtkbufferview.h @@ -52,7 +52,7 @@ typedef struct _GtkBufferViewClass GtkBufferViewClass;  GType gtk_buffer_view_get_type(void);  /* Prend acte de l'association d'un tampon de lignes. */ -void gtk_buffer_view_attach_buffer(GtkBufferView *, GBufferView *, bool *, bool *); +void gtk_buffer_view_attach_buffer(GtkBufferView *, GBufferView *);  /* Fournit la vue associée au tampon de lignes courant. */  GBufferView *gtk_buffer_view_get_buffer(const GtkBufferView *); diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c index 7919b32..0265518 100644 --- a/src/gtkext/gtkgraphview.c +++ b/src/gtkext/gtkgraphview.c @@ -661,8 +661,6 @@ static GtkViewPanel **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBinar  {      GtkViewPanel **result;                  /* Liste à retourner           */      GCodeBuffer *buffer;                    /* Tampon brut à découper      */ -    bool *addr;                             /* Affichage des adresses ?    */ -    bool *code;                             /* Affichage du binaire ?      */      size_t *count;                          /* Nombre d'éléments créés.    */      GInstrBlock *main_block;                /* Premier bloc rattaché       */      GInstrBlock **blocks;                   /* Liste des blocs basiques    */ @@ -673,9 +671,6 @@ static GtkViewPanel **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBinar      buffer = g_loaded_binary_get_disassembled_buffer(binary); -    addr = GTK_VIEW_PANEL(view)->display_addr; -    code = GTK_VIEW_PANEL(view)->display_code; -      count = &view->children_count;      main_block = g_binary_routine_get_basic_blocks(routine); @@ -690,7 +685,7 @@ static GtkViewPanel **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBinar      {          result[i] = GTK_VIEW_PANEL(gtk_block_view_new());          gtk_widget_show(GTK_WIDGET(result[i])); -        gtk_view_panel_attach_binary(result[i], binary, addr, code); +        gtk_view_panel_attach_binary(result[i], binary, BVW_BLOCK);          gtk_view_panel_show_border(result[i], true); @@ -698,7 +693,7 @@ static GtkViewPanel **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBinar          subview = g_buffer_view_new(buffer);          g_buffer_view_restrict(subview, first, last); -        gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(result[i]), subview, addr, code); +        gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(result[i]), subview);      } diff --git a/src/gtkext/gtksourceview.c b/src/gtkext/gtksourceview.c index 4a04427..0b008fa 100644 --- a/src/gtkext/gtksourceview.c +++ b/src/gtkext/gtksourceview.c @@ -53,7 +53,7 @@ static void gtk_source_view_class_init(GtkSourceViewClass *);  static void gtk_source_view_init(GtkSourceView *);  /* Prend acte de l'association d'un binaire chargé. */ -static void gtk_source_view_attach_binary(GtkSourceView *, GLoadedBinary *, bool *, bool *); +static void gtk_source_view_attach_binary(GtkSourceView *, GLoadedBinary *); @@ -134,8 +134,6 @@ GtkWidget *gtk_source_view_new(void)  *                                                                             *  *  Paramètres  : view   = composant GTK à mettre à jour.                      *  *                binary = binaire associé à intégrer.                         * -*                addr   = indique si les positions doivent être affichées.    * -*                code   = indique si le code binaire doit être affiché.       *  *                                                                             *  *  Description : Prend acte de l'association d'un binaire chargé.             *  *                                                                             * @@ -145,7 +143,7 @@ GtkWidget *gtk_source_view_new(void)  *                                                                             *  ******************************************************************************/ -static void gtk_source_view_attach_binary(GtkSourceView *view, GLoadedBinary *binary, bool *addr, bool *code) +static void gtk_source_view_attach_binary(GtkSourceView *view, GLoadedBinary *binary)  {      GCodeBuffer *buffer;                    /* Tampon par défaut           */ @@ -153,6 +151,6 @@ static void gtk_source_view_attach_binary(GtkSourceView *view, GLoadedBinary *bi      /* Si une source existe... */      if (buffer != NULL) -        gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(view), g_buffer_view_new(buffer), addr, code); +        gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(view), g_buffer_view_new(buffer));  } diff --git a/src/gtkext/gtkviewpanel-int.h b/src/gtkext/gtkviewpanel-int.h index f89fdcf..49b5195 100644 --- a/src/gtkext/gtkviewpanel-int.h +++ b/src/gtkext/gtkviewpanel-int.h @@ -37,7 +37,7 @@  typedef void (* compute_requested_size) (GtkViewPanel *, gint *, gint *);  /* Prend acte de l'association d'un binaire chargé. */ -typedef void (* attach_binary_fc) (GtkViewPanel *, GLoadedBinary *, bool *, bool *); +typedef void (* attach_binary_fc) (GtkViewPanel *, GLoadedBinary *);  /* Réagit à la sélection externe d'une adresse. */  typedef void (* define_address_fc) (GtkViewPanel *, vmpa_t); @@ -64,6 +64,8 @@ struct _GtkViewPanel      GtkScrollablePolicy vscroll_policy;     /* Politique verticale         */                 bool show_border;                       /* Affichage d'une bordure ?   */ +    BinaryView content;                     /* Type de contenu             */ +    const bool *display;                    /* Affichage des colonnes ?    */      GLoadedBinary *binary;                  /* Binaire à visualiser        */ @@ -72,10 +74,6 @@ struct _GtkViewPanel      prepare_resize_fc resize;               /* Prépare une nouvelle taille */      cache_glance_fc cache_glance;           /* Cache de la mignature       */ -    bool *display_phys;                     /* Affichage des adresses ?    */ -    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 1933add..27799b5 100644 --- a/src/gtkext/gtkviewpanel.c +++ b/src/gtkext/gtkviewpanel.c @@ -68,7 +68,8 @@ static void gtk_view_panel_update_adjustment(GtkViewPanel *, GtkOrientation);  /* Réagit à un défilement chez une barre associée au composant.*/  static void gtk_view_panel_adjustment_value_changed(GtkAdjustment *, GtkViewPanel *); - +/* Réagit à un changement des règles d'affichage. */ +static void on_view_panel_binary_display_change(GLoadedBinary *, BinaryView, BufferLineColumn, GtkViewPanel *); @@ -576,32 +577,29 @@ static void gtk_view_panel_adjustment_value_changed(GtkAdjustment *adj, GtkViewP  /******************************************************************************  *                                                                             * -*  Paramètres  : panel = composant GTK à mettre à jour.                       * -*                show  = état de l'affichage auquel parvenir.                 * +*  Paramètres  : panel = composant GTK à consulter.                           *  *                                                                             * -*  Description : Définit si une bordure est à afficher.                       * +*  Description : Indique le type de contenu représenté par le composant.      *  *                                                                             * -*  Retour      : -                                                            * +*  Retour      : Identifiant d'un type de représentation de contenu.          *  *                                                                             *  *  Remarques   : -                                                            *  *                                                                             *  ******************************************************************************/ -void gtk_view_panel_show_border(GtkViewPanel *panel, bool show) +BinaryView gtk_view_panel_describe_content(const GtkViewPanel *panel)  { -    panel->show_border = show; +    return panel->content;  }  /******************************************************************************  *                                                                             * -*  Paramètres  : panel  = composant GTK à mettre à jour.                      * -*                binary = binaire associé à intégrer.                         * -*                addr   = indique si les positions doivent être affichées.    * -*                code   = indique si le code binaire doit être affiché.       * +*  Paramètres  : panel = composant GTK à mettre à jour.                       * +*                show  = état de l'affichage auquel parvenir.                 *  *                                                                             * -*  Description : Associe à un panneau d'affichage un binaire chargé.          * +*  Description : Définit si une bordure est à afficher.                       *  *                                                                             *  *  Retour      : -                                                            *  *                                                                             * @@ -609,46 +607,20 @@ void gtk_view_panel_show_border(GtkViewPanel *panel, bool show)  *                                                                             *  ******************************************************************************/ -void gtk_view_panel_attach_binary(GtkViewPanel *panel, GLoadedBinary *binary, bool *addr, bool *code) -{ -    g_object_ref(G_OBJECT(binary)); -    panel->binary = binary; - -    panel->display_phys = addr; -    panel->display_addr = addr; -    panel->display_code = code; - -    if (panel->attach != NULL) /* REMME ? */ -        panel->attach(panel, binary, addr, code); - -} - - -/****************************************************************************** -*                                                                             * -*  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) +void gtk_view_panel_show_border(GtkViewPanel *panel, bool show)  { -    return *panel->display_addr; +    panel->show_border = show;  }  /******************************************************************************  *                                                                             * -*  Paramètres  : panel = composant GTK à consulter.                           * -*                state = nouvel état à prendre en compte.                     * +*  Paramètres  : panel  = composant GTK à mettre à jour.                      * +*                binary = binaire associé à intégrer.                         * +*                view   = aspect du binaire à présenter.                      *  *                                                                             * -*  Description : Définit si les adresses doivent apparaître dans le rendu.    * +*  Description : Associe à un panneau d'affichage un binaire chargé.          *  *                                                                             *  *  Retour      : -                                                            *  *                                                                             * @@ -656,49 +628,30 @@ bool gtk_view_panel_get_addresses_display(const GtkViewPanel *panel)  *                                                                             *  ******************************************************************************/ -void gtk_view_panel_set_addresses_display(GtkViewPanel *panel, bool state) +void gtk_view_panel_attach_binary(GtkViewPanel *panel, GLoadedBinary *binary, BinaryView view)  { -    if (*panel->display_addr != state) -    { -        *panel->display_addr = state; - -        if (panel->resize != NULL) -            panel->resize(panel); - -        gtk_widget_queue_resize(gtk_widget_get_parent(GTK_WIDGET(panel))); -        gtk_widget_queue_resize(GTK_WIDGET(panel)); -        gtk_widget_queue_draw(GTK_WIDGET(panel)); - -    } - -} +    g_object_ref(G_OBJECT(binary)); +    panel->binary = binary; +    panel->content = view; +    panel->display = g_loaded_binary_get_column_display(binary, view); -/****************************************************************************** -*                                                                             * -*  Paramètres  : panel = composant GTK à consulter.                           * -*                                                                             * -*  Description : Indique si le code doit apparaître dans le rendu.            * -*                                                                             * -*  Retour      : Consigne d'affichage.                                        * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ +    if (panel->attach != NULL) /* REMME */ +        panel->attach(panel, binary); -bool gtk_view_panel_get_code_display(const GtkViewPanel *panel) -{ -    return *panel->display_code; +    g_signal_connect(binary, "display-changed", G_CALLBACK(on_view_panel_binary_display_change), panel);  }  /******************************************************************************  *                                                                             * -*  Paramètres  : panel = composant GTK à consulter.                           * -*                state = nouvel état à prendre en compte.                     * +*  Paramètres  : binary = bianire dont les consignes d'affichage ont évolué.  * +*                view   = type d'affichage à considérer.                      * +*                col    = colonne dont le statut a changé.                    * +*                panel  = composant GTK à consulter.                          *  *                                                                             * -*  Description : Définit si le code doit apparaître dans le rendu.            * +*  Description : Réagit à un changement des règles d'affichage.               *  *                                                                             *  *  Retour      : -                                                            *  *                                                                             * @@ -706,12 +659,10 @@ bool gtk_view_panel_get_code_display(const GtkViewPanel *panel)  *                                                                             *  ******************************************************************************/ -void gtk_view_panel_set_code_display(GtkViewPanel *panel, bool state) +static void on_view_panel_binary_display_change(GLoadedBinary *binary, BinaryView view, BufferLineColumn col, GtkViewPanel *panel)  { -    if (*panel->display_code != state) +    if (panel->content == view)      { -        *panel->display_code = state; -          if (panel->resize != NULL)              panel->resize(panel); diff --git a/src/gtkext/gtkviewpanel.h b/src/gtkext/gtkviewpanel.h index c8d0f6c..95f2084 100644 --- a/src/gtkext/gtkviewpanel.h +++ b/src/gtkext/gtkviewpanel.h @@ -50,21 +50,18 @@ typedef struct _GtkViewPanelClass GtkViewPanelClass;  /* Détermine le type du composant d'affichage générique. */  GType gtk_view_panel_get_type(void); +/* Indique le type de contenu représenté par le composant. */ +BinaryView gtk_view_panel_describe_content(const GtkViewPanel *); +  /* Définit si une bordure est à afficher. */  void gtk_view_panel_show_border(GtkViewPanel *, bool);  /* Associe à un panneau d'affichage un binaire chargé. */ -void gtk_view_panel_attach_binary(GtkViewPanel *, GLoadedBinary *, bool *, bool *); - -/* Indique si les adresses doivent apparaître dans le rendu. */ -bool gtk_view_panel_get_addresses_display(const GtkViewPanel *); +void gtk_view_panel_attach_binary(GtkViewPanel *, GLoadedBinary *, BinaryView);  /* Définit si les adresses doivent apparaître dans le rendu. */  void gtk_view_panel_set_addresses_display(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(GtkViewPanel *, bool); diff --git a/src/gui/menus/view.c b/src/gui/menus/view.c index 511d9db..9abcbd3 100644 --- a/src/gui/menus/view.c +++ b/src/gui/menus/view.c @@ -38,11 +38,8 @@  /* 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 *); - -/* Réagit avec le menu "Affichage -> code binaire". */ -static void mcb_view_code(GtkCheckMenuItem *, GMenuBar *); +/* Réagit avec le menu "Affichage -> (colonne xxx)". */ +static void mcb_view_display_column(GtkCheckMenuItem *, GMenuBar *); @@ -98,12 +95,19 @@ GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *bar)      submenuitem = qck_create_menu_separator();      gtk_container_add(GTK_CONTAINER(menubar), submenuitem); +    submenuitem = qck_create_check_menu_item(G_OBJECT(result), "off", _("Physical offset"), +                                             G_CALLBACK(mcb_view_display_column), bar); +    g_object_set_data(G_OBJECT(submenuitem), "kind_of_col", GUINT_TO_POINTER(BLC_PHYSICAL)); +    gtk_container_add(GTK_CONTAINER(menubar), submenuitem); +      submenuitem = qck_create_check_menu_item(G_OBJECT(result), "addr", _("Virtual address"), -                                             G_CALLBACK(mcb_view_addresses), bar); +                                             G_CALLBACK(mcb_view_display_column), bar); +    g_object_set_data(G_OBJECT(submenuitem), "kind_of_col", GUINT_TO_POINTER(BLC_VIRTUAL));      gtk_container_add(GTK_CONTAINER(menubar), submenuitem);      submenuitem = qck_create_check_menu_item(G_OBJECT(result), "code", _("Binary code"), -                                             G_CALLBACK(mcb_view_code), bar); +                                             G_CALLBACK(mcb_view_display_column), bar); +    g_object_set_data(G_OBJECT(submenuitem), "kind_of_col", GUINT_TO_POINTER(BLC_BINARY));      gtk_container_add(GTK_CONTAINER(menubar), submenuitem);      submenuitem = qck_create_menu_separator(); @@ -130,30 +134,50 @@ GtkWidget *build_menu_view(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *bar)  void update_menu_view_for_view(GtkWidget *widget, GtkViewPanel *view, GMenuBar *bar)  { +    GLoadedBinary *binary;                  /* Binaire courant             */ +    BinaryView content;                     /* Type de vue active          */ +    const bool *display;                    /* Règles d'affichage courantes*/      GtkWidget *submenuitem;                 /* Sous-élément de menu        */      bool status;                            /* Consigne d'affichage        */ +    binary = g_editor_item_get_current_binary(G_EDITOR_ITEM(bar)); + +    content = gtk_view_panel_describe_content(view); + +    display = g_loaded_binary_get_column_display(binary, content); + +    /* Positions physiques */ + +    submenuitem = g_object_get_data(G_OBJECT(widget), "off"); + +    g_signal_handlers_disconnect_by_func(submenuitem, G_CALLBACK(mcb_view_display_column), bar); + +    status = display[BLC_PHYSICAL]; +    gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(submenuitem), status); + +    g_signal_connect(submenuitem, "toggled", G_CALLBACK(mcb_view_display_column), bar); +      /* Adresses virtuelles */      submenuitem = g_object_get_data(G_OBJECT(widget), "addr"); -    g_signal_handlers_disconnect_by_func(submenuitem, G_CALLBACK(mcb_view_addresses), bar); +    g_signal_handlers_disconnect_by_func(submenuitem, G_CALLBACK(mcb_view_display_column), bar); -    status = gtk_view_panel_get_addresses_display(view); +    status = display[BLC_VIRTUAL];      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(submenuitem), status); -    g_signal_connect(submenuitem, "toggled", G_CALLBACK(mcb_view_addresses), bar); +    g_signal_connect(submenuitem, "toggled", G_CALLBACK(mcb_view_display_column), 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); +    g_signal_handlers_disconnect_by_func(submenuitem, G_CALLBACK(mcb_view_display_column), bar); -    status = gtk_view_panel_get_code_display(view); +    status = display[BLC_BINARY];      gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(submenuitem), status); -    g_signal_connect(submenuitem, "toggled", G_CALLBACK(mcb_view_code), bar); +    g_signal_connect(submenuitem, "toggled", G_CALLBACK(mcb_view_display_column), bar);  } @@ -227,7 +251,7 @@ static void mcb_view_change_support(GtkRadioMenuItem *menuitem, GMenuBar *bar)  *  Paramètres  : menuitem = élément de menu ayant basculé.                    *  *                bar      = barre de menu parente.                            *  *                                                                             * -*  Description : Réagit avec le menu "Affichage -> Adresse virtuelle".        * +*  Description : Réagit avec le menu "Affichage -> (colonne xxx)".            *  *                                                                             *  *  Retour      : -                                                            *  *                                                                             * @@ -235,40 +259,23 @@ static void mcb_view_change_support(GtkRadioMenuItem *menuitem, GMenuBar *bar)  *                                                                             *  ******************************************************************************/ -static void mcb_view_addresses(GtkCheckMenuItem *menuitem, GMenuBar *bar) +static void mcb_view_display_column(GtkCheckMenuItem *menuitem, GMenuBar *bar)  { +    BufferLineColumn col;                   /* Colonne à traiter           */ +    GLoadedBinary *binary;                  /* Binaire courant             */      GtkViewPanel *panel;                    /* Affichage courant           */ +    BinaryView view;                        /* Type de vue représentée     */      gboolean active;                        /* Etat de sélection du menu   */ -    panel = g_editor_item_get_current_view(G_EDITOR_ITEM(bar)); -    active = gtk_check_menu_item_get_active(menuitem); - -    gtk_view_panel_set_addresses_display(panel, active); - -} - +    col = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(menuitem), "kind_of_col")); -/****************************************************************************** -*                                                                             * -*  Paramètres  : menuitem = élément de menu ayant basculé.                    * -*                bar      = barre de menu parente.                            * -*                                                                             * -*  Description : Réagit avec le menu "Affichage -> code binaire".             * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static void mcb_view_code(GtkCheckMenuItem *menuitem, GMenuBar *bar) -{ -    GtkViewPanel *panel;                    /* Affichage courant           */ -    gboolean active;                        /* Etat de sélection du menu   */ +    binary = g_editor_item_get_current_binary(G_EDITOR_ITEM(bar));      panel = g_editor_item_get_current_view(G_EDITOR_ITEM(bar)); +    view = gtk_view_panel_describe_content(panel); +      active = gtk_check_menu_item_get_active(menuitem); -    gtk_view_panel_set_code_display(panel, active); +    g_loaded_binary_set_column_display(binary, view, col, active);  } diff --git a/src/project.c b/src/project.c index dc0c446..7c98d96 100644 --- a/src/project.c +++ b/src/project.c @@ -382,9 +382,7 @@ size_t g_study_project_attach_binary(GStudyProject *project, GLoadedBinary *bina          loaded->views[i] = GTK_VIEW_PANEL(view); -        gtk_view_panel_attach_binary(loaded->views[i], binary, -                                     g_loaded_binary_display_addresses_in_text(binary, i), -                                     g_loaded_binary_display_code_in_text(binary, i)); +        gtk_view_panel_attach_binary(loaded->views[i], binary, i);          /* Intégration finale dans un support défilant */  | 
