diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2014-10-21 23:11:30 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2014-10-21 23:11:30 (GMT) |
commit | 085fef16a819cb321fd38e7e0926d3cca863777a (patch) | |
tree | f2f24c6205134338999760f1a4a427b0c6c8be27 /src/gtkext | |
parent | ec6aa436f4a1ae486feb7a88b2b8e793b59674d4 (diff) |
Cleaned, fixed and improved the rules for the display of view columns.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@416 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/gtkext')
-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 |
8 files changed, 51 insertions, 121 deletions
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); |