diff options
| author | Steven Rostedt <rostedt@goodmis.org> | 2009-12-22 12:16:07 -0500 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2009-12-22 12:16:07 -0500 |
| commit | 2105698d2c25d440ca0fed1db978910428a593d9 (patch) | |
| tree | f839779d1a7473ed4f7900ddd052a8288a5a5cf4 | |
| parent | c7ce78e0287ab90a316ecb3bbd9195e6ac6a5d4a (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-- | Makefile | 5 | ||||
| -rw-r--r-- | trace-graph-main.c | 147 | ||||
| -rw-r--r-- | trace-graph.c | 146 | ||||
| -rw-r--r-- | trace-graph.h | 9 |
4 files changed, 162 insertions, 145 deletions
| @@ -36,7 +36,8 @@ trace-view.o:: $(HEADERS) trace-view-store.h trace-view.h | |||
| 36 | trace-view-store.o:: $(HEADERS) trace-view-store.h trace-view.h | 36 | trace-view-store.o:: $(HEADERS) trace-view-store.h trace-view.h |
| 37 | trace-view-main.o:: $(HEADERS) trace-view-store.h trace-view.h | 37 | trace-view-main.o:: $(HEADERS) trace-view-store.h trace-view.h |
| 38 | trace-filter.o:: $(HEADERS) | 38 | trace-filter.o:: $(HEADERS) |
| 39 | trace-graph.o:: $(HEADERS) | 39 | trace-graph.o:: $(HEADERS) trace-graph.h |
| 40 | trace-graph-main.o:: $(HEADERS) trace-graph.h | ||
| 40 | 41 | ||
| 41 | trace-cmd:: trace-cmd.o trace-read.o | 42 | trace-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 | |||
| 44 | trace-view:: trace-view-main.o trace-view.o trace-view-store.o trace-filter.o | 45 | trace-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 | ||
| 47 | trace-graph:: trace-graph.o trace-compat.o | 48 | trace-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 */ | ||
| 14 | static void | ||
| 15 | exit_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 */ | ||
| 22 | static gint | ||
| 23 | delete_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 | |||
| 30 | void 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 | |||
| 143 | int 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 | ||
| 1116 | static GtkWidget * | 1110 | struct graph_info * |
| 1117 | create_drawing_area(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin) | 1111 | trace_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 */ | ||
| 1192 | static void | ||
| 1193 | exit_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 */ | ||
| 1200 | static gint | ||
| 1201 | delete_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 | |||
| 1208 | void 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 | |||
| 1319 | int 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 | |||
| 47 | struct graph_info * | ||
| 48 | trace_graph_create(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin); | ||
| 49 | |||
| 50 | static 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 */ |
