diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-04-22 00:11:29 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-04-22 00:11:29 (GMT) |
commit | 6cbb81bc46347ce969f5bf24a73f08abd009b82b (patch) | |
tree | cb2f8c46f5425a2348520bf78c501ef34902a14c /src/gtkext/gtkgraphview.c | |
parent | ea40f74566cd813722f49ae740ca3df04e522bb2 (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.c | 41 |
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. * * * |