aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <rostedt@goodmis.org>2009-12-22 12:16:07 -0500
committerSteven Rostedt <rostedt@goodmis.org>2009-12-22 12:16:07 -0500
commit2105698d2c25d440ca0fed1db978910428a593d9 (patch)
treef839779d1a7473ed4f7900ddd052a8288a5a5cf4
parentc7ce78e0287ab90a316ecb3bbd9195e6ac6a5d4a (diff)
trace-graph: Move windowing into trace-graph-main.c
In order to be able to use the trace-graph in other applications we separate out the creation of the graph from the windowing. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--Makefile5
-rw-r--r--trace-graph-main.c147
-rw-r--r--trace-graph.c146
-rw-r--r--trace-graph.h9
4 files changed, 162 insertions, 145 deletions
diff --git a/Makefile b/Makefile
index 022d0a4..0d81f17 100644
--- a/Makefile
+++ b/Makefile
@@ -36,7 +36,8 @@ trace-view.o:: $(HEADERS) trace-view-store.h trace-view.h
36trace-view-store.o:: $(HEADERS) trace-view-store.h trace-view.h 36trace-view-store.o:: $(HEADERS) trace-view-store.h trace-view.h
37trace-view-main.o:: $(HEADERS) trace-view-store.h trace-view.h 37trace-view-main.o:: $(HEADERS) trace-view-store.h trace-view.h
38trace-filter.o:: $(HEADERS) 38trace-filter.o:: $(HEADERS)
39trace-graph.o:: $(HEADERS) 39trace-graph.o:: $(HEADERS) trace-graph.h
40trace-graph-main.o:: $(HEADERS) trace-graph.h
40 41
41trace-cmd:: trace-cmd.o trace-read.o 42trace-cmd:: trace-cmd.o trace-read.o
42 $(CC) $^ -rdynamic -o $@ $(LIBS) 43 $(CC) $^ -rdynamic -o $@ $(LIBS)
@@ -44,7 +45,7 @@ trace-cmd:: trace-cmd.o trace-read.o
44trace-view:: trace-view-main.o trace-view.o trace-view-store.o trace-filter.o 45trace-view:: trace-view-main.o trace-view.o trace-view-store.o trace-filter.o
45 $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS) 46 $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS)
46 47
47trace-graph:: trace-graph.o trace-compat.o 48trace-graph:: trace-graph-main.o trace-graph.o trace-compat.o
48 $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS) 49 $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS)
49 50
50.PHONY: gtk_depends 51.PHONY: gtk_depends
diff --git a/trace-graph-main.c b/trace-graph-main.c
new file mode 100644
index 0000000..d192f63
--- /dev/null
+++ b/trace-graph-main.c
@@ -0,0 +1,147 @@
1#include <gtk/gtk.h>
2
3#include "trace-cmd.h"
4#include "trace-graph.h"
5
6#define version "0.1.1"
7
8#define TRACE_WIDTH 800
9#define TRACE_HEIGHT 600
10#define input_file "trace.dat"
11
12
13/* Callback for the clicked signal of the Exit button */
14static void
15exit_clicked (GtkWidget *widget, gpointer data)
16{
17 gtk_widget_destroy (GTK_WIDGET (data)); /* the user data points to the main window */
18 gtk_main_quit ();
19}
20
21/* Callback for the delete_event signal of the main application window */
22static gint
23delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
24{
25 gtk_widget_destroy (widget); /* destroy the main window */
26 gtk_main_quit ();
27 return TRUE;
28}
29
30void trace_graph(int argc, char **argv)
31{
32 struct tracecmd_input *handle;
33 struct graph_info *ginfo;
34 GtkWidget *window;
35 GtkWidget *vbox;
36 GtkWidget *hbox;
37 GtkWidget *menu_bar;
38 GtkWidget *menu;
39 GtkWidget *menu_item;
40 GtkWidget *sub_item;
41 GtkWidget *scrollwin;
42 GtkWidget *draw;
43
44 handle = tracecmd_open(input_file);
45
46 if (!handle)
47 die("error reading header");
48
49 if (tracecmd_read_headers(handle) < 0)
50 return;
51
52 if (tracecmd_init_data(handle) < 0)
53 die("failed to init data");
54
55 gtk_init(&argc, &argv);
56
57 /* --- Main window --- */
58
59 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
60
61 /* --- Top Level Vbox --- */
62
63 vbox = gtk_vbox_new(FALSE, 0);
64 gtk_container_add(GTK_CONTAINER (window), vbox);
65 gtk_widget_show(vbox);
66
67 /* --- Menu Bar --- */
68
69 menu_bar = gtk_menu_bar_new();
70 gtk_box_pack_start(GTK_BOX (vbox), menu_bar, FALSE, FALSE, 0);
71 gtk_widget_show(menu_bar);
72
73 /* --- File Option --- */
74
75 menu_item = gtk_menu_item_new_with_label("File");
76 gtk_widget_show(menu_item);
77
78 gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item);
79
80 menu = gtk_menu_new(); /* Don't need to show menus */
81
82
83 /* --- File - Quit Option --- */
84
85 sub_item = gtk_menu_item_new_with_label("Quit");
86
87 /* Add them to the menu */
88 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
89
90 /* We can attach the Quit menu item to our exit function */
91 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
92 G_CALLBACK (exit_clicked),
93 (gpointer) window);
94
95 /* We do need to show menu items */
96 gtk_widget_show(sub_item);
97
98 gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu);
99
100 /* --- end File options --- */
101
102
103 /* --- Top Level Hbox --- */
104
105 hbox = gtk_hbox_new(FALSE, 0);
106 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
107 gtk_widget_show(hbox);
108
109 /* --- Scroll Window --- */
110 scrollwin = gtk_scrolled_window_new(NULL, NULL);
111 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
112 GTK_POLICY_AUTOMATIC,
113 GTK_POLICY_AUTOMATIC);
114 gtk_box_pack_start(GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0);
115 gtk_widget_show(scrollwin);
116
117 /* --- Set up Drawing --- */
118
119 ginfo = trace_graph_create(handle, GTK_SCROLLED_WINDOW(scrollwin));
120 draw = trace_graph_get_draw(ginfo);
121
122 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin),
123 draw);
124 gtk_widget_show(draw);
125
126
127 /**********************************************
128 * Main Window
129 **********************************************/
130
131 /* Connect to the delete_event signal and Run the application */
132
133 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
134 (GtkSignalFunc) delete_event,
135 NULL);
136
137 gtk_widget_set_size_request(window, TRACE_WIDTH, TRACE_HEIGHT);
138
139 gtk_widget_show (window);
140 gtk_main ();
141}
142
143int main(int argc, char **argv)
144{
145 trace_graph(argc, argv);
146 return 0;
147}
diff --git a/trace-graph.c b/trace-graph.c
index b92cf5b..e4e50b2 100644
--- a/trace-graph.c
+++ b/trace-graph.c
@@ -30,13 +30,7 @@
30#include "trace-local.h" 30#include "trace-local.h"
31#include "trace-graph.h" 31#include "trace-graph.h"
32 32
33#define version "0.1.1"
34
35#define TRACE_WIDTH 800
36#define TRACE_HEIGHT 300
37
38#define MAX_WIDTH 10000 33#define MAX_WIDTH 10000
39#define input_file "trace.dat"
40 34
41#define CPU_MIDDLE(cpu) (80 * (cpu) + 80) 35#define CPU_MIDDLE(cpu) (80 * (cpu) + 80)
42#define CPU_TOP(cpu) (CPU_MIDDLE(cpu) - 10) 36#define CPU_TOP(cpu) (CPU_MIDDLE(cpu) - 10)
@@ -1113,8 +1107,8 @@ destroy_event(GtkWidget *widget, gpointer data)
1113} 1107}
1114 1108
1115 1109
1116static GtkWidget * 1110struct graph_info *
1117create_drawing_area(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin) 1111trace_graph_create(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin)
1118{ 1112{
1119 struct graph_info *ginfo; 1113 struct graph_info *ginfo;
1120 unsigned long sec, usec; 1114 unsigned long sec, usec;
@@ -1185,139 +1179,5 @@ create_drawing_area(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin)
1185 | GDK_POINTER_MOTION_HINT_MASK); 1179 | GDK_POINTER_MOTION_HINT_MASK);
1186 1180
1187 1181
1188 return ginfo->draw; 1182 return ginfo;
1189}
1190
1191/* Callback for the clicked signal of the Exit button */
1192static void
1193exit_clicked (GtkWidget *widget, gpointer data)
1194{
1195 gtk_widget_destroy (GTK_WIDGET (data)); /* the user data points to the main window */
1196 gtk_main_quit ();
1197}
1198
1199/* Callback for the delete_event signal of the main application window */
1200static gint
1201delete_event (GtkWidget *widget, GdkEvent *event, gpointer data)
1202{
1203 gtk_widget_destroy (widget); /* destroy the main window */
1204 gtk_main_quit ();
1205 return TRUE;
1206}
1207
1208void trace_graph(int argc, char **argv)
1209{
1210 struct tracecmd_input *handle;
1211 GtkWidget *window;
1212 GtkWidget *vbox;
1213 GtkWidget *hbox;
1214 GtkWidget *menu_bar;
1215 GtkWidget *menu;
1216 GtkWidget *menu_item;
1217 GtkWidget *sub_item;
1218 GtkWidget *scrollwin;
1219 GtkWidget *draw;
1220
1221 handle = tracecmd_open(input_file);
1222
1223 if (!handle)
1224 die("error reading header");
1225
1226 if (tracecmd_read_headers(handle) < 0)
1227 return;
1228
1229 if (tracecmd_init_data(handle) < 0)
1230 die("failed to init data");
1231
1232 gtk_init(&argc, &argv);
1233
1234 /* --- Main window --- */
1235
1236 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1237
1238 /* --- Top Level Vbox --- */
1239
1240 vbox = gtk_vbox_new(FALSE, 0);
1241 gtk_container_add(GTK_CONTAINER (window), vbox);
1242 gtk_widget_show(vbox);
1243
1244 /* --- Menu Bar --- */
1245
1246 menu_bar = gtk_menu_bar_new();
1247 gtk_box_pack_start(GTK_BOX (vbox), menu_bar, FALSE, FALSE, 0);
1248 gtk_widget_show(menu_bar);
1249
1250 /* --- File Option --- */
1251
1252 menu_item = gtk_menu_item_new_with_label("File");
1253 gtk_widget_show(menu_item);
1254
1255 gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item);
1256
1257 menu = gtk_menu_new(); /* Don't need to show menus */
1258
1259
1260 /* --- File - Quit Option --- */
1261
1262 sub_item = gtk_menu_item_new_with_label("Quit");
1263
1264 /* Add them to the menu */
1265 gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item);
1266
1267 /* We can attach the Quit menu item to our exit function */
1268 g_signal_connect_swapped (G_OBJECT (sub_item), "activate",
1269 G_CALLBACK (exit_clicked),
1270 (gpointer) window);
1271
1272 /* We do need to show menu items */
1273 gtk_widget_show(sub_item);
1274
1275 gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu);
1276
1277 /* --- end File options --- */
1278
1279
1280 /* --- Top Level Hbox --- */
1281
1282 hbox = gtk_hbox_new(FALSE, 0);
1283 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
1284 gtk_widget_show(hbox);
1285
1286 /* --- Scroll Window --- */
1287 scrollwin = gtk_scrolled_window_new(NULL, NULL);
1288 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
1289 GTK_POLICY_AUTOMATIC,
1290 GTK_POLICY_AUTOMATIC);
1291 gtk_box_pack_start(GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0);
1292 gtk_widget_show(scrollwin);
1293
1294 /* --- Set up Drawing --- */
1295
1296 draw = create_drawing_area(handle, GTK_SCROLLED_WINDOW(scrollwin));
1297
1298 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin),
1299 draw);
1300 gtk_widget_show(draw);
1301
1302
1303 /**********************************************
1304 * Main Window
1305 **********************************************/
1306
1307 /* Connect to the delete_event signal and Run the application */
1308
1309 gtk_signal_connect (GTK_OBJECT (window), "delete_event",
1310 (GtkSignalFunc) delete_event,
1311 NULL);
1312
1313 gtk_widget_set_size_request(window, TRACE_WIDTH, TRACE_HEIGHT);
1314
1315 gtk_widget_show (window);
1316 gtk_main ();
1317}
1318
1319int main(int argc, char **argv)
1320{
1321 trace_graph(argc, argv);
1322 return 0;
1323} 1183}
diff --git a/trace-graph.h b/trace-graph.h
index d3bea95..61f5546 100644
--- a/trace-graph.h
+++ b/trace-graph.h
@@ -43,4 +43,13 @@ struct graph_info {
43 gchar *test; 43 gchar *test;
44}; 44};
45 45
46
47struct graph_info *
48trace_graph_create(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin);
49
50static inline GtkWidget *trace_graph_get_draw(struct graph_info *ginfo)
51{
52 return ginfo->draw;
53}
54
46#endif /* _TRACE_GRAPH_H */ 55#endif /* _TRACE_GRAPH_H */