diff options
Diffstat (limited to 'src/gtkext/gtkgraphdisplay.c')
-rw-r--r-- | src/gtkext/gtkgraphdisplay.c | 98 |
1 files changed, 81 insertions, 17 deletions
diff --git a/src/gtkext/gtkgraphdisplay.c b/src/gtkext/gtkgraphdisplay.c index c74d203..ce882f9 100644 --- a/src/gtkext/gtkgraphdisplay.c +++ b/src/gtkext/gtkgraphdisplay.c @@ -33,6 +33,7 @@ #include "graph/cluster.h" #include "../analysis/routine.h" #include "../format/format.h" +#include "../glibext/gbinarycursor.h" #include "../glibext/gloadedpanel.h" #include "../gui/core/items.h" @@ -125,11 +126,17 @@ static bool gtk_graph_display_get_address_coordinates(const GtkGraphDisplay *, c /* Déplace le curseur à un emplacement défini. */ static bool gtk_graph_display_move_caret_to(GtkGraphDisplay *, gint, gint); +/* Fournit le position courante dans un panneau de chargement. */ +static GLineCursor *gtk_graph_display_get_cursor(const GtkGraphDisplay *); + +/* Définit le position courante dans un panneau de chargement. */ +static void gtk_graph_display_set_cursor(GtkGraphDisplay *, const GLineCursor *); + /* Place en cache un rendu destiné à l'aperçu graphique rapide. */ static void gtk_graph_display_cache_glance(GtkGraphDisplay *, cairo_t *, const GtkAllocation *, double); /* Supprime tout contenu de l'afficheur de code en graphique. */ -static void gtk_graph_display_reset(GtkGraphDisplay *); +static void gtk_graph_display_reset(GtkGraphDisplay *, bool); /* Notifie un changement de surbrillance au sein d'un noeud. */ static void gtk_graph_display_changed_highlights(GtkBlockDisplay *, GtkGraphDisplay *); @@ -179,6 +186,8 @@ static void gtk_graph_display_class_init(GtkGraphDisplayClass *class) panel_class->get_caret_loc = (get_caret_location_fc)gtk_graph_display_get_caret_location; panel_class->get_coordinates = (get_addr_coordinates_fc)gtk_graph_display_get_address_coordinates; panel_class->move_caret_to = (move_caret_to_fc)gtk_graph_display_move_caret_to; + panel_class->get_cursor = (get_cursor_fc)gtk_graph_display_get_cursor; + panel_class->set_cursor = (set_cursor_fc)gtk_graph_display_set_cursor; panel_class->cache_glance = (cache_glance_fc)gtk_graph_display_cache_glance; } @@ -225,6 +234,7 @@ static void gtk_graph_display_init(GtkGraphDisplay *display) gtk_widget_set_margin_top(display->extender, 1); gtk_widget_show(display->extender); + gtk_fixed_put(GTK_FIXED(display->support), display->extender, 0, 0); } @@ -243,9 +253,14 @@ static void gtk_graph_display_init(GtkGraphDisplay *display) static void gtk_graph_display_dispose(GtkGraphDisplay *display) { - g_object_unref(G_OBJECT(display->extender)); + /** + * display->support est traité par la version amont du conteneur, propriétaire + * du composant GTK. + * + * Pareil pour display->extender. + */ - gtk_graph_display_reset(display); + gtk_graph_display_reset(display, true); G_OBJECT_CLASS(gtk_graph_display_parent_class)->dispose(G_OBJECT(display)); @@ -633,7 +648,7 @@ static void gtk_graph_display_define_main_address(GtkGraphDisplay *display, cons if (need_update) { - gtk_graph_display_reset(display); + gtk_graph_display_reset(display, false); format = g_loaded_binary_get_format(GTK_DISPLAY_PANEL(display)->binary); @@ -667,8 +682,7 @@ static void gtk_graph_display_define_main_address(GtkGraphDisplay *display, cons gtk_graph_display_compute_requested_size(display, &right, &bottom); - g_object_ref(G_OBJECT(display->extender)); - gtk_fixed_put(GTK_FIXED(display->support), display->extender, right - 1, bottom - 1); + gtk_fixed_move(GTK_FIXED(display->support), display->extender, right - 1, bottom - 1); /** * Si possible, on centre le contenu obtenu. @@ -793,6 +807,55 @@ static bool gtk_graph_display_move_caret_to(GtkGraphDisplay *display, gint x, gi /****************************************************************************** * * +* Paramètres : display = composant GTK à consulter. * +* * +* Description : Fournit le position courante dans un panneau de chargement. * +* * +* Retour : Informations relatives à la position du curseur. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static GLineCursor *gtk_graph_display_get_cursor(const GtkGraphDisplay *display) +{ + GLineCursor *result; /* Contenu à retourner */ + + result = NULL; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : display = composant GTK à mettre à jour. * +* cursor = informations relatives à la position du curseur. * +* * +* Description : Définit le position courante dans un panneau de chargement. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_graph_display_set_cursor(GtkGraphDisplay *display, const GLineCursor *cursor) +{ + vmpa2t addr; /* Adresse ciblée */ + + assert(G_IS_BINARY_CURSOR(cursor)); + + g_binary_cursor_get_info(G_BINARY_CURSOR(cursor), &addr); + + gtk_graph_display_define_main_address(display, &addr); + +} + + +/****************************************************************************** +* * * Paramètres : display = composant GTK à manipuler. * * cr = assistant pour la création de rendus. * * area = taille de la surface réduite à disposition. * @@ -912,6 +975,7 @@ void gtk_graph_display_add_edge(GtkGraphDisplay *display, GGraphEdge *edge) /****************************************************************************** * * * Paramètres : display = instance GTK à réinitialiser. * +* dispose = indique l'origine de l'appel. * * * * Description : Supprime tout contenu de l'afficheur de code en graphique. * * * @@ -921,26 +985,23 @@ void gtk_graph_display_add_edge(GtkGraphDisplay *display, GGraphEdge *edge) * * ******************************************************************************/ -static void gtk_graph_display_reset(GtkGraphDisplay *display) +static void gtk_graph_display_reset(GtkGraphDisplay *display, bool dispose) { size_t i; /* Boucle de parcours */ - - void detach_all_blocks(GtkWidget *widget, GtkContainer *container) + if (!dispose) { + void detach_all_blocks(GtkWidget *widget, GtkContainer *container) + { + if (widget != display->extender) + gtk_container_remove(container, widget); + } - - gtk_container_remove(container, widget); - + gtk_container_foreach(GTK_CONTAINER(display->support), (GtkCallback)detach_all_blocks, display->support); } - - gtk_container_foreach(GTK_CONTAINER(display->support), (GtkCallback)detach_all_blocks, display->support); - - - if (display->routine != NULL) { g_object_unref(G_OBJECT(display->routine)); @@ -948,7 +1009,10 @@ static void gtk_graph_display_reset(GtkGraphDisplay *display) } if (display->highlighted != NULL) + { exit_segment_content_list(display->highlighted); + display->highlighted = NULL; + } if (display->cluster != NULL) { |