summaryrefslogtreecommitdiff
path: root/src/gtkext
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2014-10-21 23:11:30 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2014-10-21 23:11:30 (GMT)
commit085fef16a819cb321fd38e7e0926d3cca863777a (patch)
treef2f24c6205134338999760f1a4a427b0c6c8be27 /src/gtkext
parentec6aa436f4a1ae486feb7a88b2b8e793b59674d4 (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.c8
-rw-r--r--src/gtkext/gtkbufferview.c15
-rw-r--r--src/gtkext/gtkbufferview.h2
-rw-r--r--src/gtkext/gtkgraphview.c9
-rw-r--r--src/gtkext/gtksourceview.c8
-rw-r--r--src/gtkext/gtkviewpanel-int.h8
-rw-r--r--src/gtkext/gtkviewpanel.c111
-rw-r--r--src/gtkext/gtkviewpanel.h11
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);