11 #include <lttv/mainWindow.h>
12 #include <lttv/menu.h>
13 #include <lttv/toolbar.h>
14 #include <lttv/gtkTraceSet.h>
15 #include <lttv/module.h>
16 #include <lttv/gtkdirsel.h>
17 #include <lttv/iattribute.h>
19 #define PATH_LENGTH 256
20 #define DEFAULT_TIME_WIDTH_S 1
22 //extern LttvTracesetContext * gTracesetContext;
23 extern LttTrace
*gInit_Trace
;
26 /** Array containing instanced objects. */
27 extern GSList
* Main_Window_List
;
29 static int gWinCount
= 0;
31 mainWindow
* get_window_data_struct(GtkWidget
* widget
);
32 char * get_unload_module(char ** loaded_module_name
, int nb_module
);
33 void * create_tab(GtkWidget
* parent
, GtkNotebook
* notebook
, char * label
);
35 void insertView(GtkWidget
* widget
, view_constructor constructor
);
45 insertViewTest(GtkMenuItem
*menuitem
, gpointer user_data
)
48 insertView((GtkWidget
*)menuitem
, (view_constructor
)user_data
);
49 // selected_hook(&val);
53 /* internal functions */
54 void insertView(GtkWidget
* widget
, view_constructor constructor
)
60 mwData
= get_window_data_struct(widget
);
61 if(!mwData
->CurrentTab
) return;
62 custom
= mwData
->CurrentTab
->custom
;
64 viewer
= (GtkWidget
*)constructor(mwData
);
67 gtk_custom_widget_add(custom
, viewer
);
69 // g_object_unref(G_OBJECT(viewer));
73 void get_label_string (GtkWidget
* text
, gchar
* label
)
75 GtkEntry
* entry
= (GtkEntry
*)text
;
76 if(strlen(gtk_entry_get_text(entry
))!=0)
77 strcpy(label
,gtk_entry_get_text(entry
));
80 void get_label(GtkWindow
* mw
, gchar
* str
, gchar
* dialogue_title
, gchar
* label_str
)
87 dialogue
= gtk_dialog_new_with_buttons(dialogue_title
,NULL
,
89 GTK_STOCK_OK
,GTK_RESPONSE_ACCEPT
,
90 GTK_STOCK_CANCEL
,GTK_RESPONSE_REJECT
,
93 label
= gtk_label_new(label_str
);
94 gtk_widget_show(label
);
96 text
= gtk_entry_new();
97 gtk_widget_show(text
);
99 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), label
,TRUE
, TRUE
,0);
100 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), text
,FALSE
, FALSE
,0);
102 id
= gtk_dialog_run(GTK_DIALOG(dialogue
));
104 case GTK_RESPONSE_ACCEPT
:
105 get_label_string(text
,str
);
106 gtk_widget_destroy(dialogue
);
108 case GTK_RESPONSE_REJECT
:
110 gtk_widget_destroy(dialogue
);
115 mainWindow
* get_window_data_struct(GtkWidget
* widget
)
120 mw
= lookup_widget(widget
, "MWindow");
122 g_printf("Main window does not exist\n");
126 mwData
= (mainWindow
*) g_object_get_data(G_OBJECT(mw
),"mainWindow");
128 g_printf("Main window data does not exist\n");
134 void createNewWindow(GtkWidget
* widget
, gpointer user_data
, gboolean clone
)
136 mainWindow
* parent
= get_window_data_struct(widget
);
139 g_printf("Clone : use the same traceset\n");
140 constructMainWin(parent
, NULL
, FALSE
);
142 g_printf("Empty : traceset is set to NULL\n");
143 constructMainWin(NULL
, parent
->winCreationData
, FALSE
);
147 void move_up_viewer(GtkWidget
* widget
, gpointer user_data
)
149 mainWindow
* mw
= get_window_data_struct(widget
);
150 if(!mw
->CurrentTab
) return;
151 gtk_custom_widget_move_up(mw
->CurrentTab
->custom
);
154 void move_down_viewer(GtkWidget
* widget
, gpointer user_data
)
156 mainWindow
* mw
= get_window_data_struct(widget
);
157 if(!mw
->CurrentTab
) return;
158 gtk_custom_widget_move_down(mw
->CurrentTab
->custom
);
161 void delete_viewer(GtkWidget
* widget
, gpointer user_data
)
163 mainWindow
* mw
= get_window_data_struct(widget
);
164 if(!mw
->CurrentTab
) return;
165 gtk_custom_widget_delete(mw
->CurrentTab
->custom
);
168 void open_traceset(GtkWidget
* widget
, gpointer user_data
)
170 g_printf("Open a trace set\n");
175 void add_trace(GtkWidget
* widget
, gpointer user_data
)
177 g_printf("add a trace to a trace set\n");
180 void remove_trace(GtkWidget
* widget
, gpointer user_data
)
182 g_printf("remove a trace from a trace set\n");
185 void save(GtkWidget
* widget
, gpointer user_data
)
190 void save_as(GtkWidget
* widget
, gpointer user_data
)
192 g_printf("Save as\n");
195 void zoom_in(GtkWidget
* widget
, gpointer user_data
)
197 g_printf("Zoom in\n");
200 void zoom_out(GtkWidget
* widget
, gpointer user_data
)
202 g_printf("Zoom out\n");
205 void zoom_extended(GtkWidget
* widget
, gpointer user_data
)
207 g_printf("Zoom extended\n");
210 void go_to_time(GtkWidget
* widget
, gpointer user_data
)
212 g_printf("Go to time\n");
215 void show_time_frame(GtkWidget
* widget
, gpointer user_data
)
217 g_printf("Show time frame\n");
221 /* callback function */
224 on_empty_traceset_activate (GtkMenuItem
*menuitem
,
227 createNewWindow((GtkWidget
*)menuitem
, user_data
, FALSE
);
232 on_clone_traceset_activate (GtkMenuItem
*menuitem
,
235 createNewWindow((GtkWidget
*)menuitem
, user_data
, TRUE
);
240 on_tab_activate (GtkMenuItem
*menuitem
,
243 gchar label
[PATH_LENGTH
];
244 GtkNotebook
* notebook
= (GtkNotebook
*)lookup_widget((GtkWidget
*)menuitem
, "MNotebook");
245 if(notebook
== NULL
){
246 g_printf("Notebook does not exist\n");
250 strcpy(label
,"Page");
251 get_label(NULL
, label
,"Get the name of the tab","Please input tab's name");
253 create_tab ((GtkWidget
*)menuitem
, notebook
, label
);
258 on_open_activate (GtkMenuItem
*menuitem
,
261 open_traceset((GtkWidget
*)menuitem
, user_data
);
266 on_close_activate (GtkMenuItem
*menuitem
,
269 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
270 mainWindow_Destructor(mwData
);
275 on_close_tab_activate (GtkMenuItem
*menuitem
,
279 GtkWidget
* notebook
;
281 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
282 notebook
= lookup_widget((GtkWidget
*)menuitem
, "MNotebook");
283 if(notebook
== NULL
){
284 g_printf("Notebook does not exist\n");
288 if(mwData
->Tab
== mwData
->CurrentTab
){
289 // tmp = mwData->CurrentTab;
290 // mwData->Tab = mwData->CurrentTab->Next;
291 g_printf("The default TAB can not be deleted\n");
295 while(tmp
!= mwData
->CurrentTab
){
301 gtk_notebook_remove_page((GtkNotebook
*)notebook
, count
);
306 on_add_trace_activate (GtkMenuItem
*menuitem
,
309 add_trace((GtkWidget
*)menuitem
, user_data
);
314 on_remove_trace_activate (GtkMenuItem
*menuitem
,
317 remove_trace((GtkWidget
*)menuitem
, user_data
);
322 on_save_activate (GtkMenuItem
*menuitem
,
325 save((GtkWidget
*)menuitem
, user_data
);
330 on_save_as_activate (GtkMenuItem
*menuitem
,
333 save_as((GtkWidget
*)menuitem
, user_data
);
338 on_quit_activate (GtkMenuItem
*menuitem
,
346 on_cut_activate (GtkMenuItem
*menuitem
,
354 on_copy_activate (GtkMenuItem
*menuitem
,
362 on_paste_activate (GtkMenuItem
*menuitem
,
370 on_delete_activate (GtkMenuItem
*menuitem
,
373 g_printf("Delete\n");
378 on_zoom_in_activate (GtkMenuItem
*menuitem
,
381 zoom_in((GtkWidget
*)menuitem
, user_data
);
386 on_zoom_out_activate (GtkMenuItem
*menuitem
,
389 zoom_out((GtkWidget
*)menuitem
, user_data
);
394 on_zoom_extended_activate (GtkMenuItem
*menuitem
,
397 zoom_extended((GtkWidget
*)menuitem
, user_data
);
402 on_go_to_time_activate (GtkMenuItem
*menuitem
,
405 go_to_time((GtkWidget
*)menuitem
, user_data
);
410 on_show_time_frame_activate (GtkMenuItem
*menuitem
,
413 show_time_frame((GtkWidget
*)menuitem
, user_data
);
418 on_move_viewer_up_activate (GtkMenuItem
*menuitem
,
421 move_up_viewer((GtkWidget
*)menuitem
, user_data
);
426 on_move_viewer_down_activate (GtkMenuItem
*menuitem
,
429 move_down_viewer((GtkWidget
*)menuitem
, user_data
);
434 on_remove_viewer_activate (GtkMenuItem
*menuitem
,
437 delete_viewer((GtkWidget
*)menuitem
, user_data
);
442 on_load_module_activate (GtkMenuItem
*menuitem
,
447 char str
[PATH_LENGTH
], *str1
;
448 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
449 GtkFileSelection
* fileSelector
= (GtkFileSelection
*)gtk_file_selection_new("Select a module");
450 gtk_file_selection_hide_fileop_buttons(fileSelector
);
453 id
= gtk_dialog_run(GTK_DIALOG(fileSelector
));
455 case GTK_RESPONSE_ACCEPT
:
456 case GTK_RESPONSE_OK
:
457 dir
= gtk_file_selection_get_selections (fileSelector
);
459 str1
= strrchr(str
,'/');
462 str1
= strrchr(str
,'\\');
465 if(mwData
->winCreationData
)
466 lttv_module_load(str1
, mwData
->winCreationData
->argc
,mwData
->winCreationData
->argv
);
468 lttv_module_load(str1
, 0,NULL
);
469 g_slist_foreach(Main_Window_List
, insertMenuToolbarItem
, NULL
);
471 case GTK_RESPONSE_REJECT
:
472 case GTK_RESPONSE_CANCEL
:
474 gtk_widget_destroy((GtkWidget
*)fileSelector
);
477 g_printf("Load module: %s\n", str
);
482 on_unload_module_activate (GtkMenuItem
*menuitem
,
486 char **name
, *unload_module_name
;
488 LttvModule
** modules
, *module
;
489 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
491 modules
= lttv_module_list(&nb
);
492 name
= g_new(char*, nb
);
495 name
[i
] = lttv_module_name(module
);
498 unload_module_name
=get_unload_module(name
,nb
);
500 if(unload_module_name
){
502 if(strcmp(unload_module_name
, name
[i
]) == 0){
503 lttv_module_unload(modules
[i
]);
514 on_add_module_search_path_activate (GtkMenuItem
*menuitem
,
517 GtkDirSelection
* fileSelector
= (GtkDirSelection
*)gtk_dir_selection_new("Select module path");
521 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
523 id
= gtk_dialog_run(GTK_DIALOG(fileSelector
));
525 case GTK_RESPONSE_ACCEPT
:
526 case GTK_RESPONSE_OK
:
527 dir
= gtk_dir_selection_get_dir (fileSelector
);
528 lttv_module_path_add(dir
);
529 case GTK_RESPONSE_REJECT
:
530 case GTK_RESPONSE_CANCEL
:
532 gtk_widget_destroy((GtkWidget
*)fileSelector
);
539 on_color_activate (GtkMenuItem
*menuitem
,
547 on_filter_activate (GtkMenuItem
*menuitem
,
550 g_printf("Filter\n");
555 on_save_configuration_activate (GtkMenuItem
*menuitem
,
558 g_printf("Save configuration\n");
563 on_content_activate (GtkMenuItem
*menuitem
,
566 g_printf("Content\n");
571 on_about_activate (GtkMenuItem
*menuitem
,
574 g_printf("About...\n");
579 on_button_new_clicked (GtkButton
*button
,
582 createNewWindow((GtkWidget
*)button
, user_data
, FALSE
);
587 on_button_open_clicked (GtkButton
*button
,
590 open_traceset((GtkWidget
*)button
, user_data
);
595 on_button_add_trace_clicked (GtkButton
*button
,
598 add_trace((GtkWidget
*)button
, user_data
);
603 on_button_remove_trace_clicked (GtkButton
*button
,
606 remove_trace((GtkWidget
*)button
, user_data
);
611 on_button_save_clicked (GtkButton
*button
,
614 save((GtkWidget
*)button
, user_data
);
619 on_button_save_as_clicked (GtkButton
*button
,
622 save_as((GtkWidget
*)button
, user_data
);
627 on_button_zoom_in_clicked (GtkButton
*button
,
630 zoom_in((GtkWidget
*)button
, user_data
);
635 on_button_zoom_out_clicked (GtkButton
*button
,
638 zoom_out((GtkWidget
*)button
, user_data
);
643 on_button_zoom_extended_clicked (GtkButton
*button
,
646 zoom_extended((GtkWidget
*)button
, user_data
);
651 on_button_go_to_time_clicked (GtkButton
*button
,
654 go_to_time((GtkWidget
*)button
, user_data
);
659 on_button_show_time_frame_clicked (GtkButton
*button
,
662 show_time_frame((GtkWidget
*)button
, user_data
);
667 on_button_move_up_clicked (GtkButton
*button
,
670 move_up_viewer((GtkWidget
*)button
, user_data
);
675 on_button_move_down_clicked (GtkButton
*button
,
678 move_down_viewer((GtkWidget
*)button
, user_data
);
683 on_button_delete_viewer_clicked (GtkButton
*button
,
686 delete_viewer((GtkWidget
*)button
, user_data
);
690 on_MWindow_destroy (GtkObject
*object
,
693 mainWindow
*Main_Window
= (mainWindow
*)user_data
;
695 g_printf("There are : %d windows\n",g_slist_length(Main_Window_List
));
704 on_MNotebook_switch_page (GtkNotebook
*notebook
,
705 GtkNotebookPage
*page
,
709 mainWindow
* mw
= get_window_data_struct((GtkWidget
*)notebook
);
716 mw
->CurrentTab
= Tab
;
719 char * get_unload_module(char ** loaded_module_name
, int nb_module
)
721 GtkWidget
* dialogue
;
722 GtkWidget
* scroll_win
;
724 GtkListStore
* store
;
725 GtkTreeViewColumn
* column
;
726 GtkCellRenderer
* renderer
;
727 GtkTreeSelection
* select
;
730 char * unload_module_name
= NULL
;
732 dialogue
= gtk_dialog_new_with_buttons("Select an unload module",
735 GTK_STOCK_OK
,GTK_RESPONSE_ACCEPT
,
736 GTK_STOCK_CANCEL
,GTK_RESPONSE_REJECT
,
738 gtk_window_set_default_size((GtkWindow
*)dialogue
, 500, 200);
740 scroll_win
= gtk_scrolled_window_new (NULL
, NULL
);
741 gtk_widget_show ( scroll_win
);
742 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win
),
743 GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
745 store
= gtk_list_store_new (N_COLUMNS
,G_TYPE_STRING
);
746 tree
= gtk_tree_view_new_with_model(GTK_TREE_MODEL (store
));
747 gtk_widget_show ( tree
);
748 g_object_unref (G_OBJECT (store
));
750 renderer
= gtk_cell_renderer_text_new ();
751 column
= gtk_tree_view_column_new_with_attributes ("MODULE NAME",
753 "text", MODULE_COLUMN
,
755 gtk_tree_view_column_set_alignment (column
, 0.5);
756 gtk_tree_view_column_set_fixed_width (column
, 150);
757 gtk_tree_view_append_column (GTK_TREE_VIEW (tree
), column
);
759 select
= gtk_tree_view_get_selection (GTK_TREE_VIEW (tree
));
760 gtk_tree_selection_set_mode (select
, GTK_SELECTION_SINGLE
);
762 gtk_container_add (GTK_CONTAINER (scroll_win
), tree
);
764 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), scroll_win
,TRUE
, TRUE
,0);
766 for(i
=0;i
<nb_module
;i
++){
767 gtk_list_store_append (store
, &iter
);
768 gtk_list_store_set (store
, &iter
, MODULE_COLUMN
,loaded_module_name
[i
],-1);
771 id
= gtk_dialog_run(GTK_DIALOG(dialogue
));
773 case GTK_RESPONSE_ACCEPT
:
774 case GTK_RESPONSE_OK
:
775 if (gtk_tree_selection_get_selected (select
, (GtkTreeModel
**)&store
, &iter
)){
776 gtk_tree_model_get ((GtkTreeModel
*)store
, &iter
, MODULE_COLUMN
, &unload_module_name
, -1);
778 case GTK_RESPONSE_REJECT
:
779 case GTK_RESPONSE_CANCEL
:
781 gtk_widget_destroy(dialogue
);
785 return unload_module_name
;
788 void destroy_hash_key(gpointer key
)
793 void destroy_hash_data(gpointer data
)
798 void insertMenuToolbarItem(mainWindow
* mw
, gpointer user_data
)
802 view_constructor constructor
;
804 LttvToolbars
* toolbar
;
805 lttv_menu_closure
*menuItem
;
806 lttv_toolbar_closure
*toolbarItem
;
807 LttvAttributeValue value
;
808 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
809 GtkWidget
* ToolMenuTitle_menu
, *insert_view
, *pixmap
, *tmp
;
811 g_assert(lttv_iattribute_find_by_path(attributes
,
812 "viewers/menu", LTTV_POINTER
, &value
));
813 menu
= (LttvMenus
*)*(value
.v_pointer
);
816 for(i
=0;i
<menu
->len
;i
++){
817 menuItem
= &g_array_index(menu
, lttv_menu_closure
, i
);
818 tmp
= g_hash_table_lookup(mw
->hash_menu_item
, g_strdup(menuItem
->menuText
));
820 constructor
= menuItem
->con
;
821 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"ToolMenuTitle_menu");
822 insert_view
= gtk_menu_item_new_with_mnemonic (menuItem
->menuText
);
823 gtk_widget_show (insert_view
);
824 gtk_container_add (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
825 g_signal_connect ((gpointer
) insert_view
, "activate",
826 G_CALLBACK (insertViewTest
),
828 g_hash_table_insert(mw
->hash_menu_item
, g_strdup(menuItem
->menuText
),
833 g_assert(lttv_iattribute_find_by_path(attributes
,
834 "viewers/toolbar", LTTV_POINTER
, &value
));
835 toolbar
= (LttvToolbars
*)*(value
.v_pointer
);
838 for(i
=0;i
<toolbar
->len
;i
++){
839 toolbarItem
= &g_array_index(toolbar
, lttv_toolbar_closure
, i
);
840 tmp
= g_hash_table_lookup(mw
->hash_toolbar_item
, g_strdup(toolbarItem
->tooltip
));
842 constructor
= toolbarItem
->con
;
843 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"MToolbar2");
844 pixbuf
= gdk_pixbuf_new_from_xpm_data ((const char**)toolbarItem
->pixmap
);
845 pixmap
= gtk_image_new_from_pixbuf(pixbuf
);
846 insert_view
= gtk_toolbar_append_element (GTK_TOOLBAR (ToolMenuTitle_menu
),
847 GTK_TOOLBAR_CHILD_BUTTON
,
850 toolbarItem
->tooltip
, NULL
,
852 gtk_label_set_use_underline (GTK_LABEL (((GtkToolbarChild
*) (g_list_last (GTK_TOOLBAR (ToolMenuTitle_menu
)->children
)->data
))->label
), TRUE
);
853 gtk_widget_show (insert_view
);
854 gtk_container_set_border_width (GTK_CONTAINER (insert_view
), 1);
855 g_signal_connect ((gpointer
) insert_view
, "clicked",G_CALLBACK (insertViewTest
),constructor
);
856 g_hash_table_insert(mw
->hash_toolbar_item
, g_strdup(toolbarItem
->tooltip
),
862 void constructMainWin(mainWindow
* parent
, WindowCreationData
* win_creation_data
,
863 gboolean first_window
)
865 g_critical("constructMainWin()");
866 GtkWidget
* newWindow
; /* New generated main window */
867 mainWindow
* newMWindow
;/* New main window structure */
868 GtkNotebook
* notebook
;
869 LttvIAttribute
*attributes
=
870 LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
871 LttvAttributeValue value
;
873 newMWindow
= g_new(mainWindow
, 1);
875 // Add the object's information to the module's array
876 Main_Window_List
= g_slist_append(Main_Window_List
, newMWindow
);
879 newWindow
= create_MWindow();
880 gtk_widget_show (newWindow
);
882 newMWindow
->Attributes
= attributes
;
884 newMWindow
->Traceset_Info
= g_new(TracesetInfo
,1);
885 newMWindow
->Traceset_Info
->path
= NULL
;
888 newMWindow
->Traceset_Info
->before_traceset
= lttv_hooks_new();
889 newMWindow
->Traceset_Info
->after_traceset
= lttv_hooks_new();
890 newMWindow
->Traceset_Info
->before_trace
= lttv_hooks_new();
891 newMWindow
->Traceset_Info
->after_trace
= lttv_hooks_new();
892 newMWindow
->Traceset_Info
->before_tracefile
= lttv_hooks_new();
893 newMWindow
->Traceset_Info
->after_tracefile
= lttv_hooks_new();
894 newMWindow
->Traceset_Info
->before_event
= lttv_hooks_new();
895 newMWindow
->Traceset_Info
->after_event
= lttv_hooks_new();
897 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/traceset/before",
898 LTTV_POINTER
, &value
));
899 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_traceset
;
900 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/traceset/after",
901 LTTV_POINTER
, &value
));
902 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_traceset
;
903 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/trace/before",
904 LTTV_POINTER
, &value
));
905 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_trace
;
906 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/trace/after",
907 LTTV_POINTER
, &value
));
908 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_trace
;
909 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/tracefile/before",
910 LTTV_POINTER
, &value
));
911 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_tracefile
;
912 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/tracefile/after",
913 LTTV_POINTER
, &value
));
914 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_tracefile
;
915 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/event/before",
916 LTTV_POINTER
, &value
));
917 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_event
;
918 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/event/after",
919 LTTV_POINTER
, &value
));
920 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_event
;
923 newMWindow
->MWindow
= newWindow
;
924 newMWindow
->Tab
= NULL
;
925 newMWindow
->CurrentTab
= NULL
;
926 newMWindow
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
928 newMWindow
->Traceset_Info
->traceset
=
929 lttv_traceset_copy(parent
->Traceset_Info
->traceset
);
931 //FIXME copy not implemented in lower level
932 newMWindow
->Traceset_Info
->TracesetContext
=
933 g_object_new(LTTV_TRACESET_STATS_TYPE
, NULL
);
935 LTTV_TRACESET_CONTEXT(newMWindow
->Traceset_Info
->TracesetContext
),
936 newMWindow
->Traceset_Info
->traceset
);
937 //newMWindow->traceset_context = parent->traceset_context;
938 newMWindow
->winCreationData
= parent
->winCreationData
;
940 newMWindow
->Traceset_Info
->traceset
= lttv_traceset_new();
942 /* Add the command line trace */
943 if(gInit_Trace
!= NULL
&& first_window
)
944 lttv_traceset_add(newMWindow
->Traceset_Info
->traceset
, gInit_Trace
);
945 /* NOTE : the context must be recreated if we change the traceset,
946 * ie : adding/removing traces */
947 newMWindow
->Traceset_Info
->TracesetContext
=
948 g_object_new(LTTV_TRACESET_STATS_TYPE
, NULL
);
950 LTTV_TRACESET_CONTEXT(newMWindow
->Traceset_Info
->TracesetContext
),
951 newMWindow
->Traceset_Info
->traceset
);
953 newMWindow
->winCreationData
= win_creation_data
;
956 newMWindow
->hash_menu_item
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
957 destroy_hash_key
, destroy_hash_data
);
958 newMWindow
->hash_toolbar_item
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
959 destroy_hash_key
, destroy_hash_data
);
961 insertMenuToolbarItem(newMWindow
, NULL
);
963 g_object_set_data(G_OBJECT(newWindow
), "mainWindow", (gpointer
)newMWindow
);
965 //create a default tab
966 notebook
= (GtkNotebook
*)lookup_widget(newMWindow
->MWindow
, "MNotebook");
967 if(notebook
== NULL
){
968 g_printf("Notebook does not exist\n");
971 //for now there is no name field in LttvTraceset structure
972 //Use "Traceset" as the label for the default tab
973 create_tab(newMWindow
->MWindow
, notebook
,"Traceset");
975 g_object_set_data_full(
976 G_OBJECT(newMWindow
->MWindow
),
979 (GDestroyNotify
)mainWindow_free
);
984 void Tab_Destructor(tab
*Tab
)
987 g_object_unref(Tab
->Attributes
);
989 if(Tab
->mw
->Tab
== Tab
){
990 Tab
->mw
->Tab
= Tab
->Next
;
992 tab
* tmp1
, *tmp
= Tab
->mw
->Tab
;
997 tmp1
->Next
= Tab
->Next
;
1002 void * create_tab(GtkWidget
* parent
, GtkNotebook
* notebook
, char * label
)
1006 mainWindow
* mwData
;
1009 mwData
= get_window_data_struct(parent
);
1010 tmpTab
= mwData
->Tab
;
1011 while(tmpTab
&& tmpTab
->Next
) tmpTab
= tmpTab
->Next
;
1013 mwData
->CurrentTab
= NULL
;
1014 tmpTab
= g_new(tab
,1);
1015 mwData
->Tab
= tmpTab
;
1017 tmpTab
->Next
= g_new(tab
,1);
1018 tmpTab
= tmpTab
->Next
;
1020 if(mwData
->CurrentTab
){
1021 // Will have to read directly at the main window level, as we want
1022 // to be able to modify a traceset on the fly.
1023 // tmpTab->traceStartTime = mwData->CurrentTab->traceStartTime;
1024 // tmpTab->traceEndTime = mwData->CurrentTab->traceEndTime;
1025 tmpTab
->Time_Window
= mwData
->CurrentTab
->Time_Window
;
1026 tmpTab
->currentTime
= mwData
->CurrentTab
->currentTime
;
1028 // Will have to read directly at the main window level, as we want
1029 // to be able to modify a traceset on the fly.
1030 // getTracesetTimeSpan(mwData,&tmpTab->traceStartTime, &tmpTab->traceEndTime);
1031 tmpTab
->Time_Window
.startTime
=
1032 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->startTime
;
1033 if(DEFAULT_TIME_WIDTH_S
<
1034 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->endTime
.tv_sec
)
1035 TmpTime
.tv_sec
= DEFAULT_TIME_WIDTH_S
;
1038 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->endTime
.tv_sec
;
1039 TmpTime
.tv_nsec
= 0;
1040 tmpTab
->Time_Window
.Time_Width
= TmpTime
;
1041 tmpTab
->currentTime
.tv_sec
= TmpTime
.tv_sec
/ 2;
1042 tmpTab
->currentTime
.tv_nsec
= 0 ;
1044 tmpTab
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
1045 // mwData->CurrentTab = tmpTab;
1046 tmpTab
->custom
= (GtkCustom
*)gtk_custom_new();
1047 tmpTab
->custom
->mw
= mwData
;
1048 gtk_widget_show((GtkWidget
*)tmpTab
->custom
);
1049 tmpTab
->Next
= NULL
;
1050 tmpTab
->mw
= mwData
;
1052 tmpTab
->label
= gtk_label_new (label
);
1053 gtk_widget_show (tmpTab
->label
);
1055 g_object_set_data_full(
1056 G_OBJECT(tmpTab
->custom
),
1059 (GDestroyNotify
)Tab_Destructor
);
1061 gtk_notebook_append_page(notebook
, (GtkWidget
*)tmpTab
->custom
, tmpTab
->label
);
1062 list
= gtk_container_get_children(GTK_CONTAINER(notebook
));
1063 gtk_notebook_set_current_page(notebook
,g_list_length(list
)-1);
1066 void remove_menu_item(gpointer main_win
, gpointer user_data
)
1068 mainWindow
* mw
= (mainWindow
*) main_win
;
1069 lttv_menu_closure
*menuItem
= (lttv_menu_closure
*)user_data
;
1070 GtkWidget
* ToolMenuTitle_menu
, *insert_view
;
1072 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"ToolMenuTitle_menu");
1073 insert_view
= (GtkWidget
*)g_hash_table_lookup(mw
->hash_menu_item
,
1074 menuItem
->menuText
);
1076 g_hash_table_remove(mw
->hash_menu_item
, menuItem
->menuText
);
1077 gtk_container_remove (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
1081 void remove_toolbar_item(gpointer main_win
, gpointer user_data
)
1083 mainWindow
* mw
= (mainWindow
*) main_win
;
1084 lttv_toolbar_closure
*toolbarItem
= (lttv_toolbar_closure
*)user_data
;
1085 GtkWidget
* ToolMenuTitle_menu
, *insert_view
;
1088 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"MToolbar2");
1089 insert_view
= (GtkWidget
*)g_hash_table_lookup(mw
->hash_toolbar_item
,
1090 toolbarItem
->tooltip
);
1092 g_hash_table_remove(mw
->hash_toolbar_item
, toolbarItem
->tooltip
);
1093 gtk_container_remove (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
1098 * Remove menu and toolbar item when a module unloaded
1100 void main_window_remove_menu_item(lttv_constructor constructor
)
1104 lttv_menu_closure
*menuItem
;
1105 LttvAttributeValue value
;
1106 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
1108 g_assert(lttv_iattribute_find_by_path(attributes
,
1109 "viewers/menu", LTTV_POINTER
, &value
));
1110 menu
= (LttvMenus
*)*(value
.v_pointer
);
1113 for(i
=0;i
<menu
->len
;i
++){
1114 menuItem
= &g_array_index(menu
, lttv_menu_closure
, i
);
1115 if(menuItem
->con
!= constructor
) continue;
1116 g_slist_foreach(Main_Window_List
, remove_menu_item
, menuItem
);
1123 void main_window_remove_toolbar_item(lttv_constructor constructor
)
1126 LttvToolbars
* toolbar
;
1127 lttv_toolbar_closure
*toolbarItem
;
1128 LttvAttributeValue value
;
1129 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
1131 g_assert(lttv_iattribute_find_by_path(attributes
,
1132 "viewers/toolbar", LTTV_POINTER
, &value
));
1133 toolbar
= (LttvToolbars
*)*(value
.v_pointer
);
1136 for(i
=0;i
<toolbar
->len
;i
++){
1137 toolbarItem
= &g_array_index(toolbar
, lttv_toolbar_closure
, i
);
1138 if(toolbarItem
->con
!= constructor
) continue;
1139 g_slist_foreach(Main_Window_List
, remove_toolbar_item
, toolbarItem
);