summaryrefslogtreecommitdiff
path: root/src/gtkext/gtkgraphview.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2009-06-28 21:22:52 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2009-06-28 21:22:52 (GMT)
commit549dd203344a2f95f4bc596f963a854af004cba2 (patch)
tree3d840621a9edcb3decc3260ca688b4e75e52f04f /src/gtkext/gtkgraphview.c
parentf2696c85e502e36a529a1d8ee3d209498ac2c0e9 (diff)
Drawn graphic links between the different blocks of code.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@81 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/gtkext/gtkgraphview.c')
-rw-r--r--src/gtkext/gtkgraphview.c120
1 files changed, 118 insertions, 2 deletions
diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c
index 8389148..8a25940 100644
--- a/src/gtkext/gtkgraphview.c
+++ b/src/gtkext/gtkgraphview.c
@@ -37,12 +37,17 @@ struct _GtkGraphView
{
GtkBinView parent; /* A laisser en premier */
+ GdkGC *gc; /* Contexte graphique du rendu */
+
vmpa_t start; /* Début de la portion vue */
vmpa_t end; /* Fin de la portion affichée */
GtkBinView **childs; /* Liste des sous-blocs */
size_t childs_count; /* Taille de cette liste */
+ GtkLinkRenderer **links; /* Liste des liens graphiques */
+ size_t links_count; /* Nombre de ces liens */
+
};
/* Représentation de code binaire sous forme graphique (classe) */
@@ -59,6 +64,11 @@ static void gtk_graph_view_class_init(GtkGraphViewClass *);
/* Initialise une instance d'afficheur de code en graphique. */
static void gtk_graph_view_init(GtkGraphView *);
+static void gtk_graph_view_realize(GtkWidget *widget);
+
+/* Met à jour l'affichage de la vue sous forme graphique. */
+static gboolean gtk_graph_view_expose(GtkGraphView *, GdkEventExpose *);
+
/* Supprime tout contenu de l'afficheur de code en graphique. */
static void gtk_graph_view_reset(GtkGraphView *);
@@ -81,7 +91,7 @@ G_DEFINE_TYPE(GtkGraphView, gtk_graph_view, GTK_TYPE_BIN_VIEW)
/******************************************************************************
* *
-* Paramètres : class = classe GTK à initialiser. *
+* Paramètres : klass = classe GTK à initialiser. *
* *
* Description : Initialise la classe générique des graphiques de code. *
* *
@@ -91,8 +101,14 @@ G_DEFINE_TYPE(GtkGraphView, gtk_graph_view, GTK_TYPE_BIN_VIEW)
* *
******************************************************************************/
-static void gtk_graph_view_class_init(GtkGraphViewClass *class)
+static void gtk_graph_view_class_init(GtkGraphViewClass *klass)
{
+ GtkWidgetClass *widget_class; /* Classe version Widget */
+
+ widget_class = (GtkWidgetClass *)klass;
+
+ widget_class->realize = gtk_graph_view_realize;
+ widget_class->expose_event = gtk_graph_view_expose;
}
@@ -141,6 +157,82 @@ GtkWidget* gtk_graph_view_new(void)
}
+
+
+
+
+
+
+
+static void
+gtk_graph_view_realize(GtkWidget *widget)
+{
+ GdkWindowAttr attributes;
+ guint attributes_mask;
+ GdkColor white; /* Couleur de fond normale */
+
+ g_return_if_fail(widget != NULL);
+ g_return_if_fail(GTK_IS_GRAPH_VIEW(widget));
+
+ GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
+
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.x = widget->allocation.x;
+ attributes.y = widget->allocation.y;
+ attributes.width = widget->allocation.width;
+ attributes.height = widget->allocation.height;
+
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.event_mask = gtk_widget_get_events(widget) | GDK_BUTTON_PRESS_MASK | GDK_EXPOSURE_MASK;
+
+ attributes_mask = GDK_WA_X | GDK_WA_Y;
+
+ widget->window = gdk_window_new(
+ gtk_widget_get_parent_window (widget),
+ & attributes, attributes_mask
+ );
+
+ gdk_window_set_user_data(widget->window, widget);
+
+ widget->style = gtk_style_attach(widget->style, widget->window);
+
+
+ gdk_color_white(gtk_widget_get_colormap(widget), &white);
+ gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &white);
+
+
+ GTK_GRAPH_VIEW(widget)->gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
+
+}
+
+
+
+
+/******************************************************************************
+* *
+* Paramètres : view = composant GTK à redessiner. *
+* event = informations liées à l'événement. *
+* *
+* Description : Met à jour l'affichage de la vue sous forme graphique. *
+* *
+* Retour : FALSE pour poursuivre la propagation de l'événement. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static gboolean gtk_graph_view_expose(GtkGraphView *view, GdkEventExpose *event)
+{
+ size_t i; /* Boucle de parcours */
+
+ for (i = 0; i < view->links_count; i++)
+ gtk_link_renderer_draw(view->links[i], GDK_DRAWABLE(GTK_WIDGET(view)->window), view->gc);
+
+ return FALSE;
+
+}
+
+
/******************************************************************************
* *
* Paramètres : view = instance GTK à réinitialiser. *
@@ -404,3 +496,27 @@ static GtkBinView **gtk_graph_view_load_nodes(openida_binary *binary, GRendering
}
+
+
+/******************************************************************************
+* *
+* Paramètres : view = composant GTK à mettre à jour. *
+* links = liens graphiques entre les blocs à intégrer. *
+* count = quantité de ces liens graphiques. *
+* *
+* Description : Définit les liens graphiques à présenter avec la vue. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void gtk_graph_view_attach_links(GtkGraphView *view, GtkLinkRenderer **links, size_t count)
+{
+ /* TODO : free ? */
+
+ view->links = links;
+ view->links_count = count;
+
+}