From 0de51231df955953661f9bf712394961524092d9 Mon Sep 17 00:00:00 2001 From: compudj Date: Sat, 27 Aug 2005 03:23:23 +0000 Subject: [PATCH] add control flow view legend git-svn-id: http://ltt.polymtl.ca/svn@1084 04897980-b3bd-0310-b5e0-8ef037075253 --- .../poly/lttv/modules/gui/controlflow/cfv.c | 2 - .../poly/lttv/modules/gui/controlflow/cfv.h | 3 +- .../lttv/modules/gui/controlflow/eventhooks.c | 43 +++++++++++++++++ .../lttv/modules/gui/controlflow/eventhooks.h | 4 ++ .../modules/gui/controlflow/hLegendInsert.xpm | 45 ++++++++++++++++++ .../lttv/modules/gui/controlflow/module.c | 21 ++++++++ .../gui/lttvwindow/pixmaps/Makefile.am | 3 +- .../lttvwindow/pixmaps/lttv-color-list.png | Bin 0 -> 15693 bytes 8 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 ltt/branches/poly/lttv/modules/gui/controlflow/hLegendInsert.xpm create mode 100644 ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c index 60169687..082a8ff9 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.c @@ -48,7 +48,6 @@ header_size_allocate(GtkWidget *widget, } - /***************************************************************************** * Control Flow Viewer class implementation * *****************************************************************************/ @@ -151,7 +150,6 @@ guicontrolflow(void) //inserted in the main window before the drawing area //can be configured (and this must happend bedore sending //data) - return control_flow_data; diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.h b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.h index 0b2caea1..3e469bab 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/cfv.h @@ -50,7 +50,7 @@ struct _ControlFlowData { Drawing_t *drawing; GtkAdjustment *v_adjust ; - + /* Shown events information */ // TimeWindow time_window; // LttTime current_time; @@ -62,7 +62,6 @@ struct _ControlFlowData { } ; - /* Control Flow Data constructor */ ControlFlowData *guicontrolflow(void); void diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c index cf48bda0..a31234c6 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.c @@ -69,6 +69,7 @@ #include #include #include +#include #include "eventhooks.h" @@ -79,6 +80,8 @@ #define MAX_PATH_LEN 256 +extern GSList *g_legend_list; + #if 0 typedef struct _ProcessAddClosure { ControlFlowData *cfd; @@ -263,6 +266,46 @@ h_guicontrolflow(Tab *tab) } +void legend_destructor(GtkWindow *legend) +{ + g_legend_list = g_slist_remove(g_legend_list, legend); +} + +/* Create a popup legend */ +GtkWidget * +h_legend(Tab *tab) +{ + g_info("h_legend, %p", tab); + + GtkWindow *legend = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); + + g_legend_list = g_slist_append( + g_legend_list, + legend); + + g_object_set_data_full( + G_OBJECT(legend), + "legend", + legend, + (GDestroyNotify)legend_destructor); + + gtk_window_set_title(legend, "Control Flow View Legend"); + + GtkWidget *pixmap = create_pixmap(GTK_WIDGET(legend), "lttv-color-list.png"); + + // GtkImage *image = GTK_IMAGE(gtk_image_new_from_pixmap( + // GDK_PIXMAP(pixmap), NULL)); + + gtk_container_add(GTK_CONTAINER(legend), GTK_WIDGET(pixmap)); + + gtk_widget_show(GTK_WIDGET(pixmap)); + gtk_widget_show(GTK_WIDGET(legend)); + + + return NULL; /* This is a popup window */ +} + + int event_selected_hook(void *hook_data, void *call_data) { ControlFlowData *control_flow_data = (ControlFlowData*) hook_data; diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.h b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.h index d7244129..6f4fdf01 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.h +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/eventhooks.h @@ -59,6 +59,8 @@ void send_test_data(ProcessList *process_list, Drawing_t *drawing); GtkWidget *h_guicontrolflow(Tab *tab); +GtkWidget *h_legend(Tab *tab); + int event_selected_hook(void *hook_data, void *call_data); /* @@ -114,4 +116,6 @@ gint traceset_notify(void *hook_data, void *call_data); gint redraw_notify(void *hook_data, void *call_data); gint continue_notify(void *hook_data, void *call_data); +void legend_destructor(GtkWindow *legend); + #endif // _EVENT_HOOKS_H diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/hLegendInsert.xpm b/ltt/branches/poly/lttv/modules/gui/controlflow/hLegendInsert.xpm new file mode 100644 index 00000000..a6ff0f39 --- /dev/null +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/hLegendInsert.xpm @@ -0,0 +1,45 @@ +/* XPM */ +static char * hLegendInsert_xpm[] = { +"22 22 20 1", +" c None", +". c #0DF904", +"+ c #000000", +"@ c #000500", +"# c #000B00", +"$ c #034001", +"% c #000200", +"& c #0CF403", +"* c #0BD603", +"= c #034901", +"- c #F90404", +"; c #0AC503", +"> c #000F00", +", c #034601", +"' c #0CF503", +") c #D60303", +"! c #001000", +"~ c #044E01", +"{ c #0CF203", +"] c #E40303", +" ", +" . ", +" .. ", +" ++@#$ ", +" ++++++% ", +" + &*=++ ", +" .. ++ ", +" . ++ ", +" ++ ", +"----------;>+,'.......", +"---------)!+~{........", +" +++ ", +" ++]---- ", +" ++----- ", +" ++----- ", +" ------ ", +" ++----- ", +" ++----- ", +" ", +"..........------------", +"..........------------", +" "}; diff --git a/ltt/branches/poly/lttv/modules/gui/controlflow/module.c b/ltt/branches/poly/lttv/modules/gui/controlflow/module.c index c7c57192..14311efe 100644 --- a/ltt/branches/poly/lttv/modules/gui/controlflow/module.c +++ b/ltt/branches/poly/lttv/modules/gui/controlflow/module.c @@ -50,12 +50,14 @@ #include "eventhooks.h" #include "hGuiControlFlowInsert.xpm" +#include "hLegendInsert.xpm" GQuark LTT_NAME_CPU; /** Array containing instanced objects. Used when module is unloaded */ GSList *g_control_flow_data_list = NULL ; +GSList *g_legend_list = NULL ; /***************************************************************************** * Functions for module loading/unloading * @@ -77,6 +79,14 @@ static void init() { hGuiControlFlowInsert_xpm, "Insert Control Flow Viewer", h_guicontrolflow); + + lttvwindow_register_constructor("guicontrolflowlegend", + "/", + "Popup Control Flow Viewer Legend", + hLegendInsert_xpm, + "Popup Control Flow Viewer Legend", + h_legend); + LTT_NAME_CPU = g_quark_from_string("/cpu"); } @@ -87,6 +97,12 @@ void destroy_walk(gpointer data, gpointer user_data) guicontrolflow_destructor_full((ControlFlowData*)data); } +void destroy_legend_walk(gpointer data, gpointer user_data) +{ + g_info("Walk destroy GUI Control Flow Viewer"); + legend_destructor((GtkWindow*)data); +} + /** @@ -102,8 +118,13 @@ static void destroy() { g_slist_free(g_control_flow_data_list); + g_slist_foreach(g_legend_list, destroy_legend_walk, NULL ); + + g_slist_free(g_control_flow_data_list); + /* Unregister the toolbar insert button and menu entry */ lttvwindow_unregister_constructor(h_guicontrolflow); + lttvwindow_unregister_constructor(h_legend); } diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/Makefile.am b/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/Makefile.am index afca17b9..71064961 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/Makefile.am +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/Makefile.am @@ -26,4 +26,5 @@ EXTRA_DIST = \ stock_redo_24.png\ stock_refresh_24.png\ close.png\ - stock_jump_to_24.png + stock_jump_to_24.png\ + lttv-color-list.png diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png b/ltt/branches/poly/lttv/modules/gui/lttvwindow/pixmaps/lttv-color-list.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc665111db463e7255289ee01b6997ee52265a7 GIT binary patch literal 15693 zcmcJWcTiJn+wRjK6d@`K(iI71Q=|z|s=fIwhU;QzB?qTt^HZ{yOz55(2u*wbR*Pm0)u+u*T$%n6?u&!~$r z@#n6DK;q-$^}`|~t_Gir4$+Ug68d=FN&y1d55d|UJDpHCHy+<~_QW58p9^Z@>MIkw zwEG|5e)0q+Vfsn#)UhB*EyrC%krN_&<|NcG?(TL;hhVVZe?NWV*_wt!l*0Zm?l5)E zTKD^#xm`!r=9w}9C02|JX#t?2TH8Ou9 z>!N~U;o6V!{3~iF-}&IY954Nd$Wg&Z@5_2(@C6#I-esFh|M!)j?oxSl>)L&3l*^yT zqqrx3(=`!CjMMFnm3G9iN_U9a?m{G0C_4Bi3-+j;JQZxeK zOX%Kh`1@PfWWuUrS2RA`PPOZd={-|;7<1F&G=cvcIN&tSqqYUFe+@{q4D0iwY8-d{ zSkMAeagV5?^sV32cbs9CN{e29`1LWJyTCJ7JNeoD)~#>S$_IBD+*0$|5qfW55BsyX zZ`v&1e|Uz-sMClQgblpTkd?hii8i3rY**!OAhmao7KJ$D4`6+6Sdp|6%z*{w9X#GTcB-+rVEs zUAleha9&-{r~3X+!-(;ccPS?&l)HABoHWAkpjR`7|Dba#Dj8gjh1LhFUN%ZCBDaLM zZa&oB+0e-|Gs$@S52o5cl^r#{OlB=vKS!hsB4Y7H*++?X6VqPgawB8?4slL;OA=v*-bn`v_uK|8a zN-i6qj$G(hd1ZR=vwhkG>I@Sc+qepzIne{Imzp}>zwS)RE9j3WHEXterEgtXS~zXG zhwylw?^pO&dQ!>6n7Ya97Ya_|JAzF|FXW1Re-u&eOOSLYK8qYEotqMWUe(bqRm6+X z;|x7--=@>K-A}txGdaw+15MfVt1}78e$@xg^0-NQNtUibf|z}2d>du{tbz3AivZ6syxSk^j^3LA*s|cZ;ha z#+*^S#G7n?MPTw>C%GmcZI}(&^#b#=vzDs^GXX)dThh#d#<1tJv?VOrU;aKC4ALmj}ew$ai)8=h%8k{BK z1)Dg-`3UtwcK9&L>2sR1*-?(0@WoTiz8x%ile#^NyKoM+aGGKCp?jYU5?b4o6iz0q z@7nd*mmeN+cUkMew*;I#u8f*UenUzdO|7l=nbV!o1C;4&kna$$yqH5Y(M4nIFeDw) z3gy81pvhyYPgY4eagZ#Uz{6>D6F3PdlEi^{(pipq$9cXqHe#^OmsF20(Fl`fYf>P~ z?oMeHkYrDKcvgRLoVS4Jx_M^^!9+!xEit)}i*Xv0 z@M%%mc3`H}5aeJsQGEMV!6E#DZde367Vx9^pSENctItdWldHy7EZ(76iGhjLt4(qv z_}3HtQ7^Y!hW)OvK)$!6uc=UjohKxVy;8>&vsFxnu9w8@X4))Sb9)87Zbh3vxF z;*4?rYy=L@CIG`^F8L{W4U$WeM4y#Pk!X6)yL?z|#T=SΞm?5}VdY40RIt0qZS- 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 GuKf=)J64VW literal 0 HcmV?d00001 -- 2.34.1