summaryrefslogtreecommitdiff
path: root/src/gtkext
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
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')
-rw-r--r--src/gtkext/Makefile.am1
-rw-r--r--src/gtkext/gtkblockview.c24
-rw-r--r--src/gtkext/gtkgraphview.c120
-rw-r--r--src/gtkext/gtkgraphview.h6
4 files changed, 143 insertions, 8 deletions
diff --git a/src/gtkext/Makefile.am b/src/gtkext/Makefile.am
index a7023c5..51bea0f 100644
--- a/src/gtkext/Makefile.am
+++ b/src/gtkext/Makefile.am
@@ -12,6 +12,7 @@ libgtkext_la_SOURCES = \
gtkdockpanel.h gtkdockpanel.c \
gtkdropwindow.h gtkdropwindow.c \
gtkgraphview.h gtkgraphview.c \
+ gtklinkrenderer.h gtklinkrenderer.c \
iodamarshal.h iodamarshal.c \
support.h support.c
diff --git a/src/gtkext/gtkblockview.c b/src/gtkext/gtkblockview.c
index 648421d..10941ab 100644
--- a/src/gtkext/gtkblockview.c
+++ b/src/gtkext/gtkblockview.c
@@ -103,8 +103,8 @@ static void gtk_block_view_realize(GtkWidget *widget);
static gboolean gtk_block_view_button_press(GtkWidget *, GdkEventButton *event);
-static gboolean gtk_block_view_expose(GtkWidget *widget,
- GdkEventExpose *event);
+/* Met à jour l'affichage de la vue sous forme de bloc. */
+static gboolean gtk_block_view_expose(GtkWidget *widget, GdkEventExpose *event);
static void gtk_block_view_paint(GtkBlockView *view);
static void gtk_block_view_destroy(GtkObject *object);
@@ -129,7 +129,7 @@ GtkWidget * gtk_block_view_new(void)
static void gtk_block_view_class_init(GtkBlockViewClass *klass)
{
- GtkWidgetClass *widget_class;
+ GtkWidgetClass *widget_class; /* Classe version Widget */
GtkObjectClass *object_class;
@@ -313,9 +313,21 @@ void gtk_block_view_update_margin(GRenderingLine *line, GtkBlockView *view)
-static gboolean
-gtk_block_view_expose(GtkWidget *widget,
- GdkEventExpose *event)
+
+/******************************************************************************
+* *
+* Paramètres : view = composant GTK à redessiner. *
+* event = informations liées à l'événement. *
+* *
+* Description : Met à jour l'affichage de la vue sous forme de bloc. *
+* *
+* Retour : FALSE pour poursuivre la propagation de l'événement. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static gboolean gtk_block_view_expose(GtkWidget *widget, GdkEventExpose *event)
{
g_return_val_if_fail(widget != NULL, FALSE);
g_return_val_if_fail(GTK_IS_BLOCK_VIEW(widget), FALSE);
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;
+
+}
diff --git a/src/gtkext/gtkgraphview.h b/src/gtkext/gtkgraphview.h
index 12dd606..1d0c2ab 100644
--- a/src/gtkext/gtkgraphview.h
+++ b/src/gtkext/gtkgraphview.h
@@ -28,6 +28,9 @@
#include <gtk/gtkwidget.h>
+#include "gtklinkrenderer.h"
+
+
#define GTK_TYPE_GRAPH_VIEW (gtk_graph_view_get_type())
#define GTK_GRAPH_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_GRAPH_VIEW, GtkGraphView))
@@ -51,6 +54,9 @@ GType gtk_graph_view_get_type(void);
/* Crée un nouveau composant pour l'affichage en graphique. */
GtkWidget* gtk_graph_view_new(void);
+/* Définit les liens graphiques à présenter avec la vue. */
+void gtk_graph_view_attach_links(GtkGraphView *, GtkLinkRenderer **, size_t);
+
#endif /* _GTKEXT_GTKGRAPHVIEW_H */