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");
173 void add_trace(GtkWidget
* widget
, gpointer user_data
)
175 g_printf("add a trace to a trace set\n");
178 void remove_trace(GtkWidget
* widget
, gpointer user_data
)
180 g_printf("remove a trace from a trace set\n");
183 void save(GtkWidget
* widget
, gpointer user_data
)
188 void save_as(GtkWidget
* widget
, gpointer user_data
)
190 g_printf("Save as\n");
193 void zoom_in(GtkWidget
* widget
, gpointer user_data
)
195 g_printf("Zoom in\n");
198 void zoom_out(GtkWidget
* widget
, gpointer user_data
)
200 g_printf("Zoom out\n");
203 void zoom_extended(GtkWidget
* widget
, gpointer user_data
)
205 g_printf("Zoom extended\n");
208 void go_to_time(GtkWidget
* widget
, gpointer user_data
)
210 g_printf("Go to time\n");
213 void show_time_frame(GtkWidget
* widget
, gpointer user_data
)
215 g_printf("Show time frame\n");
219 /* callback function */
222 on_empty_traceset_activate (GtkMenuItem
*menuitem
,
225 createNewWindow((GtkWidget
*)menuitem
, user_data
, FALSE
);
230 on_clone_traceset_activate (GtkMenuItem
*menuitem
,
233 createNewWindow((GtkWidget
*)menuitem
, user_data
, TRUE
);
238 on_tab_activate (GtkMenuItem
*menuitem
,
241 gchar label
[PATH_LENGTH
];
242 GtkNotebook
* notebook
= (GtkNotebook
*)lookup_widget((GtkWidget
*)menuitem
, "MNotebook");
243 if(notebook
== NULL
){
244 g_printf("Notebook does not exist\n");
248 strcpy(label
,"Page");
249 get_label(NULL
, label
,"Get the name of the tab","Please input tab's name");
251 create_tab ((GtkWidget
*)menuitem
, notebook
, label
);
256 on_open_activate (GtkMenuItem
*menuitem
,
259 open_traceset((GtkWidget
*)menuitem
, user_data
);
264 on_close_activate (GtkMenuItem
*menuitem
,
267 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
268 mainWindow_Destructor(mwData
);
273 on_close_tab_activate (GtkMenuItem
*menuitem
,
277 GtkWidget
* notebook
;
279 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
280 notebook
= lookup_widget((GtkWidget
*)menuitem
, "MNotebook");
281 if(notebook
== NULL
){
282 g_printf("Notebook does not exist\n");
286 if(mwData
->Tab
== mwData
->CurrentTab
){
287 // tmp = mwData->CurrentTab;
288 // mwData->Tab = mwData->CurrentTab->Next;
289 g_printf("The default TAB can not be deleted\n");
293 while(tmp
!= mwData
->CurrentTab
){
299 gtk_notebook_remove_page((GtkNotebook
*)notebook
, count
);
304 on_add_trace_activate (GtkMenuItem
*menuitem
,
307 add_trace((GtkWidget
*)menuitem
, user_data
);
312 on_remove_trace_activate (GtkMenuItem
*menuitem
,
315 remove_trace((GtkWidget
*)menuitem
, user_data
);
320 on_save_activate (GtkMenuItem
*menuitem
,
323 save((GtkWidget
*)menuitem
, user_data
);
328 on_save_as_activate (GtkMenuItem
*menuitem
,
331 save_as((GtkWidget
*)menuitem
, user_data
);
336 on_quit_activate (GtkMenuItem
*menuitem
,
344 on_cut_activate (GtkMenuItem
*menuitem
,
352 on_copy_activate (GtkMenuItem
*menuitem
,
360 on_paste_activate (GtkMenuItem
*menuitem
,
368 on_delete_activate (GtkMenuItem
*menuitem
,
371 g_printf("Delete\n");
376 on_zoom_in_activate (GtkMenuItem
*menuitem
,
379 zoom_in((GtkWidget
*)menuitem
, user_data
);
384 on_zoom_out_activate (GtkMenuItem
*menuitem
,
387 zoom_out((GtkWidget
*)menuitem
, user_data
);
392 on_zoom_extended_activate (GtkMenuItem
*menuitem
,
395 zoom_extended((GtkWidget
*)menuitem
, user_data
);
400 on_go_to_time_activate (GtkMenuItem
*menuitem
,
403 go_to_time((GtkWidget
*)menuitem
, user_data
);
408 on_show_time_frame_activate (GtkMenuItem
*menuitem
,
411 show_time_frame((GtkWidget
*)menuitem
, user_data
);
416 on_move_viewer_up_activate (GtkMenuItem
*menuitem
,
419 move_up_viewer((GtkWidget
*)menuitem
, user_data
);
424 on_move_viewer_down_activate (GtkMenuItem
*menuitem
,
427 move_down_viewer((GtkWidget
*)menuitem
, user_data
);
432 on_remove_viewer_activate (GtkMenuItem
*menuitem
,
435 delete_viewer((GtkWidget
*)menuitem
, user_data
);
440 on_load_module_activate (GtkMenuItem
*menuitem
,
445 char str
[PATH_LENGTH
];
446 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
447 GtkFileSelection
* fileSelector
= (GtkFileSelection
*)gtk_file_selection_new("Select a module");
448 gtk_file_selection_hide_fileop_buttons(fileSelector
);
451 id
= gtk_dialog_run(GTK_DIALOG(fileSelector
));
453 case GTK_RESPONSE_ACCEPT
:
454 case GTK_RESPONSE_OK
:
455 dir
= gtk_file_selection_get_selections (fileSelector
);
457 if(mwData
->winCreationData
)
458 lttv_module_load(str
, mwData
->winCreationData
->argc
,mwData
->winCreationData
->argv
);
460 lttv_module_load(str
, 0,NULL
);
462 case GTK_RESPONSE_REJECT
:
463 case GTK_RESPONSE_CANCEL
:
465 gtk_widget_destroy((GtkWidget
*)fileSelector
);
468 g_printf("Load module: %s\n", str
);
473 on_unload_module_activate (GtkMenuItem
*menuitem
,
477 char **name
, *unload_module_name
;
479 LttvModule
** modules
, *module
;
480 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
482 modules
= lttv_module_list(&nb
);
483 name
= g_new(char*, nb
);
486 name
[i
] = lttv_module_name(module
);
489 unload_module_name
=get_unload_module(name
,nb
);
491 if(unload_module_name
){
493 if(strcmp(unload_module_name
, name
[i
]) == 0){
494 lttv_module_unload(modules
[i
]);
505 on_add_module_search_path_activate (GtkMenuItem
*menuitem
,
508 GtkDirSelection
* fileSelector
= (GtkDirSelection
*)gtk_dir_selection_new("Select module path");
512 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
514 id
= gtk_dialog_run(GTK_DIALOG(fileSelector
));
516 case GTK_RESPONSE_ACCEPT
:
517 case GTK_RESPONSE_OK
:
518 dir
= gtk_dir_selection_get_dir (fileSelector
);
519 lttv_module_path_add(dir
);
520 case GTK_RESPONSE_REJECT
:
521 case GTK_RESPONSE_CANCEL
:
523 gtk_widget_destroy((GtkWidget
*)fileSelector
);
530 on_color_activate (GtkMenuItem
*menuitem
,
538 on_filter_activate (GtkMenuItem
*menuitem
,
541 g_printf("Filter\n");
546 on_save_configuration_activate (GtkMenuItem
*menuitem
,
549 g_printf("Save configuration\n");
554 on_content_activate (GtkMenuItem
*menuitem
,
557 g_printf("Content\n");
562 on_about_activate (GtkMenuItem
*menuitem
,
565 g_printf("About...\n");
570 on_button_new_clicked (GtkButton
*button
,
573 createNewWindow((GtkWidget
*)button
, user_data
, FALSE
);
578 on_button_open_clicked (GtkButton
*button
,
581 open_traceset((GtkWidget
*)button
, user_data
);
586 on_button_add_trace_clicked (GtkButton
*button
,
589 add_trace((GtkWidget
*)button
, user_data
);
594 on_button_remove_trace_clicked (GtkButton
*button
,
597 remove_trace((GtkWidget
*)button
, user_data
);
602 on_button_save_clicked (GtkButton
*button
,
605 save((GtkWidget
*)button
, user_data
);
610 on_button_save_as_clicked (GtkButton
*button
,
613 save_as((GtkWidget
*)button
, user_data
);
618 on_button_zoom_in_clicked (GtkButton
*button
,
621 zoom_in((GtkWidget
*)button
, user_data
);
626 on_button_zoom_out_clicked (GtkButton
*button
,
629 zoom_out((GtkWidget
*)button
, user_data
);
634 on_button_zoom_extended_clicked (GtkButton
*button
,
637 zoom_extended((GtkWidget
*)button
, user_data
);
642 on_button_go_to_time_clicked (GtkButton
*button
,
645 go_to_time((GtkWidget
*)button
, user_data
);
650 on_button_show_time_frame_clicked (GtkButton
*button
,
653 show_time_frame((GtkWidget
*)button
, user_data
);
658 on_button_move_up_clicked (GtkButton
*button
,
661 move_up_viewer((GtkWidget
*)button
, user_data
);
666 on_button_move_down_clicked (GtkButton
*button
,
669 move_down_viewer((GtkWidget
*)button
, user_data
);
674 on_button_delete_viewer_clicked (GtkButton
*button
,
677 delete_viewer((GtkWidget
*)button
, user_data
);
681 on_MWindow_destroy (GtkObject
*object
,
684 mainWindow
*Main_Window
= (mainWindow
*)user_data
;
686 g_printf("There are : %d windows\n",g_slist_length(Main_Window_List
));
695 on_MNotebook_switch_page (GtkNotebook
*notebook
,
696 GtkNotebookPage
*page
,
700 mainWindow
* mw
= get_window_data_struct((GtkWidget
*)notebook
);
707 mw
->CurrentTab
= Tab
;
710 char * get_unload_module(char ** loaded_module_name
, int nb_module
)
712 GtkWidget
* dialogue
;
713 GtkWidget
* scroll_win
;
715 GtkListStore
* store
;
716 GtkTreeViewColumn
* column
;
717 GtkCellRenderer
* renderer
;
718 GtkTreeSelection
* select
;
721 char * unload_module_name
= NULL
;
723 dialogue
= gtk_dialog_new_with_buttons("Select an unload module",
726 GTK_STOCK_OK
,GTK_RESPONSE_ACCEPT
,
727 GTK_STOCK_CANCEL
,GTK_RESPONSE_REJECT
,
729 gtk_window_set_default_size((GtkWindow
*)dialogue
, 500, 200);
731 scroll_win
= gtk_scrolled_window_new (NULL
, NULL
);
732 gtk_widget_show ( scroll_win
);
733 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win
),
734 GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
736 store
= gtk_list_store_new (N_COLUMNS
,G_TYPE_STRING
);
737 tree
= gtk_tree_view_new_with_model(GTK_TREE_MODEL (store
));
738 gtk_widget_show ( tree
);
739 g_object_unref (G_OBJECT (store
));
741 renderer
= gtk_cell_renderer_text_new ();
742 column
= gtk_tree_view_column_new_with_attributes ("MODULE NAME",
744 "text", MODULE_COLUMN
,
746 gtk_tree_view_column_set_alignment (column
, 0.5);
747 gtk_tree_view_column_set_fixed_width (column
, 150);
748 gtk_tree_view_append_column (GTK_TREE_VIEW (tree
), column
);
750 select
= gtk_tree_view_get_selection (GTK_TREE_VIEW (tree
));
751 gtk_tree_selection_set_mode (select
, GTK_SELECTION_SINGLE
);
753 gtk_container_add (GTK_CONTAINER (scroll_win
), tree
);
755 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), scroll_win
,TRUE
, TRUE
,0);
757 for(i
=0;i
<nb_module
;i
++){
758 gtk_list_store_append (store
, &iter
);
759 gtk_list_store_set (store
, &iter
, MODULE_COLUMN
,loaded_module_name
[i
],-1);
762 id
= gtk_dialog_run(GTK_DIALOG(dialogue
));
764 case GTK_RESPONSE_ACCEPT
:
765 case GTK_RESPONSE_OK
:
766 if (gtk_tree_selection_get_selected (select
, (GtkTreeModel
**)&store
, &iter
)){
767 gtk_tree_model_get ((GtkTreeModel
*)store
, &iter
, MODULE_COLUMN
, &unload_module_name
, -1);
769 case GTK_RESPONSE_REJECT
:
770 case GTK_RESPONSE_CANCEL
:
772 gtk_widget_destroy(dialogue
);
776 return unload_module_name
;
779 void destroy_hash_key(gpointer key
)
784 void destroy_hash_data(gpointer data
)
789 void insertMenuToolbarItem(mainWindow
* mw
)
793 view_constructor constructor
;
795 LttvToolbars
* toolbar
;
796 lttv_menu_closure
*menuItem
;
797 lttv_toolbar_closure
*toolbarItem
;
798 LttvAttributeValue value
;
799 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
800 GtkWidget
* ToolMenuTitle_menu
, *insert_view
, *pixmap
;
802 g_assert(lttv_iattribute_find_by_path(attributes
,
803 "viewers/menu", LTTV_POINTER
, &value
));
804 menu
= (LttvMenus
*)*(value
.v_pointer
);
807 for(i
=0;i
<menu
->len
;i
++){
808 menuItem
= &g_array_index(menu
, lttv_menu_closure
, i
);
809 constructor
= menuItem
->con
;
810 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"ToolMenuTitle_menu");
811 insert_view
= gtk_menu_item_new_with_mnemonic (menuItem
->menuText
);
812 gtk_widget_show (insert_view
);
813 gtk_container_add (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
814 g_signal_connect ((gpointer
) insert_view
, "activate",
815 G_CALLBACK (insertViewTest
),
817 g_hash_table_insert(mw
->hash_menu_item
, g_strdup(menuItem
->menuText
),
822 g_assert(lttv_iattribute_find_by_path(attributes
,
823 "viewers/toolbar", LTTV_POINTER
, &value
));
824 toolbar
= (LttvToolbars
*)*(value
.v_pointer
);
827 for(i
=0;i
<toolbar
->len
;i
++){
828 toolbarItem
= &g_array_index(toolbar
, lttv_toolbar_closure
, i
);
829 constructor
= toolbarItem
->con
;
830 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"MToolbar2");
831 pixbuf
= gdk_pixbuf_new_from_xpm_data ((const char**)toolbarItem
->pixmap
);
832 pixmap
= gtk_image_new_from_pixbuf(pixbuf
);
833 insert_view
= gtk_toolbar_append_element (GTK_TOOLBAR (ToolMenuTitle_menu
),
834 GTK_TOOLBAR_CHILD_BUTTON
,
837 toolbarItem
->tooltip
, NULL
,
839 gtk_label_set_use_underline (GTK_LABEL (((GtkToolbarChild
*) (g_list_last (GTK_TOOLBAR (ToolMenuTitle_menu
)->children
)->data
))->label
), TRUE
);
840 gtk_widget_show (insert_view
);
841 gtk_container_set_border_width (GTK_CONTAINER (insert_view
), 1);
842 g_signal_connect ((gpointer
) insert_view
, "clicked",G_CALLBACK (insertViewTest
),constructor
);
843 g_hash_table_insert(mw
->hash_toolbar_item
, g_strdup(toolbarItem
->tooltip
),
849 void constructMainWin(mainWindow
* parent
, WindowCreationData
* win_creation_data
,
850 gboolean first_window
)
852 g_critical("constructMainWin()");
853 GtkWidget
* newWindow
; /* New generated main window */
854 mainWindow
* newMWindow
;/* New main window structure */
855 GtkNotebook
* notebook
;
856 LttvIAttribute
*attributes
=
857 LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
858 LttvAttributeValue value
;
860 newMWindow
= g_new(mainWindow
, 1);
862 // Add the object's information to the module's array
863 Main_Window_List
= g_slist_append(Main_Window_List
, newMWindow
);
866 newWindow
= create_MWindow();
867 gtk_widget_show (newWindow
);
869 newMWindow
->Attributes
= attributes
;
871 newMWindow
->Traceset_Info
= g_new(TracesetInfo
,1);
872 newMWindow
->Traceset_Info
->path
= NULL
;
875 newMWindow
->Traceset_Info
->before_traceset
= lttv_hooks_new();
876 newMWindow
->Traceset_Info
->after_traceset
= lttv_hooks_new();
877 newMWindow
->Traceset_Info
->before_trace
= lttv_hooks_new();
878 newMWindow
->Traceset_Info
->after_trace
= lttv_hooks_new();
879 newMWindow
->Traceset_Info
->before_tracefile
= lttv_hooks_new();
880 newMWindow
->Traceset_Info
->after_tracefile
= lttv_hooks_new();
881 newMWindow
->Traceset_Info
->before_event
= lttv_hooks_new();
882 newMWindow
->Traceset_Info
->after_event
= lttv_hooks_new();
884 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/traceset/before",
885 LTTV_POINTER
, &value
));
886 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_traceset
;
887 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/traceset/after",
888 LTTV_POINTER
, &value
));
889 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_traceset
;
890 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/trace/before",
891 LTTV_POINTER
, &value
));
892 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_trace
;
893 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/trace/after",
894 LTTV_POINTER
, &value
));
895 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_trace
;
896 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/tracefile/before",
897 LTTV_POINTER
, &value
));
898 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_tracefile
;
899 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/tracefile/after",
900 LTTV_POINTER
, &value
));
901 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_tracefile
;
902 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/event/before",
903 LTTV_POINTER
, &value
));
904 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_event
;
905 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/event/after",
906 LTTV_POINTER
, &value
));
907 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_event
;
910 newMWindow
->MWindow
= newWindow
;
911 newMWindow
->Tab
= NULL
;
912 newMWindow
->CurrentTab
= NULL
;
913 newMWindow
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
915 newMWindow
->Traceset_Info
->traceset
=
916 lttv_traceset_copy(parent
->Traceset_Info
->traceset
);
918 //FIXME copy not implemented in lower level
919 newMWindow
->Traceset_Info
->TracesetContext
=
920 g_object_new(LTTV_TRACESET_STATS_TYPE
, NULL
);
922 LTTV_TRACESET_CONTEXT(newMWindow
->Traceset_Info
->TracesetContext
),
923 newMWindow
->Traceset_Info
->traceset
);
924 //newMWindow->traceset_context = parent->traceset_context;
925 newMWindow
->winCreationData
= parent
->winCreationData
;
927 newMWindow
->Traceset_Info
->traceset
= lttv_traceset_new();
929 /* Add the command line trace */
930 if(gInit_Trace
!= NULL
&& first_window
)
931 lttv_traceset_add(newMWindow
->Traceset_Info
->traceset
, gInit_Trace
);
932 /* NOTE : the context must be recreated if we change the traceset,
933 * ie : adding/removing traces */
934 newMWindow
->Traceset_Info
->TracesetContext
=
935 g_object_new(LTTV_TRACESET_STATS_TYPE
, NULL
);
937 LTTV_TRACESET_CONTEXT(newMWindow
->Traceset_Info
->TracesetContext
),
938 newMWindow
->Traceset_Info
->traceset
);
940 newMWindow
->winCreationData
= win_creation_data
;
943 newMWindow
->hash_menu_item
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
944 destroy_hash_key
, destroy_hash_data
);
945 newMWindow
->hash_toolbar_item
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
946 destroy_hash_key
, destroy_hash_data
);
948 insertMenuToolbarItem(newMWindow
);
950 g_object_set_data(G_OBJECT(newWindow
), "mainWindow", (gpointer
)newMWindow
);
952 //create a default tab
953 notebook
= (GtkNotebook
*)lookup_widget(newMWindow
->MWindow
, "MNotebook");
954 if(notebook
== NULL
){
955 g_printf("Notebook does not exist\n");
958 //for now there is no name field in LttvTraceset structure
959 //Use "Traceset" as the label for the default tab
960 create_tab(newMWindow
->MWindow
, notebook
,"Traceset");
962 g_object_set_data_full(
963 G_OBJECT(newMWindow
->MWindow
),
966 (GDestroyNotify
)mainWindow_free
);
971 void Tab_Destructor(tab
*Tab
)
974 g_object_unref(Tab
->Attributes
);
976 if(Tab
->mw
->Tab
== Tab
){
977 Tab
->mw
->Tab
= Tab
->Next
;
979 tab
* tmp1
, *tmp
= Tab
->mw
->Tab
;
984 tmp1
->Next
= Tab
->Next
;
989 void * create_tab(GtkWidget
* parent
, GtkNotebook
* notebook
, char * label
)
996 mwData
= get_window_data_struct(parent
);
997 tmpTab
= mwData
->Tab
;
998 while(tmpTab
&& tmpTab
->Next
) tmpTab
= tmpTab
->Next
;
1000 mwData
->CurrentTab
= NULL
;
1001 tmpTab
= g_new(tab
,1);
1002 mwData
->Tab
= tmpTab
;
1004 tmpTab
->Next
= g_new(tab
,1);
1005 tmpTab
= tmpTab
->Next
;
1007 if(mwData
->CurrentTab
){
1008 // Will have to read directly at the main window level, as we want
1009 // to be able to modify a traceset on the fly.
1010 // tmpTab->traceStartTime = mwData->CurrentTab->traceStartTime;
1011 // tmpTab->traceEndTime = mwData->CurrentTab->traceEndTime;
1012 tmpTab
->Time_Window
= mwData
->CurrentTab
->Time_Window
;
1013 tmpTab
->currentTime
= mwData
->CurrentTab
->currentTime
;
1015 // Will have to read directly at the main window level, as we want
1016 // to be able to modify a traceset on the fly.
1017 // getTracesetTimeSpan(mwData,&tmpTab->traceStartTime, &tmpTab->traceEndTime);
1018 tmpTab
->Time_Window
.startTime
=
1019 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->startTime
;
1020 if(DEFAULT_TIME_WIDTH_S
<
1021 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->endTime
.tv_sec
)
1022 TmpTime
.tv_sec
= DEFAULT_TIME_WIDTH_S
;
1025 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->endTime
.tv_sec
;
1026 TmpTime
.tv_nsec
= 0;
1027 tmpTab
->Time_Window
.Time_Width
= TmpTime
;
1028 tmpTab
->currentTime
.tv_sec
= TmpTime
.tv_sec
/ 2;
1029 tmpTab
->currentTime
.tv_nsec
= 0 ;
1031 tmpTab
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
1032 // mwData->CurrentTab = tmpTab;
1033 tmpTab
->custom
= (GtkCustom
*)gtk_custom_new();
1034 tmpTab
->custom
->mw
= mwData
;
1035 gtk_widget_show((GtkWidget
*)tmpTab
->custom
);
1036 tmpTab
->Next
= NULL
;
1037 tmpTab
->mw
= mwData
;
1039 tmpTab
->label
= gtk_label_new (label
);
1040 gtk_widget_show (tmpTab
->label
);
1042 g_object_set_data_full(
1043 G_OBJECT(tmpTab
->custom
),
1046 (GDestroyNotify
)Tab_Destructor
);
1048 gtk_notebook_append_page(notebook
, (GtkWidget
*)tmpTab
->custom
, tmpTab
->label
);
1049 list
= gtk_container_get_children(GTK_CONTAINER(notebook
));
1050 gtk_notebook_set_current_page(notebook
,g_list_length(list
)-1);
1053 void remove_menu_item(gpointer main_win
, gpointer user_data
)
1055 mainWindow
* mw
= (mainWindow
*) main_win
;
1056 lttv_menu_closure
*menuItem
= (lttv_menu_closure
*)user_data
;
1057 GtkWidget
* ToolMenuTitle_menu
, *insert_view
;
1059 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"ToolMenuTitle_menu");
1060 insert_view
= (GtkWidget
*)g_hash_table_lookup(mw
->hash_menu_item
,
1061 menuItem
->menuText
);
1063 g_hash_table_remove(mw
->hash_menu_item
, menuItem
->menuText
);
1064 gtk_container_remove (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
1068 void remove_toolbar_item(gpointer main_win
, gpointer user_data
)
1070 mainWindow
* mw
= (mainWindow
*) main_win
;
1071 lttv_toolbar_closure
*toolbarItem
= (lttv_toolbar_closure
*)user_data
;
1072 GtkWidget
* ToolMenuTitle_menu
, *insert_view
;
1075 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"MToolbar2");
1076 insert_view
= (GtkWidget
*)g_hash_table_lookup(mw
->hash_toolbar_item
,
1077 toolbarItem
->tooltip
);
1079 g_hash_table_remove(mw
->hash_toolbar_item
, toolbarItem
->tooltip
);
1080 gtk_container_remove (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
1085 * Remove menu and toolbar item when a module unloaded
1087 void main_window_remove_menu_item(lttv_constructor constructor
)
1091 lttv_menu_closure
*menuItem
;
1092 LttvAttributeValue value
;
1093 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
1095 g_assert(lttv_iattribute_find_by_path(attributes
,
1096 "viewers/menu", LTTV_POINTER
, &value
));
1097 menu
= (LttvMenus
*)*(value
.v_pointer
);
1100 for(i
=0;i
<menu
->len
;i
++){
1101 menuItem
= &g_array_index(menu
, lttv_menu_closure
, i
);
1102 if(menuItem
->con
!= constructor
) continue;
1103 g_slist_foreach(Main_Window_List
, remove_menu_item
, menuItem
);
1110 void main_window_remove_toolbar_item(lttv_constructor constructor
)
1113 LttvToolbars
* toolbar
;
1114 lttv_toolbar_closure
*toolbarItem
;
1115 LttvAttributeValue value
;
1116 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
1118 g_assert(lttv_iattribute_find_by_path(attributes
,
1119 "viewers/toolbar", LTTV_POINTER
, &value
));
1120 toolbar
= (LttvToolbars
*)*(value
.v_pointer
);
1123 for(i
=0;i
<toolbar
->len
;i
++){
1124 toolbarItem
= &g_array_index(toolbar
, lttv_toolbar_closure
, i
);
1125 if(toolbarItem
->con
!= constructor
) continue;
1126 g_slist_foreach(Main_Window_List
, remove_toolbar_item
, toolbarItem
);