diff options
author | Steven Rostedt <rostedt@goodmis.org> | 2009-12-22 11:57:58 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2009-12-22 11:57:58 -0500 |
commit | c7ce78e0287ab90a316ecb3bbd9195e6ac6a5d4a (patch) | |
tree | ae878a558df2f6abd1c79c4fd8dfa7bd2c8bb29c | |
parent | f4c560d52052f253bb1bed498791bae93eb48098 (diff) |
trace-view: Move windowing of trace-view into trace-view-main.c
In order to make the trace-view list be used in other applications
separate out the main window into trace-view-main.c and make an
API that another application can use a trace view with.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | trace-local.h | 8 | ||||
-rw-r--r-- | trace-view-main.c | 247 | ||||
-rw-r--r-- | trace-view.c | 261 | ||||
-rw-r--r-- | trace-view.h | 17 |
5 files changed, 277 insertions, 263 deletions
@@ -32,15 +32,16 @@ trace-cmd.o:: $(HEADERS) $(LIB_FILE) | |||
32 | trace-util.o:: $(HEADERS) | 32 | trace-util.o:: $(HEADERS) |
33 | trace-ftrace.o:: $(HEADERS) | 33 | trace-ftrace.o:: $(HEADERS) |
34 | trace-input.o:: $(HEADERS) | 34 | trace-input.o:: $(HEADERS) |
35 | trace-view.o:: $(HEADERS) trace-view-store.h | 35 | trace-view.o:: $(HEADERS) trace-view-store.h trace-view.h |
36 | trace-view-store.o:: $(HEADERS) trace-view-store.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-filter.o:: $(HEADERS) | 38 | trace-filter.o:: $(HEADERS) |
38 | trace-graph.o:: $(HEADERS) | 39 | trace-graph.o:: $(HEADERS) |
39 | 40 | ||
40 | trace-cmd:: trace-cmd.o trace-read.o | 41 | trace-cmd:: trace-cmd.o trace-read.o |
41 | $(CC) $^ -rdynamic -o $@ $(LIBS) | 42 | $(CC) $^ -rdynamic -o $@ $(LIBS) |
42 | 43 | ||
43 | trace-view:: trace-view.o trace-view-store.o trace-filter.o | 44 | trace-view:: trace-view-main.o trace-view.o trace-view-store.o trace-filter.o |
44 | $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS) | 45 | $(CC) $^ -rdynamic -o $@ $(CONFIG_LIBS) $(LIBS) |
45 | 46 | ||
46 | trace-graph:: trace-graph.o trace-compat.o | 47 | trace-graph:: trace-graph.o trace-compat.o |
diff --git a/trace-local.h b/trace-local.h index 3c11422..0be298f 100644 --- a/trace-local.h +++ b/trace-local.h | |||
@@ -11,13 +11,5 @@ struct tracecmd_input *read_trace_header(void); | |||
11 | int read_trace_files(void); | 11 | int read_trace_files(void); |
12 | 12 | ||
13 | void trace_report(int argc, char **argv); | 13 | void trace_report(int argc, char **argv); |
14 | void trace_view(int argc, char **argv); | ||
15 | |||
16 | |||
17 | /* GUI */ | ||
18 | |||
19 | /* We use void because this can be used by non gtk files */ | ||
20 | void trace_filter_event_dialog(void *traceview); | ||
21 | void trace_filter_cpu_dialog(void *trace_tree); | ||
22 | 14 | ||
23 | #endif /* __TRACE_LOCAL_H */ | 15 | #endif /* __TRACE_LOCAL_H */ |
diff --git a/trace-view-main.c b/trace-view-main.c new file mode 100644 index 0000000..bf01543 --- /dev/null +++ b/trace-view-main.c | |||
@@ -0,0 +1,247 @@ | |||
1 | #include <gtk/gtk.h> | ||
2 | |||
3 | #include "trace-cmd.h" | ||
4 | #include "trace-view.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 | GtkWidget *trace_tree; | ||
13 | |||
14 | /* Callback for the clicked signal of the Exit button */ | ||
15 | static void | ||
16 | exit_clicked (GtkWidget *widget, gpointer data) | ||
17 | { | ||
18 | gtk_widget_destroy (GTK_WIDGET (data)); /* the user data points to the main window */ | ||
19 | gtk_main_quit (); | ||
20 | } | ||
21 | |||
22 | /* Callback for the delete_event signal of the main application window */ | ||
23 | static gint | ||
24 | delete_event (GtkWidget *widget, GdkEvent *event, gpointer data) | ||
25 | { | ||
26 | gtk_widget_destroy (widget); /* destroy the main window */ | ||
27 | gtk_main_quit (); | ||
28 | return TRUE; | ||
29 | } | ||
30 | |||
31 | /* Callback for the clicked signal of the Events filter button */ | ||
32 | static void | ||
33 | events_clicked (gpointer data) | ||
34 | { | ||
35 | GtkWidget *trace_tree = data; | ||
36 | |||
37 | trace_filter_event_dialog(trace_tree); | ||
38 | } | ||
39 | |||
40 | /* Callback for the clicked signal of the CPUs filter button */ | ||
41 | static void | ||
42 | cpus_clicked (gpointer data) | ||
43 | { | ||
44 | GtkWidget *trace_tree = data; | ||
45 | |||
46 | trace_filter_cpu_dialog(trace_tree); | ||
47 | } | ||
48 | |||
49 | #if 0 | ||
50 | static GtkTreeModel * | ||
51 | create_combo_box_model(void) | ||
52 | { | ||
53 | GtkListStore *store; | ||
54 | GtkTreeIter iter; | ||
55 | |||
56 | store = gtk_list_store_new(1, G_TYPE_STRING); | ||
57 | gtk_list_store_append(store, &iter); | ||
58 | gtk_list_store_set(store, &iter, 0, "1", -1); | ||
59 | |||
60 | return GTK_TREE_MODEL(store); | ||
61 | } | ||
62 | #endif | ||
63 | |||
64 | void trace_view(int argc, char **argv) | ||
65 | { | ||
66 | struct tracecmd_input *handle; | ||
67 | GtkWidget *window; | ||
68 | GtkWidget *vbox; | ||
69 | GtkWidget *hbox; | ||
70 | GtkWidget *menu_bar; | ||
71 | GtkWidget *menu; | ||
72 | GtkWidget *menu_item; | ||
73 | GtkWidget *sub_item; | ||
74 | GtkWidget *scrollwin; | ||
75 | GtkWidget *label; | ||
76 | GtkWidget *spin; | ||
77 | |||
78 | handle = tracecmd_open(input_file); | ||
79 | |||
80 | if (!handle) | ||
81 | die("error reading header"); | ||
82 | |||
83 | if (tracecmd_read_headers(handle) < 0) | ||
84 | return; | ||
85 | |||
86 | if (tracecmd_init_data(handle) < 0) | ||
87 | die("failed to init data"); | ||
88 | |||
89 | gtk_init(&argc, &argv); | ||
90 | |||
91 | /* --- Main window --- */ | ||
92 | |||
93 | window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | ||
94 | |||
95 | /* --- Get handle for trace view first --- */ | ||
96 | |||
97 | trace_tree = gtk_tree_view_new(); | ||
98 | |||
99 | /* --- Top Level Vbox --- */ | ||
100 | |||
101 | vbox = gtk_vbox_new(FALSE, 0); | ||
102 | gtk_container_add(GTK_CONTAINER (window), vbox); | ||
103 | gtk_widget_show(vbox); | ||
104 | |||
105 | /* --- Menu Bar --- */ | ||
106 | |||
107 | menu_bar = gtk_menu_bar_new(); | ||
108 | gtk_box_pack_start(GTK_BOX (vbox), menu_bar, FALSE, FALSE, 0); | ||
109 | gtk_widget_show(menu_bar); | ||
110 | |||
111 | /* --- File Option --- */ | ||
112 | |||
113 | menu_item = gtk_menu_item_new_with_label("File"); | ||
114 | gtk_widget_show(menu_item); | ||
115 | |||
116 | gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item); | ||
117 | |||
118 | menu = gtk_menu_new(); /* Don't need to show menus */ | ||
119 | |||
120 | |||
121 | /* --- File - Quit Option --- */ | ||
122 | |||
123 | sub_item = gtk_menu_item_new_with_label("Quit"); | ||
124 | |||
125 | /* Add them to the menu */ | ||
126 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); | ||
127 | |||
128 | /* We can attach the Quit menu item to our exit function */ | ||
129 | g_signal_connect_swapped (G_OBJECT (sub_item), "activate", | ||
130 | G_CALLBACK (exit_clicked), | ||
131 | (gpointer) window); | ||
132 | |||
133 | /* We do need to show menu items */ | ||
134 | gtk_widget_show(sub_item); | ||
135 | |||
136 | gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu); | ||
137 | |||
138 | /* --- end File options --- */ | ||
139 | |||
140 | |||
141 | /* --- Filter Option --- */ | ||
142 | |||
143 | menu_item = gtk_menu_item_new_with_label("Filter"); | ||
144 | gtk_widget_show(menu_item); | ||
145 | |||
146 | gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item); | ||
147 | |||
148 | menu = gtk_menu_new(); /* Don't need to show menus */ | ||
149 | |||
150 | |||
151 | /* --- Filter - Events Option --- */ | ||
152 | |||
153 | sub_item = gtk_menu_item_new_with_label("events"); | ||
154 | |||
155 | /* Add them to the menu */ | ||
156 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); | ||
157 | |||
158 | /* We can attach the Quit menu item to our exit function */ | ||
159 | g_signal_connect_swapped (G_OBJECT (sub_item), "activate", | ||
160 | G_CALLBACK (events_clicked), | ||
161 | (gpointer) trace_tree); | ||
162 | |||
163 | /* We do need to show menu items */ | ||
164 | gtk_widget_show(sub_item); | ||
165 | |||
166 | |||
167 | /* --- Filter - CPUs Option --- */ | ||
168 | |||
169 | sub_item = gtk_menu_item_new_with_label("CPUs"); | ||
170 | |||
171 | /* Add them to the menu */ | ||
172 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); | ||
173 | |||
174 | /* We can attach the Quit menu item to our exit function */ | ||
175 | g_signal_connect_swapped (G_OBJECT (sub_item), "activate", | ||
176 | G_CALLBACK (cpus_clicked), | ||
177 | (gpointer) trace_tree); | ||
178 | |||
179 | /* We do need to show menu items */ | ||
180 | gtk_widget_show(sub_item); | ||
181 | |||
182 | |||
183 | /* --- End Filter Options --- */ | ||
184 | gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu); | ||
185 | |||
186 | |||
187 | /* --- Paging Hbox --- */ | ||
188 | |||
189 | hbox = gtk_hbox_new(FALSE, 0); | ||
190 | gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | ||
191 | gtk_widget_show(hbox); | ||
192 | |||
193 | /* --- Page Spin Button --- */ | ||
194 | |||
195 | label = gtk_label_new("Page"); | ||
196 | gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | ||
197 | gtk_widget_show(label); | ||
198 | |||
199 | spin = gtk_spin_button_new(NULL, 1.0, 0); | ||
200 | gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin), 1, 1); | ||
201 | gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); | ||
202 | gtk_widget_show(spin); | ||
203 | |||
204 | /* --- Top Level Hbox --- */ | ||
205 | |||
206 | hbox = gtk_hbox_new(FALSE, 0); | ||
207 | gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); | ||
208 | gtk_widget_show(hbox); | ||
209 | |||
210 | /* --- Scroll Window --- */ | ||
211 | scrollwin = gtk_scrolled_window_new(NULL, NULL); | ||
212 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), | ||
213 | GTK_POLICY_AUTOMATIC, | ||
214 | GTK_POLICY_AUTOMATIC); | ||
215 | gtk_box_pack_start(GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0); | ||
216 | gtk_widget_show(scrollwin); | ||
217 | |||
218 | /* --- Set up Trace Tree --- */ | ||
219 | |||
220 | trace_view_load(trace_tree, handle, spin); | ||
221 | |||
222 | gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin), | ||
223 | trace_tree); | ||
224 | gtk_widget_show(trace_tree); | ||
225 | |||
226 | |||
227 | /********************************************** | ||
228 | * Main Window | ||
229 | **********************************************/ | ||
230 | |||
231 | /* Connect to the delete_event signal and Run the application */ | ||
232 | |||
233 | gtk_signal_connect (GTK_OBJECT (window), "delete_event", | ||
234 | (GtkSignalFunc) delete_event, | ||
235 | NULL); | ||
236 | |||
237 | gtk_widget_set_size_request(window, TRACE_WIDTH, TRACE_HEIGHT); | ||
238 | |||
239 | gtk_widget_show (window); | ||
240 | gtk_main (); | ||
241 | } | ||
242 | |||
243 | int main(int argc, char **argv) | ||
244 | { | ||
245 | trace_view(argc, argv); | ||
246 | return 0; | ||
247 | } | ||
diff --git a/trace-view.c b/trace-view.c index f5cdf5e..bd68a47 100644 --- a/trace-view.c +++ b/trace-view.c | |||
@@ -25,13 +25,7 @@ | |||
25 | 25 | ||
26 | #include "trace-cmd.h" | 26 | #include "trace-cmd.h" |
27 | #include "trace-local.h" | 27 | #include "trace-local.h" |
28 | #include "trace-view-store.h" | 28 | #include "trace-view.h" |
29 | |||
30 | #define version "0.1.1" | ||
31 | |||
32 | #define TRACE_WIDTH 800 | ||
33 | #define TRACE_HEIGHT 600 | ||
34 | #define input_file "trace.dat" | ||
35 | 29 | ||
36 | enum { | 30 | enum { |
37 | COL_CPU, | 31 | COL_CPU, |
@@ -44,57 +38,15 @@ enum { | |||
44 | NUM_COLS | 38 | NUM_COLS |
45 | }; | 39 | }; |
46 | 40 | ||
47 | GtkWidget *trace_tree; | ||
48 | |||
49 | /* Callback for the clicked signal of the Exit button */ | ||
50 | static void | ||
51 | exit_clicked (GtkWidget *widget, gpointer data) | ||
52 | { | ||
53 | gtk_widget_destroy (GTK_WIDGET (data)); /* the user data points to the main window */ | ||
54 | gtk_main_quit (); | ||
55 | } | ||
56 | |||
57 | /* Callback for the delete_event signal of the main application window */ | ||
58 | static gint | ||
59 | delete_event (GtkWidget *widget, GdkEvent *event, gpointer data) | ||
60 | { | ||
61 | gtk_widget_destroy (widget); /* destroy the main window */ | ||
62 | gtk_main_quit (); | ||
63 | return TRUE; | ||
64 | } | ||
65 | |||
66 | /* Callback for the clicked signal of the Events filter button */ | ||
67 | static void | ||
68 | events_clicked (gpointer data) | ||
69 | { | ||
70 | GtkWidget *trace_tree = data; | ||
71 | |||
72 | trace_filter_event_dialog(trace_tree); | ||
73 | } | ||
74 | |||
75 | /* Callback for the clicked signal of the CPUs filter button */ | ||
76 | static void | ||
77 | cpus_clicked (gpointer data) | ||
78 | { | ||
79 | GtkWidget *trace_tree = data; | ||
80 | |||
81 | trace_filter_cpu_dialog(trace_tree); | ||
82 | } | ||
83 | |||
84 | #if 0 | ||
85 | static GtkTreeModel * | 41 | static GtkTreeModel * |
86 | create_combo_box_model(void) | 42 | create_trace_view_model(struct tracecmd_input *handle) |
87 | { | 43 | { |
88 | GtkListStore *store; | 44 | TraceViewStore *store; |
89 | GtkTreeIter iter; | ||
90 | 45 | ||
91 | store = gtk_list_store_new(1, G_TYPE_STRING); | 46 | store = trace_view_store_new(handle); |
92 | gtk_list_store_append(store, &iter); | ||
93 | gtk_list_store_set(store, &iter, 0, "1", -1); | ||
94 | 47 | ||
95 | return GTK_TREE_MODEL(store); | 48 | return GTK_TREE_MODEL(store); |
96 | } | 49 | } |
97 | #endif | ||
98 | 50 | ||
99 | static void | 51 | static void |
100 | spin_changed(gpointer data, GtkWidget *spin) | 52 | spin_changed(gpointer data, GtkWidget *spin) |
@@ -122,18 +74,8 @@ spin_changed(gpointer data, GtkWidget *spin) | |||
122 | g_object_unref(model); | 74 | g_object_unref(model); |
123 | } | 75 | } |
124 | 76 | ||
125 | static GtkTreeModel * | 77 | void |
126 | create_trace_view_model(struct tracecmd_input *handle) | 78 | trace_view_load(GtkWidget *view, struct tracecmd_input *handle, |
127 | { | ||
128 | TraceViewStore *store; | ||
129 | |||
130 | store = trace_view_store_new(handle); | ||
131 | |||
132 | return GTK_TREE_MODEL(store); | ||
133 | } | ||
134 | |||
135 | static void | ||
136 | load_trace_view(GtkWidget *view, struct tracecmd_input *handle, | ||
137 | GtkWidget *spin) | 79 | GtkWidget *spin) |
138 | { | 80 | { |
139 | GtkTreeViewColumn *col; | 81 | GtkTreeViewColumn *col; |
@@ -208,197 +150,12 @@ load_trace_view(GtkWidget *view, struct tracecmd_input *handle, | |||
208 | 150 | ||
209 | trace_view_store_set_spin_button(TRACE_VIEW_STORE(model), spin); | 151 | trace_view_store_set_spin_button(TRACE_VIEW_STORE(model), spin); |
210 | 152 | ||
211 | gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); | ||
212 | |||
213 | g_object_unref(model); /* destroy model automatically with view */ | ||
214 | } | ||
215 | |||
216 | void trace_view(int argc, char **argv) | ||
217 | { | ||
218 | struct tracecmd_input *handle; | ||
219 | GtkWidget *window; | ||
220 | GtkWidget *vbox; | ||
221 | GtkWidget *hbox; | ||
222 | GtkWidget *menu_bar; | ||
223 | GtkWidget *menu; | ||
224 | GtkWidget *menu_item; | ||
225 | GtkWidget *sub_item; | ||
226 | GtkWidget *scrollwin; | ||
227 | GtkWidget *label; | ||
228 | GtkWidget *spin; | ||
229 | |||
230 | handle = tracecmd_open(input_file); | ||
231 | |||
232 | if (!handle) | ||
233 | die("error reading header"); | ||
234 | |||
235 | if (tracecmd_read_headers(handle) < 0) | ||
236 | return; | ||
237 | |||
238 | if (tracecmd_init_data(handle) < 0) | ||
239 | die("failed to init data"); | ||
240 | |||
241 | gtk_init(&argc, &argv); | ||
242 | |||
243 | /* --- Main window --- */ | ||
244 | |||
245 | window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | ||
246 | |||
247 | /* --- Get handle for trace view first --- */ | ||
248 | |||
249 | trace_tree = gtk_tree_view_new(); | ||
250 | |||
251 | /* --- Top Level Vbox --- */ | ||
252 | |||
253 | vbox = gtk_vbox_new(FALSE, 0); | ||
254 | gtk_container_add(GTK_CONTAINER (window), vbox); | ||
255 | gtk_widget_show(vbox); | ||
256 | |||
257 | /* --- Menu Bar --- */ | ||
258 | |||
259 | menu_bar = gtk_menu_bar_new(); | ||
260 | gtk_box_pack_start(GTK_BOX (vbox), menu_bar, FALSE, FALSE, 0); | ||
261 | gtk_widget_show(menu_bar); | ||
262 | |||
263 | /* --- File Option --- */ | ||
264 | |||
265 | menu_item = gtk_menu_item_new_with_label("File"); | ||
266 | gtk_widget_show(menu_item); | ||
267 | |||
268 | gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item); | ||
269 | |||
270 | menu = gtk_menu_new(); /* Don't need to show menus */ | ||
271 | |||
272 | |||
273 | /* --- File - Quit Option --- */ | ||
274 | |||
275 | sub_item = gtk_menu_item_new_with_label("Quit"); | ||
276 | |||
277 | /* Add them to the menu */ | ||
278 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); | ||
279 | |||
280 | /* We can attach the Quit menu item to our exit function */ | ||
281 | g_signal_connect_swapped (G_OBJECT (sub_item), "activate", | ||
282 | G_CALLBACK (exit_clicked), | ||
283 | (gpointer) window); | ||
284 | |||
285 | /* We do need to show menu items */ | ||
286 | gtk_widget_show(sub_item); | ||
287 | |||
288 | gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu); | ||
289 | |||
290 | /* --- end File options --- */ | ||
291 | |||
292 | |||
293 | /* --- Filter Option --- */ | ||
294 | |||
295 | menu_item = gtk_menu_item_new_with_label("Filter"); | ||
296 | gtk_widget_show(menu_item); | ||
297 | |||
298 | gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), menu_item); | ||
299 | |||
300 | menu = gtk_menu_new(); /* Don't need to show menus */ | ||
301 | |||
302 | |||
303 | /* --- Filter - Events Option --- */ | ||
304 | |||
305 | sub_item = gtk_menu_item_new_with_label("events"); | ||
306 | |||
307 | /* Add them to the menu */ | ||
308 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); | ||
309 | |||
310 | /* We can attach the Quit menu item to our exit function */ | ||
311 | g_signal_connect_swapped (G_OBJECT (sub_item), "activate", | ||
312 | G_CALLBACK (events_clicked), | ||
313 | (gpointer) trace_tree); | ||
314 | |||
315 | /* We do need to show menu items */ | ||
316 | gtk_widget_show(sub_item); | ||
317 | |||
318 | |||
319 | /* --- Filter - CPUs Option --- */ | ||
320 | |||
321 | sub_item = gtk_menu_item_new_with_label("CPUs"); | ||
322 | |||
323 | /* Add them to the menu */ | ||
324 | gtk_menu_shell_append(GTK_MENU_SHELL (menu), sub_item); | ||
325 | |||
326 | /* We can attach the Quit menu item to our exit function */ | ||
327 | g_signal_connect_swapped (G_OBJECT (sub_item), "activate", | ||
328 | G_CALLBACK (cpus_clicked), | ||
329 | (gpointer) trace_tree); | ||
330 | |||
331 | /* We do need to show menu items */ | ||
332 | gtk_widget_show(sub_item); | ||
333 | |||
334 | |||
335 | /* --- End Filter Options --- */ | ||
336 | gtk_menu_item_set_submenu(GTK_MENU_ITEM (menu_item), menu); | ||
337 | |||
338 | |||
339 | /* --- Paging Hbox --- */ | ||
340 | |||
341 | hbox = gtk_hbox_new(FALSE, 0); | ||
342 | gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | ||
343 | gtk_widget_show(hbox); | ||
344 | |||
345 | /* --- Page Spin Button --- */ | ||
346 | |||
347 | label = gtk_label_new("Page"); | ||
348 | gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | ||
349 | gtk_widget_show(label); | ||
350 | |||
351 | spin = gtk_spin_button_new(NULL, 1.0, 0); | ||
352 | gtk_spin_button_set_range(GTK_SPIN_BUTTON(spin), 1, 1); | ||
353 | gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); | ||
354 | gtk_widget_show(spin); | ||
355 | |||
356 | g_signal_connect_swapped (G_OBJECT (spin), "value-changed", | 153 | g_signal_connect_swapped (G_OBJECT (spin), "value-changed", |
357 | G_CALLBACK (spin_changed), | 154 | G_CALLBACK (spin_changed), |
358 | (gpointer) trace_tree); | 155 | (gpointer) view); |
359 | |||
360 | |||
361 | /* --- Top Level Hbox --- */ | ||
362 | 156 | ||
363 | hbox = gtk_hbox_new(FALSE, 0); | ||
364 | gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); | ||
365 | gtk_widget_show(hbox); | ||
366 | 157 | ||
367 | /* --- Scroll Window --- */ | 158 | gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); |
368 | scrollwin = gtk_scrolled_window_new(NULL, NULL); | ||
369 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), | ||
370 | GTK_POLICY_AUTOMATIC, | ||
371 | GTK_POLICY_AUTOMATIC); | ||
372 | gtk_box_pack_start(GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0); | ||
373 | gtk_widget_show(scrollwin); | ||
374 | |||
375 | /* --- Set up Trace Tree --- */ | ||
376 | |||
377 | load_trace_view(trace_tree, handle, spin); | ||
378 | |||
379 | gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin), | ||
380 | trace_tree); | ||
381 | gtk_widget_show(trace_tree); | ||
382 | |||
383 | |||
384 | /********************************************** | ||
385 | * Main Window | ||
386 | **********************************************/ | ||
387 | |||
388 | /* Connect to the delete_event signal and Run the application */ | ||
389 | |||
390 | gtk_signal_connect (GTK_OBJECT (window), "delete_event", | ||
391 | (GtkSignalFunc) delete_event, | ||
392 | NULL); | ||
393 | |||
394 | gtk_widget_set_size_request(window, TRACE_WIDTH, TRACE_HEIGHT); | ||
395 | |||
396 | gtk_widget_show (window); | ||
397 | gtk_main (); | ||
398 | } | ||
399 | 159 | ||
400 | int main(int argc, char **argv) | 160 | g_object_unref(model); /* destroy model automatically with view */ |
401 | { | ||
402 | trace_view(argc, argv); | ||
403 | return 0; | ||
404 | } | 161 | } |
diff --git a/trace-view.h b/trace-view.h new file mode 100644 index 0000000..ece52b1 --- /dev/null +++ b/trace-view.h | |||
@@ -0,0 +1,17 @@ | |||
1 | #ifndef _TRACE_VIEW_H | ||
2 | #define _TRACE_VIEW_H | ||
3 | |||
4 | #include "trace-view-store.h" | ||
5 | |||
6 | void | ||
7 | trace_view_load(GtkWidget *view, struct tracecmd_input *handle, | ||
8 | GtkWidget *spin); | ||
9 | |||
10 | void trace_view(int argc, char **argv); | ||
11 | |||
12 | |||
13 | /* We use void because this can be used by non gtk files */ | ||
14 | void trace_filter_event_dialog(void *traceview); | ||
15 | void trace_filter_cpu_dialog(void *trace_tree); | ||
16 | |||
17 | #endif /* _TRACE_VIEW_H */ | ||