diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2009-06-14 11:57:14 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2009-06-14 11:57:14 (GMT) |
commit | ae0135d727fdc67a268ede1530042a42a2a1ccd3 (patch) | |
tree | d3dc13797072c261ea8bb49dc2e83b0858478bc7 /src/gtkext/gtkgraphview.c | |
parent | fa0509e2914e3cb562a7cc58293f1171886fafb0 (diff) |
Cleaned and improved the binary views ; implemented some first steps for the graphical view.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@76 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/gtkext/gtkgraphview.c')
-rw-r--r-- | src/gtkext/gtkgraphview.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c index d843311..80ca06b 100644 --- a/src/gtkext/gtkgraphview.c +++ b/src/gtkext/gtkgraphview.c @@ -27,12 +27,18 @@ #include "gtkbinview-int.h" +#include <malloc.h> + + /* Représentation de code binaire sous forme graphique (instace) */ struct _GtkGraphView { GtkBinView parent; /* A laisser en premier */ + GtkBinView **childs; /* Liste des sous-blocs */ + size_t childs_count; /* Taille de cette liste */ + }; /* Représentation de code binaire sous forme graphique (classe) */ @@ -49,6 +55,12 @@ static void gtk_graph_view_class_init(GtkGraphViewClass *); /* Initialise une instance d'afficheur de code en graphique. */ static void gtk_graph_view_init(GtkGraphView *); +/* Définit les lignes du graphique de représentation. */ +static void gtk_graph_view_set_rendering_lines(GtkGraphView *, GRenderingLine *, GRenderingLine *); + +/* Indique la position d'affichage d'une adresse donnée. */ +static bool gtk_graph_view_get_address_coordinates(GtkGraphView *, vmpa_t, gint *, gint *); + /* Détermine le type du composant d'affichage en graphique. */ @@ -87,6 +99,12 @@ static void gtk_graph_view_class_init(GtkGraphViewClass *class) static void gtk_graph_view_init(GtkGraphView *view) { + GtkBinView *binview; /* Instance parente */ + + binview = GTK_BIN_VIEW(view); + + binview->set_lines = (set_rendering_lines_fc)gtk_graph_view_set_rendering_lines; + binview->get_coordinates = (get_addr_coordinates_fc)gtk_graph_view_get_address_coordinates; } @@ -108,3 +126,102 @@ GtkWidget* gtk_graph_view_new(void) return g_object_new(GTK_TYPE_GRAPH_VIEW, NULL); } + + + + + + + + +/****************************************************************************** +* * +* Paramètres : view = composant GTK à mettre à jour. * +* lines = informations à intégrer. * +* last = dernière ligne à intégrer ou NULL pour toutes. * +* * +* Description : Définit les lignes du graphique de représentation. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void gtk_graph_view_set_rendering_lines(GtkGraphView *view, GRenderingLine *lines, GRenderingLine *last) +{ + GRenderingLine *mainl; + + view->childs = (GtkBinView **)calloc(2, sizeof(GtkBinView *)); + view->childs_count = 2; + + view->childs[0] = GTK_BIN_VIEW(gtk_block_view_new()); + + gtk_widget_show(GTK_WIDGET(view->childs[0])); + gtk_fixed_put(GTK_FIXED(view), GTK_WIDGET(view->childs[0]), 50, 50); + + + gtk_bin_view_set_rendering_lines(view->childs[0], lines, lines); + + + + mainl = g_rendering_line_find_by_address(lines, last, 0x08048434); + + printf("mainl : %p\n", mainl); + + + view->childs[1] = GTK_BIN_VIEW(gtk_block_view_new()); + + gtk_widget_show(GTK_WIDGET(view->childs[1])); + gtk_fixed_put(GTK_FIXED(view), GTK_WIDGET(view->childs[1]), 100, 450); + + + gtk_bin_view_set_rendering_lines(view->childs[1], mainl, mainl); + + + +} + + + + + + + + +/****************************************************************************** +* * +* Paramètres : view = composant GTK à consulter. * +* addr = adresse à présenter à l'écran. * +* x = position horizontale au sein du composant. [OUT] * +* y = position verticale au sein du composant. [OUT] * +* * +* Description : Indique la position d'affichage d'une adresse donnée. * +* * +* Retour : TRUE si l'adresse fait partie du composant, FALSE sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool gtk_graph_view_get_address_coordinates(GtkGraphView *view, vmpa_t addr, gint *x, gint *y) +{ + bool result; /* Bilan à retourner */ + size_t i; /* Boucle de parcours */ + + result = false; + + *x = 0; + *y = 0; + + for (i = 0; i < view->childs_count && !result; i++) + if (view->childs[i]->get_coordinates(view->childs[i], addr, x, y)) + { + *x += GTK_WIDGET(view->childs[i])->allocation.x; + *y += GTK_WIDGET(view->childs[i])->allocation.y; + result = true; + } + + return result; + +} |