summaryrefslogtreecommitdiff
path: root/src/gtkext/gtkgraphview.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-04-22 00:11:29 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-04-22 00:11:29 (GMT)
commit6cbb81bc46347ce969f5bf24a73f08abd009b82b (patch)
treecb2f8c46f5425a2348520bf78c501ef34902a14c /src/gtkext/gtkgraphview.c
parentea40f74566cd813722f49ae740ca3df04e522bb2 (diff)
Allowed to refer to an external list for highlighted segments.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@515 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/gtkext/gtkgraphview.c')
-rw-r--r--src/gtkext/gtkgraphview.c41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c
index 6d7ab0d..e0eb870 100644
--- a/src/gtkext/gtkgraphview.c
+++ b/src/gtkext/gtkgraphview.c
@@ -46,6 +46,7 @@ struct _GtkGraphView
vmpa_t start; /* Début de la portion vue */ /* FIXME : à garder ? */
vmpa_t end; /* Fin de la portion affichée */ /* FIXME : à garder ? */
+ segcnt_list *highlighted; /* Segments mis en évidence */
GtkBufferView **children; /* Liste des sous-blocs */
GtkAllocation *allocs; /* Emplacements prévisibles */
size_t children_count; /* Taille de cette liste */
@@ -99,6 +100,9 @@ static void gtk_graph_view_reset(GtkGraphView *);
/* Définit la liste complète des éléments du futur graphique. */
static GtkBufferView **gtk_graph_view_load_nodes(GtkGraphView *, GLoadedBinary *, const GBinRoutine *);
+/* Notifie un changement de surbrillance au sein d'un noeud. */
+static void gtk_graph_view_changed_highlights(GtkBlockView *, GtkGraphView *);
+
/* Notifie une incapacité de déplacement au sein d'un noeud. */
static void gtk_graph_view_reach_caret_limit(GtkBufferView *, GdkScrollDirection, GtkGraphView *);
@@ -348,6 +352,8 @@ static void gtk_graph_view_define_main_address(GtkGraphView *view, const vmpa2t
view->routine = routines[i];
g_object_ref(G_OBJECT(view->routine));
+ view->highlighted = init_segment_content_list();
+
view->children = gtk_graph_view_load_nodes(view, GTK_VIEW_PANEL(view)->binary,
routines[i]);
@@ -557,6 +563,9 @@ static void gtk_graph_view_reset(GtkGraphView *view)
}
*/
+ if (view->highlighted)
+ exit_segment_content_list(view->highlighted);
+
for (i = 0; i < view->children_count; i++)
{
g_signal_handlers_disconnect_by_func(view->children[i], gtk_graph_view_reach_caret_limit, view);
@@ -618,6 +627,7 @@ static GtkBufferView **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBina
{
result[i] = GTK_VIEW_PANEL(gtk_block_view_new());
g_signal_connect(result[i], "reach-limit", G_CALLBACK(gtk_graph_view_reach_caret_limit), view);
+ g_signal_connect(result[i], "highlight-changed", G_CALLBACK(gtk_graph_view_changed_highlights), view);
gtk_widget_show(GTK_WIDGET(result[i]));
gtk_view_panel_attach_binary(result[i], binary, BVW_BLOCK);
@@ -626,7 +636,7 @@ static GtkBufferView **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBina
g_flow_block_get_boundary_addresses(G_FLOW_BLOCK(blocks[i]), &first, &last);
- subview = g_buffer_view_new(buffer);
+ subview = g_buffer_view_new(buffer, view->highlighted);
g_buffer_view_restrict(subview, &first, &last);
gtk_buffer_view_attach_buffer(GTK_BUFFER_VIEW(result[i]), subview);
@@ -640,6 +650,35 @@ static GtkBufferView **gtk_graph_view_load_nodes(GtkGraphView *view, GLoadedBina
/******************************************************************************
* *
* Paramètres : node = composant d'affichage GTK impliqué dans la procédure. *
+* view = support graphique de tous les noeuds. *
+* *
+* Description : Notifie un changement de surbrillance au sein d'un noeud. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void gtk_graph_view_changed_highlights(GtkBlockView *node, GtkGraphView *view)
+{
+ size_t i; /* Boucle de parcours */
+
+ for (i = 0; i < view->children_count; i++)
+ {
+ if (view->children[i] == node)
+ continue;
+
+ gtk_widget_queue_draw(GTK_WIDGET(view->children[i]));
+
+ }
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : node = composant d'affichage GTK impliqué dans la procédure. *
* dir = direction du déplacement souhaité et impossible. *
* view = support graphique de tous les noeuds. *
* *