Initial commit
[gmodulargraph.git] / src / gtkgraph-demo.c
blob2cbdfe7f0c57ae688fdc9ea087bc3c98ff763cc2
1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3 * gtkgraph-demo.c
4 * Copyright (C) Nikita Zlobin 2011 <nick87720z@gmail.com>
5 *
6 * gtkgraph is free software: you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * gtkgraph is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 * See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include <goocanvas.h>
22 static gboolean on_wire_buttonPress_event (GooCanvasItem * item, GooCanvasItem * target, GdkEventButton * event, gpointer data);
23 static gboolean on_wire_buttonRelease_event (GooCanvasItem * item, GooCanvasItem * target, GdkEventButton * event, gpointer data);
25 static gboolean wire_entered (GooCanvasItem * item, GooCanvasItem * target, GdkEventCrossing * event, gpointer data);
26 static gboolean wire_left (GooCanvasItem * item, GooCanvasItem * target, GdkEventCrossing * event, gpointer data);
28 GtkWidget * canvas;
29 GtkWidget * root_menu, obj_menu, port_menu;
30 GooCanvasItem * wire;
32 typedef
33 struct {
34 GtkOrientation * orientation;
35 GooCanvasItem * box;
36 GooCanvasItem * caption;
37 GList * ports;
38 } GtkGraphNode;
40 typedef
41 struct {
42 GtkOrientation * orientation;
43 GooCanvasItem * box;
44 GooCanvasItem * text;
45 } GtkGraphPort;
49 int main( int argc, char ** argv )
51 GtkWidget * win;
52 GtkWidget * scroller;
54 gtk_init (& argc, & argv);
55 win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
57 scroller = gtk_scrolled_window_new (NULL, NULL);
58 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroller), GTK_SHADOW_IN);
59 gtk_container_add (GTK_CONTAINER (win), scroller);
61 /* Create canvas widget */
62 canvas = goo_canvas_new ();
63 gtk_widget_set_size_request (canvas, 600, 450);
64 goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0, 1000, 1000);
65 gtk_widget_show (canvas);
66 gtk_container_add (GTK_CONTAINER (scroller), canvas);
68 #if 0
69 /* Create canvas menu */
70 canvas_menu = gtk_menu_new ();
72 /* Add canvas menu to owner */
74 GooCanvasItem * item;
75 item = goo_canvas_get_root_item (canvas);
76 g_signal_connect (G_OBJECT (item), "button-press-event", on_root_buttonPress_event);
77 g_signal_connect (G_OBJECT (item), "button-release-event", on_root_buttonRelease_event);
79 #endif
81 /* Fill canvas */
82 GooCanvasItem * root_item;
83 GooCanvasItem * item1, * item2;
84 GooCanvasItem * item_tmp;
85 double rounding = 3.0;
87 root_item = goo_canvas_get_root_item (GOO_CANVAS (canvas));
89 /* 1. Objects */
91 item1 = goo_canvas_rect_new (root_item,
92 10, 50, 50, 20,
93 "radius-x", rounding,
94 "radius-y", rounding,
95 //"line-width", 2.0,
96 "stroke-color", "gray75",
97 "fill-color", "gray50",
98 NULL);
100 item2 = goo_canvas_rect_new (root_item,
101 200, 10, 50, 20,
102 "radius-x", rounding,
103 "radius-y", rounding,
104 "stroke-color", "gray75",
105 "fill-color", "gray50",
106 NULL);
108 /* 2. Connection */
110 wire = goo_canvas_path_new (root_item,
111 "M20,100 C50,100 100,50 100,100",
112 "stroke-color", "violet", NULL);
113 g_signal_connect (G_OBJECT (wire), "enter-notify-event", G_CALLBACK (wire_entered), NULL);
114 g_signal_connect (G_OBJECT (wire), "leave-notify-event", G_CALLBACK (wire_left), NULL);
116 gtk_widget_set_has_tooltip (canvas, TRUE);
117 g_object_set (wire, "tooltip", "Wire Test", NULL);
119 gtk_widget_show_all (win);
120 gtk_main ();
121 return 0;
124 /* Helpers */
126 void show_root_menu (GooCanvasItem * item)
128 // gtk_menu_popup ();
131 /* Callbacks */
133 static
134 gboolean wire_entered (GooCanvasItem *item,
135 GooCanvasItem *target,
136 GdkEventCrossing *event,
137 gpointer data)
139 g_object_set (item, "stroke-color", "white", NULL);
140 return TRUE;
143 static
144 gboolean wire_left (GooCanvasItem *item,
145 GooCanvasItem *target,
146 GdkEventCrossing *event,
147 gpointer data)
149 g_object_set (item, "stroke-color", "violet", NULL);
150 return TRUE;
153 static gboolean on_root_buttonPress_event (GooCanvasItem * item, GooCanvasItem * target, GdkEventButton * event, gpointer data)
155 show_root_menu (item);
156 return TRUE;
159 static gboolean on_root_buttonRelease_event (GooCanvasItem * item, GooCanvasItem * target, GdkEventButton * event, gpointer data)
161 return TRUE;