From d4c933761708232329bd255b51748a05a3222ec3 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Tue, 29 Dec 2009 18:25:04 -0500 Subject: trace-graph: Return generic widget for graph In order to add another column to store the information of a bar (like CPU, or TASK) we need to have more than one widget and control the scrollwindow. This patch places the scrollwindow inside the management of the graph code, and returns a hbox to the caller. Signed-off-by: Steven Rostedt --- kernel-shark.c | 23 ++++++----------------- trace-graph-main.c | 22 ++++++---------------- trace-graph.c | 23 +++++++++++++++++++---- trace-graph.h | 12 ++++++++++-- 4 files changed, 41 insertions(+), 39 deletions(-) diff --git a/kernel-shark.c b/kernel-shark.c index 0d72459..6e1c206 100644 --- a/kernel-shark.c +++ b/kernel-shark.c @@ -169,7 +169,7 @@ void kernel_shark(int argc, char **argv) GtkWidget *menu_item; GtkWidget *sub_item; GtkWidget *scrollwin; - GtkWidget *draw; + GtkWidget *widget; GtkWidget *label; GtkWidget *spin; int c; @@ -303,26 +303,15 @@ void kernel_shark(int argc, char **argv) gtk_widget_show(vpaned); gtk_paned_set_position(GTK_PANED(vpaned), TRACE_HEIGHT / 2); - /* --- Scroll Window --- */ - scrollwin = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_paned_add1(GTK_PANED(vpaned), scrollwin); - gtk_widget_show(scrollwin); - /* --- Set up Drawing --- */ + /* --- Set up Graph --- */ info->graph_cbs.select = ks_graph_select; - info->ginfo = trace_graph_create_with_callbacks(handle, GTK_SCROLLED_WINDOW(scrollwin), - &info->graph_cbs); - draw = trace_graph_get_draw(info->ginfo); - - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin), - draw); - gtk_widget_show(draw); - + info->ginfo = trace_graph_create_with_callbacks(handle, &info->graph_cbs); + widget = trace_graph_get_window(info->ginfo); + gtk_paned_add1(GTK_PANED(vpaned), widget); + gtk_widget_show(widget); /* --- Tree View Vbox --- */ diff --git a/trace-graph-main.c b/trace-graph-main.c index 54194e1..de6bd12 100644 --- a/trace-graph-main.c +++ b/trace-graph-main.c @@ -51,8 +51,7 @@ void trace_graph(int argc, char **argv) GtkWidget *menu; GtkWidget *menu_item; GtkWidget *sub_item; - GtkWidget *scrollwin; - GtkWidget *draw; + GtkWidget *widget; int c; while ((c = getopt(argc, argv, "hi:")) != -1) { @@ -134,22 +133,13 @@ void trace_graph(int argc, char **argv) gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); gtk_widget_show(hbox); - /* --- Scroll Window --- */ - scrollwin = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0); - gtk_widget_show(scrollwin); - /* --- Set up Drawing --- */ + /* --- Set up the Graph --- */ - ginfo = trace_graph_create(handle, GTK_SCROLLED_WINDOW(scrollwin)); - draw = trace_graph_get_draw(ginfo); - - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollwin), - draw); - gtk_widget_show(draw); + ginfo = trace_graph_create(handle); + widget = trace_graph_get_window(ginfo); + gtk_box_pack_start(GTK_BOX (hbox), widget, TRUE, TRUE, 0); + gtk_widget_show(widget); /********************************************** diff --git a/trace-graph.c b/trace-graph.c index 1f0fedd..b003ab4 100644 --- a/trace-graph.c +++ b/trace-graph.c @@ -1227,7 +1227,7 @@ destroy_event(GtkWidget *widget, gpointer data) struct graph_info * -trace_graph_create_with_callbacks(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin, +trace_graph_create_with_callbacks(struct tracecmd_input *handle, struct graph_callbacks *cbs) { struct graph_info *ginfo; @@ -1247,8 +1247,19 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, GtkScrolledWind ginfo->start_time = -1ULL; ginfo->end_time = 0; + ginfo->widget = gtk_hbox_new(FALSE, 0); + gtk_widget_show(ginfo->widget); + + ginfo->scrollwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ginfo->scrollwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_widget_show(ginfo->scrollwin); + + gtk_box_pack_start(GTK_BOX (ginfo->widget), ginfo->scrollwin, TRUE, TRUE, 0); + ginfo->draw_height = CPU_SPACE(ginfo->cpus); - ginfo->vadj = gtk_scrolled_window_get_hadjustment(scrollwin); + ginfo->vadj = gtk_scrolled_window_get_hadjustment(GTK_SCROLLED_WINDOW(ginfo->scrollwin)); gtk_signal_connect(GTK_OBJECT(ginfo->vadj), "value_changed", (GtkSignalFunc) value_changed, ginfo); @@ -1303,11 +1314,15 @@ trace_graph_create_with_callbacks(struct tracecmd_input *handle, GtkScrolledWind | GDK_POINTER_MOTION_HINT_MASK); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(ginfo->scrollwin), + ginfo->draw); + gtk_widget_show(ginfo->draw); + return ginfo; } struct graph_info * -trace_graph_create(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin) +trace_graph_create(struct tracecmd_input *handle) { - return trace_graph_create_with_callbacks(handle, scrollwin, NULL); + return trace_graph_create_with_callbacks(handle, NULL); } diff --git a/trace-graph.h b/trace-graph.h index d3e7e5c..d1b6c6f 100644 --- a/trace-graph.h +++ b/trace-graph.h @@ -15,6 +15,9 @@ struct graph_info { struct tracecmd_input *handle; struct pevent *pevent; gint cpus; + GtkWidget *widget; /* Box to hold graph */ + GtkWidget *scrollwin; /* graph scroll window */ + GtkWidget *info; /* info window */ GtkWidget *draw; GdkPixmap *curr_pixmap; /* pixmap backstore */ GtkAdjustment *vadj; /* scrollwindow vert adjust */ @@ -57,9 +60,9 @@ struct graph_info { struct graph_info * -trace_graph_create(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin); +trace_graph_create(struct tracecmd_input *handle); struct graph_info * -trace_graph_create_with_callbacks(struct tracecmd_input *handle, GtkScrolledWindow *scrollwin, +trace_graph_create_with_callbacks(struct tracecmd_input *handle, struct graph_callbacks *cbs); void trace_graph_select_by_time(struct graph_info *ginfo, guint64 time); @@ -73,4 +76,9 @@ static inline struct graph_callbacks *trace_graph_get_callbacks(struct graph_inf return ginfo->callbacks; } +static inline GtkWidget *trace_graph_get_window(struct graph_info *ginfo) +{ + return ginfo->widget; +} + #endif /* _TRACE_GRAPH_H */ -- cgit v1.2.2