summaryrefslogtreecommitdiff
path: root/src/gtkext/gtkgraphview.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2009-06-14 11:57:14 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2009-06-14 11:57:14 (GMT)
commitae0135d727fdc67a268ede1530042a42a2a1ccd3 (patch)
treed3dc13797072c261ea8bb49dc2e83b0858478bc7 /src/gtkext/gtkgraphview.c
parentfa0509e2914e3cb562a7cc58293f1171886fafb0 (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.c117
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;
+
+}