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
);
36 void insertView(GtkWidget
* widget
, view_constructor constructor
);
45 on_textview1_grab_focus (GtkTextView
*text_view
,
49 GtkCustom
* custom
= (GtkCustom
*)user_data
;
50 widget
= gtk_widget_get_parent((GtkWidget
*)text_view
);
51 widget
= gtk_widget_get_parent(widget
);
52 gtk_custom_set_focus((GtkWidget
*)custom
, (gpointer
)widget
);
56 insertViewTest(GtkMenuItem
*menuitem
, gpointer user_data
)
59 insertView((GtkWidget
*)menuitem
, (view_constructor
)user_data
);
60 // selected_hook(&val);
64 on_insert_viewer_test_activate (GtkMenuItem
*menuitem
,
67 GtkWidget
*scrolledwindow1
, *textview1
, *label
;
74 mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
75 if(!mwData
->CurrentTab
) return;
76 custom
= mwData
->CurrentTab
->custom
;
78 sprintf(str
,"label : %d",++count
);
79 scrolledwindow1
= gtk_scrolled_window_new (NULL
, NULL
);
80 gtk_widget_show (scrolledwindow1
);
81 label
= gtk_label_new(str
);
82 gtk_widget_show(label
);
84 gtk_custom_widget_add(custom
, scrolledwindow1
);
85 gtk_widget_set_size_request ((GtkWidget
*)scrolledwindow1
, 800, 100);
87 textview1
= gtk_text_view_new ();
88 gtk_widget_show (textview1
);
89 gtk_container_add (GTK_CONTAINER (scrolledwindow1
), textview1
);
90 buf
= gtk_text_view_get_buffer((GtkTextView
*)textview1
);
91 sprintf(str
,"text view : %d",count
);
92 gtk_text_buffer_set_text(buf
,str
, -1);
94 g_signal_connect ((gpointer
) textview1
, "grab_focus",
95 G_CALLBACK (on_textview1_grab_focus
), custom
);
98 /* end of test part */
101 /* internal functions */
102 void insertView(GtkWidget
* widget
, view_constructor constructor
)
108 mwData
= get_window_data_struct(widget
);
109 if(!mwData
->CurrentTab
) return;
110 custom
= mwData
->CurrentTab
->custom
;
112 viewer
= (GtkWidget
*)constructor(mwData
);
115 gtk_custom_widget_add(custom
, viewer
);
117 // g_object_unref(G_OBJECT(viewer));
121 void get_label_string (GtkWidget
* text
, gchar
* label
)
123 GtkEntry
* entry
= (GtkEntry
*)text
;
124 if(strlen(gtk_entry_get_text(entry
))!=0)
125 strcpy(label
,gtk_entry_get_text(entry
));
128 void get_label(GtkWindow
* mw
, gchar
* str
, gchar
* dialogue_title
, gchar
* label_str
)
130 GtkWidget
* dialogue
;
135 dialogue
= gtk_dialog_new_with_buttons(dialogue_title
,NULL
,
137 GTK_STOCK_OK
,GTK_RESPONSE_ACCEPT
,
138 GTK_STOCK_CANCEL
,GTK_RESPONSE_REJECT
,
141 label
= gtk_label_new(label_str
);
142 gtk_widget_show(label
);
144 text
= gtk_entry_new();
145 gtk_widget_show(text
);
147 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), label
,TRUE
, TRUE
,0);
148 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), text
,FALSE
, FALSE
,0);
150 id
= gtk_dialog_run(GTK_DIALOG(dialogue
));
152 case GTK_RESPONSE_ACCEPT
:
153 get_label_string(text
,str
);
154 gtk_widget_destroy(dialogue
);
156 case GTK_RESPONSE_REJECT
:
158 gtk_widget_destroy(dialogue
);
163 mainWindow
* get_window_data_struct(GtkWidget
* widget
)
168 mw
= lookup_widget(widget
, "MWindow");
170 g_printf("Main window does not exist\n");
174 mwData
= (mainWindow
*) g_object_get_data(G_OBJECT(mw
),"mainWindow");
176 g_printf("Main window data does not exist\n");
182 void createNewWindow(GtkWidget
* widget
, gpointer user_data
, gboolean clone
)
184 mainWindow
* parent
= get_window_data_struct(widget
);
186 constructMainWin(parent
, NULL
);
189 g_printf("Clone : use the same traceset\n");
191 g_printf("Empty : traceset is set to NULL\n");
195 void move_up_viewer(GtkWidget
* widget
, gpointer user_data
)
197 mainWindow
* mw
= get_window_data_struct(widget
);
198 if(!mw
->CurrentTab
) return;
199 gtk_custom_widget_move_up(mw
->CurrentTab
->custom
);
202 void move_down_viewer(GtkWidget
* widget
, gpointer user_data
)
204 mainWindow
* mw
= get_window_data_struct(widget
);
205 if(!mw
->CurrentTab
) return;
206 gtk_custom_widget_move_down(mw
->CurrentTab
->custom
);
209 void delete_viewer(GtkWidget
* widget
, gpointer user_data
)
211 mainWindow
* mw
= get_window_data_struct(widget
);
212 if(!mw
->CurrentTab
) return;
213 gtk_custom_widget_delete(mw
->CurrentTab
->custom
);
216 void open_traceset(GtkWidget
* widget
, gpointer user_data
)
218 g_printf("Open a trace set\n");
221 void add_trace(GtkWidget
* widget
, gpointer user_data
)
223 g_printf("add a trace to a trace set\n");
226 void remove_trace(GtkWidget
* widget
, gpointer user_data
)
228 g_printf("remove a trace from a trace set\n");
231 void save(GtkWidget
* widget
, gpointer user_data
)
236 void save_as(GtkWidget
* widget
, gpointer user_data
)
238 g_printf("Save as\n");
241 void zoom_in(GtkWidget
* widget
, gpointer user_data
)
243 g_printf("Zoom in\n");
246 void zoom_out(GtkWidget
* widget
, gpointer user_data
)
248 g_printf("Zoom out\n");
251 void zoom_extended(GtkWidget
* widget
, gpointer user_data
)
253 g_printf("Zoom extended\n");
256 void go_to_time(GtkWidget
* widget
, gpointer user_data
)
258 g_printf("Go to time\n");
261 void show_time_frame(GtkWidget
* widget
, gpointer user_data
)
263 g_printf("Show time frame\n");
267 /* callback function */
270 on_empty_traceset_activate (GtkMenuItem
*menuitem
,
273 createNewWindow((GtkWidget
*)menuitem
, user_data
, FALSE
);
278 on_clone_traceset_activate (GtkMenuItem
*menuitem
,
281 createNewWindow((GtkWidget
*)menuitem
, user_data
, TRUE
);
286 on_tab_activate (GtkMenuItem
*menuitem
,
289 gchar label
[PATH_LENGTH
];
290 GtkNotebook
* notebook
= (GtkNotebook
*)lookup_widget((GtkWidget
*)menuitem
, "MNotebook");
291 if(notebook
== NULL
){
292 g_printf("Notebook does not exist\n");
296 strcpy(label
,"Page");
297 get_label(NULL
, label
,"Get the name of the tab","Please input tab's name");
299 create_tab ((GtkWidget
*)menuitem
, notebook
, label
);
304 on_open_activate (GtkMenuItem
*menuitem
,
307 open_traceset((GtkWidget
*)menuitem
, user_data
);
312 on_close_activate (GtkMenuItem
*menuitem
,
320 on_close_tab_activate (GtkMenuItem
*menuitem
,
323 g_printf("Close tab\n");
328 on_add_trace_activate (GtkMenuItem
*menuitem
,
331 add_trace((GtkWidget
*)menuitem
, user_data
);
336 on_remove_trace_activate (GtkMenuItem
*menuitem
,
339 remove_trace((GtkWidget
*)menuitem
, user_data
);
344 on_save_activate (GtkMenuItem
*menuitem
,
347 save((GtkWidget
*)menuitem
, user_data
);
352 on_save_as_activate (GtkMenuItem
*menuitem
,
355 save_as((GtkWidget
*)menuitem
, user_data
);
360 on_quit_activate (GtkMenuItem
*menuitem
,
363 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
364 mainWindow_Destructor(mwData
);
369 on_cut_activate (GtkMenuItem
*menuitem
,
377 on_copy_activate (GtkMenuItem
*menuitem
,
385 on_paste_activate (GtkMenuItem
*menuitem
,
393 on_delete_activate (GtkMenuItem
*menuitem
,
396 g_printf("Delete\n");
401 on_zoom_in_activate (GtkMenuItem
*menuitem
,
404 zoom_in((GtkWidget
*)menuitem
, user_data
);
409 on_zoom_out_activate (GtkMenuItem
*menuitem
,
412 zoom_out((GtkWidget
*)menuitem
, user_data
);
417 on_zoom_extended_activate (GtkMenuItem
*menuitem
,
420 zoom_extended((GtkWidget
*)menuitem
, user_data
);
425 on_go_to_time_activate (GtkMenuItem
*menuitem
,
428 go_to_time((GtkWidget
*)menuitem
, user_data
);
433 on_show_time_frame_activate (GtkMenuItem
*menuitem
,
436 show_time_frame((GtkWidget
*)menuitem
, user_data
);
441 on_move_viewer_up_activate (GtkMenuItem
*menuitem
,
444 move_up_viewer((GtkWidget
*)menuitem
, user_data
);
449 on_move_viewer_down_activate (GtkMenuItem
*menuitem
,
452 move_down_viewer((GtkWidget
*)menuitem
, user_data
);
457 on_remove_viewer_activate (GtkMenuItem
*menuitem
,
460 delete_viewer((GtkWidget
*)menuitem
, user_data
);
465 on_load_module_activate (GtkMenuItem
*menuitem
,
470 char str
[PATH_LENGTH
];
471 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
472 GtkFileSelection
* fileSelector
= (GtkFileSelection
*)gtk_file_selection_new("Select a module");
473 gtk_file_selection_hide_fileop_buttons(fileSelector
);
476 id
= gtk_dialog_run(GTK_DIALOG(fileSelector
));
478 case GTK_RESPONSE_ACCEPT
:
479 case GTK_RESPONSE_OK
:
480 dir
= gtk_file_selection_get_selections (fileSelector
);
482 if(mwData
->winCreationData
)
483 lttv_module_load(str
, mwData
->winCreationData
->argc
,mwData
->winCreationData
->argv
);
485 lttv_module_load(str
, 0,NULL
);
487 case GTK_RESPONSE_REJECT
:
488 case GTK_RESPONSE_CANCEL
:
490 gtk_widget_destroy((GtkWidget
*)fileSelector
);
493 g_printf("Load module: %s\n", str
);
498 on_unload_module_activate (GtkMenuItem
*menuitem
,
502 char **name
, *unload_module_name
;
504 LttvModule
** modules
, *module
;
505 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
507 modules
= lttv_module_list(&nb
);
508 name
= g_new(char*, nb
);
511 name
[i
] = lttv_module_name(module
);
514 unload_module_name
=get_unload_module(name
,nb
);
516 if(unload_module_name
){
518 if(strcmp(unload_module_name
, name
[i
]) == 0){
519 lttv_module_unload(modules
[i
]);
530 on_add_module_search_path_activate (GtkMenuItem
*menuitem
,
533 GtkDirSelection
* fileSelector
= (GtkDirSelection
*)gtk_dir_selection_new("Select module path");
537 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
539 id
= gtk_dialog_run(GTK_DIALOG(fileSelector
));
541 case GTK_RESPONSE_ACCEPT
:
542 case GTK_RESPONSE_OK
:
543 dir
= gtk_dir_selection_get_dir (fileSelector
);
544 lttv_module_path_add(dir
);
545 case GTK_RESPONSE_REJECT
:
546 case GTK_RESPONSE_CANCEL
:
548 gtk_widget_destroy((GtkWidget
*)fileSelector
);
555 on_color_activate (GtkMenuItem
*menuitem
,
563 on_filter_activate (GtkMenuItem
*menuitem
,
566 g_printf("Filter\n");
571 on_save_configuration_activate (GtkMenuItem
*menuitem
,
574 g_printf("Save configuration\n");
579 on_content_activate (GtkMenuItem
*menuitem
,
582 g_printf("Content\n");
587 on_about_activate (GtkMenuItem
*menuitem
,
590 g_printf("About...\n");
595 on_button_new_clicked (GtkButton
*button
,
598 createNewWindow((GtkWidget
*)button
, user_data
, FALSE
);
603 on_button_open_clicked (GtkButton
*button
,
606 open_traceset((GtkWidget
*)button
, user_data
);
611 on_button_add_trace_clicked (GtkButton
*button
,
614 add_trace((GtkWidget
*)button
, user_data
);
619 on_button_remove_trace_clicked (GtkButton
*button
,
622 remove_trace((GtkWidget
*)button
, user_data
);
627 on_button_save_clicked (GtkButton
*button
,
630 save((GtkWidget
*)button
, user_data
);
635 on_button_save_as_clicked (GtkButton
*button
,
638 save_as((GtkWidget
*)button
, user_data
);
643 on_button_zoom_in_clicked (GtkButton
*button
,
646 zoom_in((GtkWidget
*)button
, user_data
);
651 on_button_zoom_out_clicked (GtkButton
*button
,
654 zoom_out((GtkWidget
*)button
, user_data
);
659 on_button_zoom_extended_clicked (GtkButton
*button
,
662 zoom_extended((GtkWidget
*)button
, user_data
);
667 on_button_go_to_time_clicked (GtkButton
*button
,
670 go_to_time((GtkWidget
*)button
, user_data
);
675 on_button_show_time_frame_clicked (GtkButton
*button
,
678 show_time_frame((GtkWidget
*)button
, user_data
);
683 on_button_move_up_clicked (GtkButton
*button
,
686 move_up_viewer((GtkWidget
*)button
, user_data
);
691 on_button_move_down_clicked (GtkButton
*button
,
694 move_down_viewer((GtkWidget
*)button
, user_data
);
699 on_button_delete_viewer_clicked (GtkButton
*button
,
702 delete_viewer((GtkWidget
*)button
, user_data
);
706 on_MWindow_destroy (GtkObject
*object
,
709 mainWindow
*Main_Window
= (mainWindow
*)user_data
;
711 g_printf("There are : %d windows\n",g_slist_length(Main_Window_List
));
720 on_MNotebook_switch_page (GtkNotebook
*notebook
,
721 GtkNotebookPage
*page
,
725 mainWindow
* mw
= get_window_data_struct((GtkWidget
*)notebook
);
732 mw
->CurrentTab
= Tab
;
735 char * get_unload_module(char ** loaded_module_name
, int nb_module
)
737 GtkWidget
* dialogue
;
738 GtkWidget
* scroll_win
;
740 GtkListStore
* store
;
741 GtkTreeViewColumn
* column
;
742 GtkCellRenderer
* renderer
;
743 GtkTreeSelection
* select
;
746 char * unload_module_name
= NULL
;
748 dialogue
= gtk_dialog_new_with_buttons("Select an unload module",
751 GTK_STOCK_OK
,GTK_RESPONSE_ACCEPT
,
752 GTK_STOCK_CANCEL
,GTK_RESPONSE_REJECT
,
754 gtk_window_set_default_size((GtkWindow
*)dialogue
, 500, 200);
756 scroll_win
= gtk_scrolled_window_new (NULL
, NULL
);
757 gtk_widget_show ( scroll_win
);
758 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win
),
759 GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
761 store
= gtk_list_store_new (N_COLUMNS
,G_TYPE_STRING
);
762 tree
= gtk_tree_view_new_with_model(GTK_TREE_MODEL (store
));
763 gtk_widget_show ( tree
);
764 g_object_unref (G_OBJECT (store
));
766 renderer
= gtk_cell_renderer_text_new ();
767 column
= gtk_tree_view_column_new_with_attributes ("MODULE NAME",
769 "text", MODULE_COLUMN
,
771 gtk_tree_view_column_set_alignment (column
, 0.5);
772 gtk_tree_view_column_set_fixed_width (column
, 150);
773 gtk_tree_view_append_column (GTK_TREE_VIEW (tree
), column
);
775 select
= gtk_tree_view_get_selection (GTK_TREE_VIEW (tree
));
776 gtk_tree_selection_set_mode (select
, GTK_SELECTION_SINGLE
);
778 gtk_container_add (GTK_CONTAINER (scroll_win
), tree
);
780 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), scroll_win
,TRUE
, TRUE
,0);
782 for(i
=0;i
<nb_module
;i
++){
783 gtk_list_store_append (store
, &iter
);
784 gtk_list_store_set (store
, &iter
, MODULE_COLUMN
,loaded_module_name
[i
],-1);
787 id
= gtk_dialog_run(GTK_DIALOG(dialogue
));
789 case GTK_RESPONSE_ACCEPT
:
790 case GTK_RESPONSE_OK
:
791 if (gtk_tree_selection_get_selected (select
, (GtkTreeModel
**)&store
, &iter
)){
792 gtk_tree_model_get ((GtkTreeModel
*)store
, &iter
, MODULE_COLUMN
, &unload_module_name
, -1);
794 case GTK_RESPONSE_REJECT
:
795 case GTK_RESPONSE_CANCEL
:
797 gtk_widget_destroy(dialogue
);
801 return unload_module_name
;
804 void insertMenuToolbarItem(mainWindow
* mw
)
808 view_constructor constructor
;
810 LttvToolbars
* toolbar
;
811 lttv_menu_closure
*menuItem
;
812 lttv_toolbar_closure
*toolbarItem
;
813 LttvAttributeValue value
;
814 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
815 GtkWidget
* ToolMenuTitle_menu
, *insert_view
, *pixmap
;
817 g_assert(lttv_iattribute_find_by_path(attributes
,
818 "viewers/menu", LTTV_POINTER
, &value
));
819 menu
= (LttvMenus
*)*(value
.v_pointer
);
822 for(i
=0;i
<menu
->len
;i
++){
823 menuItem
= &g_array_index(menu
, lttv_menu_closure
, i
);
824 constructor
= menuItem
->con
;
825 ToolMenuTitle_menu
= lookup_widget(mw
->MWindow
,"ToolMenuTitle_menu");
826 insert_view
= gtk_menu_item_new_with_mnemonic (menuItem
->menuText
);
827 gtk_widget_show (insert_view
);
828 gtk_container_add (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
829 g_signal_connect ((gpointer
) insert_view
, "activate",
830 G_CALLBACK (insertViewTest
),
835 g_assert(lttv_iattribute_find_by_path(attributes
,
836 "viewers/toolbar", LTTV_POINTER
, &value
));
837 toolbar
= (LttvToolbars
*)*(value
.v_pointer
);
840 for(i
=0;i
<toolbar
->len
;i
++){
841 toolbarItem
= &g_array_index(toolbar
, lttv_toolbar_closure
, i
);
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
);
860 void constructMainWin(mainWindow
* parent
, WindowCreationData
* win_creation_data
)
862 g_critical("constructMainWin()");
863 // systemView * sv = NULL; /* System view */
864 //systemView * newSv; /* New system view displayed in the new window */
865 GtkWidget
* newWindow
; /* New generated main window */
866 mainWindow
* newMWindow
;/* New main window structure */
867 GtkNotebook
* notebook
;
868 LttvIAttribute
*attributes
=
869 LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
870 LttvAttributeValue value
;
872 // if(parent) sv = parent->SystemView;
874 newMWindow
= g_new(mainWindow
, 1);
876 // Add the object's information to the module's array
877 Main_Window_List
= g_slist_append(Main_Window_List
, newMWindow
);
880 newWindow
= create_MWindow();
881 gtk_widget_show (newWindow
);
883 //newSv = g_new(systemView, 1);
885 // while(sv->Next) sv = sv->Next;
889 //newSv->EventDB = NULL;
890 //newSv->SystemInfo = NULL;
891 //newSv->Options = NULL;
892 //newSv->Next = NULL;
893 //newSv->Window = newMWindow;
895 newMWindow
->Attributes
= attributes
;
897 newMWindow
->Traceset_Info
= g_new(TracesetInfo
,1);
898 newMWindow
->Traceset_Info
->path
= NULL
;
901 newMWindow
->Traceset_Info
->before_traceset
= lttv_hooks_new();
902 newMWindow
->Traceset_Info
->after_traceset
= lttv_hooks_new();
903 newMWindow
->Traceset_Info
->before_trace
= lttv_hooks_new();
904 newMWindow
->Traceset_Info
->after_trace
= lttv_hooks_new();
905 newMWindow
->Traceset_Info
->before_tracefile
= lttv_hooks_new();
906 newMWindow
->Traceset_Info
->after_tracefile
= lttv_hooks_new();
907 newMWindow
->Traceset_Info
->before_event
= lttv_hooks_new();
908 newMWindow
->Traceset_Info
->after_event
= lttv_hooks_new();
910 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/traceset/before",
911 LTTV_POINTER
, &value
));
912 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_traceset
;
913 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/traceset/after",
914 LTTV_POINTER
, &value
));
915 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_traceset
;
916 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/trace/before",
917 LTTV_POINTER
, &value
));
918 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_trace
;
919 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/trace/after",
920 LTTV_POINTER
, &value
));
921 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_trace
;
922 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/tracefile/before",
923 LTTV_POINTER
, &value
));
924 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_tracefile
;
925 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/tracefile/after",
926 LTTV_POINTER
, &value
));
927 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_tracefile
;
928 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/event/before",
929 LTTV_POINTER
, &value
));
930 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->before_event
;
931 g_assert(lttv_iattribute_find_by_path(attributes
, "hooks/event/after",
932 LTTV_POINTER
, &value
));
933 *(value
.v_pointer
) = newMWindow
->Traceset_Info
->after_event
;
936 newMWindow
->MWindow
= newWindow
;
937 newMWindow
->Tab
= NULL
;
938 newMWindow
->CurrentTab
= NULL
;
939 //newMWindow->SystemView = newSv;
940 newMWindow
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
942 newMWindow
->Traceset_Info
->traceset
=
943 lttv_traceset_copy(parent
->Traceset_Info
->traceset
);
945 //FIXME copy not implemented in lower level
946 newMWindow
->Traceset_Info
->TracesetContext
=
947 g_object_new(LTTV_TRACESET_STATS_TYPE
, NULL
);
949 LTTV_TRACESET_CONTEXT(newMWindow
->Traceset_Info
->TracesetContext
),
950 newMWindow
->Traceset_Info
->traceset
);
951 //newMWindow->traceset_context = parent->traceset_context;
952 newMWindow
->winCreationData
= parent
->winCreationData
;
954 newMWindow
->Traceset_Info
->traceset
= lttv_traceset_new();
956 /* Add the command line trace */
957 if(gInit_Trace
!= NULL
)
958 lttv_traceset_add(newMWindow
->Traceset_Info
->traceset
, gInit_Trace
);
959 /* NOTE : the context must be recreated if we change the traceset,
960 * ie : adding/removing traces */
961 newMWindow
->Traceset_Info
->TracesetContext
=
962 g_object_new(LTTV_TRACESET_STATS_TYPE
, NULL
);
964 LTTV_TRACESET_CONTEXT(newMWindow
->Traceset_Info
->TracesetContext
),
965 newMWindow
->Traceset_Info
->traceset
);
967 newMWindow
->winCreationData
= win_creation_data
;
970 insertMenuToolbarItem(newMWindow
);
972 //g_object_set_data(G_OBJECT(newWindow), "systemView", (gpointer)newSv);
973 g_object_set_data(G_OBJECT(newWindow
), "mainWindow", (gpointer
)newMWindow
);
975 //create a default tab
976 notebook
= (GtkNotebook
*)lookup_widget(newMWindow
->MWindow
, "MNotebook");
977 if(notebook
== NULL
){
978 g_printf("Notebook does not exist\n");
981 //for now there is no name field in LttvTraceset structure
982 //Use "Traceset" as the label for the default tab
983 create_tab(newMWindow
->MWindow
, notebook
,"Traceset");
985 g_object_set_data_full(
986 G_OBJECT(newMWindow
->MWindow
),
989 (GDestroyNotify
)mainWindow_free
);
994 void Tab_Destructor(tab
*Tab
)
997 g_object_unref(Tab
->Attributes
);
1001 void * create_tab(GtkWidget
* parent
, GtkNotebook
* notebook
, char * label
)
1005 mainWindow
* mwData
;
1008 mwData
= get_window_data_struct(parent
);
1009 tmpTab
= mwData
->Tab
;
1010 while(tmpTab
&& tmpTab
->Next
) tmpTab
= tmpTab
->Next
;
1012 mwData
->CurrentTab
= NULL
;
1013 tmpTab
= g_new(tab
,1);
1014 mwData
->Tab
= tmpTab
;
1016 tmpTab
->Next
= g_new(tab
,1);
1017 tmpTab
= tmpTab
->Next
;
1019 if(mwData
->CurrentTab
){
1020 // Will have to read directly at the main window level, as we want
1021 // to be able to modify a traceset on the fly.
1022 // tmpTab->traceStartTime = mwData->CurrentTab->traceStartTime;
1023 // tmpTab->traceEndTime = mwData->CurrentTab->traceEndTime;
1024 tmpTab
->Time_Window
= mwData
->CurrentTab
->Time_Window
;
1025 tmpTab
->currentTime
= mwData
->CurrentTab
->currentTime
;
1027 // Will have to read directly at the main window level, as we want
1028 // to be able to modify a traceset on the fly.
1029 // getTracesetTimeSpan(mwData,&tmpTab->traceStartTime, &tmpTab->traceEndTime);
1030 tmpTab
->Time_Window
.startTime
=
1031 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->startTime
;
1032 if(DEFAULT_TIME_WIDTH_S
<
1033 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->endTime
.tv_sec
)
1034 TmpTime
.tv_sec
= DEFAULT_TIME_WIDTH_S
;
1037 LTTV_TRACESET_CONTEXT(mwData
->Traceset_Info
->TracesetContext
)->Time_Span
->endTime
.tv_sec
;
1038 TmpTime
.tv_nsec
= 0;
1039 tmpTab
->Time_Window
.Time_Width
= TmpTime
;
1040 tmpTab
->currentTime
.tv_sec
= TmpTime
.tv_sec
/ 2;
1041 tmpTab
->currentTime
.tv_nsec
= 0 ;
1043 tmpTab
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
1044 // mwData->CurrentTab = tmpTab;
1045 tmpTab
->custom
= (GtkCustom
*)gtk_custom_new();
1046 tmpTab
->custom
->mw
= mwData
;
1047 gtk_widget_show((GtkWidget
*)tmpTab
->custom
);
1048 tmpTab
->Next
= NULL
;
1050 tmpTab
->label
= gtk_label_new (label
);
1051 gtk_widget_show (tmpTab
->label
);
1053 g_object_set_data_full(
1054 G_OBJECT(tmpTab
->custom
),
1057 (GDestroyNotify
)Tab_Destructor
);
1059 gtk_notebook_append_page(notebook
, (GtkWidget
*)tmpTab
->custom
, tmpTab
->label
);
1060 list
= gtk_container_get_children(GTK_CONTAINER(notebook
));
1061 gtk_notebook_set_current_page(notebook
,g_list_length(list
)-1);