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>
18 #define PATH_LENGTH 256
20 extern systemView
* gSysView
;
21 extern LttvTracesetContext
* gTracesetContext
;
23 /** Array containing instanced objects. */
24 extern GSList
* Main_Window_List
;
26 mainWindow
* get_window_data_struct(GtkWidget
* widget
);
29 void insertView(GtkWidget
* widget
, view_constructor constructor
);
32 on_textview1_grab_focus (GtkTextView
*text_view
,
36 GtkCustom
* custom
= (GtkCustom
*)user_data
;
37 widget
= gtk_widget_get_parent((GtkWidget
*)text_view
);
38 widget
= gtk_widget_get_parent(widget
);
39 gtk_custom_set_focus((GtkWidget
*)custom
, (gpointer
)widget
);
43 insertViewTest(GtkMenuItem
*menuitem
, gpointer user_data
)
46 insertView((GtkWidget
*)menuitem
, (view_constructor
)user_data
);
47 // selected_hook(&val);
51 on_insert_viewer_test_activate (GtkMenuItem
*menuitem
,
54 GtkWidget
*scrolledwindow1
, *textview1
, *label
;
61 mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
62 if(!mwData
->CurrentTab
) return;
63 custom
= mwData
->CurrentTab
->custom
;
65 sprintf(str
,"label : %d",++count
);
66 scrolledwindow1
= gtk_scrolled_window_new (NULL
, NULL
);
67 gtk_widget_show (scrolledwindow1
);
68 label
= gtk_label_new(str
);
69 gtk_widget_show(label
);
71 gtk_custom_widget_add(custom
, scrolledwindow1
);
72 gtk_widget_set_size_request ((GtkWidget
*)scrolledwindow1
, 800, 100);
74 textview1
= gtk_text_view_new ();
75 gtk_widget_show (textview1
);
76 gtk_container_add (GTK_CONTAINER (scrolledwindow1
), textview1
);
77 buf
= gtk_text_view_get_buffer((GtkTextView
*)textview1
);
78 sprintf(str
,"text view : %d",count
);
79 gtk_text_buffer_set_text(buf
,str
, -1);
81 g_signal_connect ((gpointer
) textview1
, "grab_focus",
82 G_CALLBACK (on_textview1_grab_focus
), custom
);
85 /* end of test part */
88 /* internal functions */
89 void insertView(GtkWidget
* widget
, view_constructor constructor
)
95 mwData
= get_window_data_struct(widget
);
96 if(!mwData
->CurrentTab
) return;
97 custom
= mwData
->CurrentTab
->custom
;
99 viewer
= (GtkWidget
*)constructor(mwData
);
102 gtk_custom_widget_add(custom
, viewer
);
104 // g_object_unref(G_OBJECT(viewer));
108 void get_label_string (GtkWidget
* text
, gchar
* label
)
110 GtkEntry
* entry
= (GtkEntry
*)text
;
111 if(strlen(gtk_entry_get_text(entry
))!=0)
112 strcpy(label
,gtk_entry_get_text(entry
));
115 void get_label(GtkWindow
* mw
, gchar
* str
, gchar
* dialogue_title
, gchar
* label_str
)
117 GtkWidget
* dialogue
;
122 dialogue
= gtk_dialog_new_with_buttons(dialogue_title
,mw
,
124 GTK_STOCK_OK
,GTK_RESPONSE_ACCEPT
,
125 GTK_STOCK_CANCEL
,GTK_RESPONSE_REJECT
,
128 label
= gtk_label_new(label_str
);
129 gtk_widget_show(label
);
131 text
= gtk_entry_new();
132 gtk_widget_show(text
);
134 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), label
,TRUE
, TRUE
,0);
135 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), text
,FALSE
, FALSE
,0);
137 id
= gtk_dialog_run(GTK_DIALOG(dialogue
));
139 case GTK_RESPONSE_ACCEPT
:
140 get_label_string(text
,str
);
141 gtk_widget_destroy(dialogue
);
143 case GTK_RESPONSE_REJECT
:
145 gtk_widget_destroy(dialogue
);
150 mainWindow
* get_window_data_struct(GtkWidget
* widget
)
155 mw
= lookup_widget(widget
, "MWindow");
157 g_printf("Main window does not exist\n");
161 mwData
= (mainWindow
*) g_object_get_data(G_OBJECT(mw
),"mainWindow");
163 g_printf("Main window data does not exist\n");
169 void createNewWindow(GtkWidget
* widget
, gpointer user_data
, gboolean clone
)
171 GtkWidget
* mw
= NULL
; /* Main window */
172 systemView
* sv
= NULL
; /* System view */
173 systemView
* newSv
; /* New system view displayed in the new window */
174 GtkWidget
* newWindow
; /* New generated main window */
175 mainWindow
* newMWindow
;/* New main window structure */
179 GtkWidget
* ToolMenuTitle_menu
, *insert_view
, *pixmap
;
181 LttvToolbars
* toolbar
;
182 lttv_menu_closure
*menuItem
;
183 lttv_toolbar_closure
*toolbarItem
;
184 LttvAttributeValue value
;
185 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
186 view_constructor constructor
;
190 mw
= lookup_widget (widget
, "MWindow");
192 g_printf("Can not find main window\n");
196 sv
= (systemView
*)g_object_get_data(G_OBJECT(mw
),"systemView");
198 g_printf("Can not find system view\n");
202 newMWindow
= g_new(mainWindow
, 1);
204 /* Add the object's information to the module's array */
205 Main_Window_List
= g_slist_append(Main_Window_List
, mw
);
207 newWindow
= create_MWindow();
208 gtk_widget_show (newWindow
);
211 newSv
= g_new(systemView
, 1);
212 while(sv
->Next
) sv
= sv
->Next
;
215 newSv
->EventDB
= NULL
;
216 newSv
->SystemInfo
= NULL
;
217 newSv
->Options
= NULL
;
219 newSv
->Window
= newMWindow
;
221 newMWindow
->MWindow
= newWindow
;
222 newMWindow
->Tab
= NULL
;
223 newMWindow
->CurrentTab
= NULL
;
224 newMWindow
->SystemView
= newSv
;
225 newMWindow
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
226 newMWindow
->traceset_context
= LTTV_TRACESET_CONTEXT(gTracesetContext
);
227 newMWindow
->traceset
= (LTTV_TRACESET_CONTEXT(gTracesetContext
))->ts
;
228 g_object_ref(gTracesetContext
);
231 g_assert(lttv_iattribute_find_by_path(attributes
,
232 "viewers/menu", LTTV_POINTER
, &value
));
233 menu
= (LttvMenus
*)*(value
.v_pointer
);
236 for(i
=0;i
<menu
->len
;i
++){
237 menuItem
= &g_array_index(menu
, lttv_menu_closure
, i
);
238 constructor
= menuItem
->con
;
239 ToolMenuTitle_menu
= lookup_widget(newMWindow
->MWindow
,"ToolMenuTitle_menu");
240 insert_view
= gtk_menu_item_new_with_mnemonic (menuItem
->menuText
);
241 gtk_widget_show (insert_view
);
242 gtk_container_add (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
243 g_signal_connect ((gpointer
) insert_view
, "activate",
244 G_CALLBACK (insertViewTest
),
248 g_assert(lttv_iattribute_find_by_path(attributes
,
249 "viewers/toolbar", LTTV_POINTER
, &value
));
250 toolbar
= (LttvToolbars
*)*(value
.v_pointer
);
253 for(i
=0;i
<toolbar
->len
;i
++){
254 toolbarItem
= &g_array_index(toolbar
, lttv_toolbar_closure
, i
);
255 constructor
= toolbarItem
->con
;
256 ToolMenuTitle_menu
= lookup_widget(newMWindow
->MWindow
,"MToolbar2");
257 pixbuf
= gdk_pixbuf_new_from_xpm_data ((const char**)toolbarItem
->pixmap
);
258 pixmap
= gtk_image_new_from_pixbuf(pixbuf
);
259 insert_view
= gtk_toolbar_append_element (GTK_TOOLBAR (ToolMenuTitle_menu
),
260 GTK_TOOLBAR_CHILD_BUTTON
,
263 toolbarItem
->tooltip
, NULL
,
265 gtk_label_set_use_underline (GTK_LABEL (((GtkToolbarChild
*) (g_list_last (GTK_TOOLBAR (ToolMenuTitle_menu
)->children
)->data
))->label
), TRUE
);
266 gtk_widget_show (insert_view
);
267 gtk_container_set_border_width (GTK_CONTAINER (insert_view
), 1);
268 g_signal_connect ((gpointer
) insert_view
, "clicked",G_CALLBACK (insertViewTest
),constructor
);
273 g_object_set_data(G_OBJECT(newWindow
), "systemView", (gpointer
)newSv
);
274 g_object_set_data(G_OBJECT(newWindow
), "mainWindow", (gpointer
)newMWindow
);
277 g_printf("Clone : use the same traceset\n");
279 g_printf("Empty : traceset is set to NULL\n");
283 void move_up_viewer(GtkWidget
* widget
, gpointer user_data
)
285 mainWindow
* mw
= get_window_data_struct(widget
);
286 if(!mw
->CurrentTab
) return;
287 gtk_custom_widget_move_up(mw
->CurrentTab
->custom
);
290 void move_down_viewer(GtkWidget
* widget
, gpointer user_data
)
292 mainWindow
* mw
= get_window_data_struct(widget
);
293 if(!mw
->CurrentTab
) return;
294 gtk_custom_widget_move_down(mw
->CurrentTab
->custom
);
297 void delete_viewer(GtkWidget
* widget
, gpointer user_data
)
299 mainWindow
* mw
= get_window_data_struct(widget
);
300 if(!mw
->CurrentTab
) return;
301 gtk_custom_widget_delete(mw
->CurrentTab
->custom
);
304 void open_traceset(GtkWidget
* widget
, gpointer user_data
)
306 g_printf("Open a trace set\n");
309 void add_trace(GtkWidget
* widget
, gpointer user_data
)
311 g_printf("add a trace to a trace set\n");
314 void remove_trace(GtkWidget
* widget
, gpointer user_data
)
316 g_printf("remove a trace from a trace set\n");
319 void save(GtkWidget
* widget
, gpointer user_data
)
324 void save_as(GtkWidget
* widget
, gpointer user_data
)
326 g_printf("Save as\n");
329 void zoom_in(GtkWidget
* widget
, gpointer user_data
)
331 g_printf("Zoom in\n");
334 void zoom_out(GtkWidget
* widget
, gpointer user_data
)
336 g_printf("Zoom out\n");
339 void zoom_extended(GtkWidget
* widget
, gpointer user_data
)
341 g_printf("Zoom extended\n");
344 void go_to_time(GtkWidget
* widget
, gpointer user_data
)
346 g_printf("Go to time\n");
349 void show_time_frame(GtkWidget
* widget
, gpointer user_data
)
351 g_printf("Show time frame\n");
355 /* callback function */
358 on_empty_traceset_activate (GtkMenuItem
*menuitem
,
361 createNewWindow((GtkWidget
*)menuitem
, user_data
, FALSE
);
366 on_clone_traceset_activate (GtkMenuItem
*menuitem
,
369 createNewWindow((GtkWidget
*)menuitem
, user_data
, TRUE
);
374 on_tab_activate (GtkMenuItem
*menuitem
,
378 gchar label
[PATH_LENGTH
];
383 GtkNotebook
* notebook
= (GtkNotebook
*)lookup_widget((GtkWidget
*)menuitem
, "MNotebook");
384 if(notebook
== NULL
){
385 g_printf("Notebook does not exist\n");
389 mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
391 tmpTab
= mwData
->Tab
;
392 while(tmpTab
&& tmpTab
->Next
) tmpTab
= tmpTab
->Next
;
394 mwData
->CurrentTab
= NULL
;
395 tmpTab
= g_new(tab
,1);
396 mwData
->Tab
= tmpTab
;
398 tmpTab
->Next
= g_new(tab
,1);
399 tmpTab
= tmpTab
->Next
;
401 if(mwData
->CurrentTab
){
402 tmpTab
->traceStartTime
= mwData
->CurrentTab
->traceStartTime
;
403 tmpTab
->traceEndTime
= mwData
->CurrentTab
->traceEndTime
;
404 tmpTab
->startTime
= mwData
->CurrentTab
->startTime
;
405 tmpTab
->endTime
= mwData
->CurrentTab
->endTime
;
406 tmpTab
->currentTime
= mwData
->CurrentTab
->currentTime
;
408 getTracesetTimeSpan(mwData
,&tmpTab
->traceStartTime
, &tmpTab
->traceEndTime
);
409 tmpTab
->startTime
= tmpTab
->traceStartTime
;
410 tmpTab
->endTime
= tmpTab
->traceEndTime
;
411 tmpTab
->currentTime
= tmpTab
->traceStartTime
;
413 tmpTab
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
414 // mwData->CurrentTab = tmpTab;
415 tmpTab
->custom
= (GtkCustom
*)gtk_custom_new();
416 tmpTab
->custom
->mw
= mwData
;
417 gtk_widget_show((GtkWidget
*)tmpTab
->custom
);
420 strcpy(label
,"Page");
421 get_label((GtkWindow
*)mwData
->MWindow
, label
,"Get the name of the tab","Please input tab's name");
422 tmpTab
->label
= gtk_label_new (label
);
423 gtk_widget_show (tmpTab
->label
);
425 gtk_notebook_append_page(notebook
, (GtkWidget
*)tmpTab
->custom
, tmpTab
->label
);
427 list
= gtk_container_get_children(GTK_CONTAINER(notebook
));
428 gtk_notebook_set_current_page(notebook
,g_list_length(list
)-1);
433 on_open_activate (GtkMenuItem
*menuitem
,
436 open_traceset((GtkWidget
*)menuitem
, user_data
);
441 on_close_activate (GtkMenuItem
*menuitem
,
449 on_close_tab_activate (GtkMenuItem
*menuitem
,
452 g_printf("Close tab\n");
457 on_add_trace_activate (GtkMenuItem
*menuitem
,
460 add_trace((GtkWidget
*)menuitem
, user_data
);
465 on_remove_trace_activate (GtkMenuItem
*menuitem
,
468 remove_trace((GtkWidget
*)menuitem
, user_data
);
473 on_save_activate (GtkMenuItem
*menuitem
,
476 save((GtkWidget
*)menuitem
, user_data
);
481 on_save_as_activate (GtkMenuItem
*menuitem
,
484 save_as((GtkWidget
*)menuitem
, user_data
);
489 on_quit_activate (GtkMenuItem
*menuitem
,
492 on_MWindow_destroy(GTK_OBJECT(menuitem
), user_data
);
497 on_cut_activate (GtkMenuItem
*menuitem
,
505 on_copy_activate (GtkMenuItem
*menuitem
,
513 on_paste_activate (GtkMenuItem
*menuitem
,
521 on_delete_activate (GtkMenuItem
*menuitem
,
524 g_printf("Delete\n");
529 on_zoom_in_activate (GtkMenuItem
*menuitem
,
532 zoom_in((GtkWidget
*)menuitem
, user_data
);
537 on_zoom_out_activate (GtkMenuItem
*menuitem
,
540 zoom_out((GtkWidget
*)menuitem
, user_data
);
545 on_zoom_extended_activate (GtkMenuItem
*menuitem
,
548 zoom_extended((GtkWidget
*)menuitem
, user_data
);
553 on_go_to_time_activate (GtkMenuItem
*menuitem
,
556 go_to_time((GtkWidget
*)menuitem
, user_data
);
561 on_show_time_frame_activate (GtkMenuItem
*menuitem
,
564 show_time_frame((GtkWidget
*)menuitem
, user_data
);
569 on_move_viewer_up_activate (GtkMenuItem
*menuitem
,
572 move_up_viewer((GtkWidget
*)menuitem
, user_data
);
577 on_move_viewer_down_activate (GtkMenuItem
*menuitem
,
580 move_down_viewer((GtkWidget
*)menuitem
, user_data
);
585 on_remove_viewer_activate (GtkMenuItem
*menuitem
,
588 delete_viewer((GtkWidget
*)menuitem
, user_data
);
593 on_load_module_activate (GtkMenuItem
*menuitem
,
596 g_printf("Load module\n");
601 on_unload_module_activate (GtkMenuItem
*menuitem
,
604 g_printf("Unload module\n");
609 on_add_module_search_path_activate (GtkMenuItem
*menuitem
,
612 GtkDirSelection
* fileSelector
= (GtkDirSelection
*)gtk_dir_selection_new("Select module path");
616 gchar str
[PATH_LENGTH
];
617 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
619 id
= gtk_dialog_run(GTK_DIALOG(fileSelector
));
621 case GTK_RESPONSE_ACCEPT
:
622 case GTK_RESPONSE_OK
:
623 dir
= gtk_dir_selection_get_dir (fileSelector
);
624 lttv_module_path_add(dir
);
625 case GTK_RESPONSE_REJECT
:
626 case GTK_RESPONSE_CANCEL
:
628 gtk_widget_destroy((GtkWidget
*)fileSelector
);
635 on_color_activate (GtkMenuItem
*menuitem
,
643 on_filter_activate (GtkMenuItem
*menuitem
,
646 g_printf("Filter\n");
651 on_save_configuration_activate (GtkMenuItem
*menuitem
,
654 g_printf("Save configuration\n");
659 on_content_activate (GtkMenuItem
*menuitem
,
662 g_printf("Content\n");
667 on_about_activate (GtkMenuItem
*menuitem
,
670 g_printf("About...\n");
675 on_button_new_clicked (GtkButton
*button
,
678 createNewWindow((GtkWidget
*)button
, user_data
, FALSE
);
683 on_button_open_clicked (GtkButton
*button
,
686 open_traceset((GtkWidget
*)button
, user_data
);
691 on_button_add_trace_clicked (GtkButton
*button
,
694 add_trace((GtkWidget
*)button
, user_data
);
699 on_button_remove_trace_clicked (GtkButton
*button
,
702 remove_trace((GtkWidget
*)button
, user_data
);
707 on_button_save_clicked (GtkButton
*button
,
710 save((GtkWidget
*)button
, user_data
);
715 on_button_save_as_clicked (GtkButton
*button
,
718 save_as((GtkWidget
*)button
, user_data
);
723 on_button_zoom_in_clicked (GtkButton
*button
,
726 zoom_in((GtkWidget
*)button
, user_data
);
731 on_button_zoom_out_clicked (GtkButton
*button
,
734 zoom_out((GtkWidget
*)button
, user_data
);
739 on_button_zoom_extended_clicked (GtkButton
*button
,
742 zoom_extended((GtkWidget
*)button
, user_data
);
747 on_button_go_to_time_clicked (GtkButton
*button
,
750 go_to_time((GtkWidget
*)button
, user_data
);
755 on_button_show_time_frame_clicked (GtkButton
*button
,
758 show_time_frame((GtkWidget
*)button
, user_data
);
763 on_button_move_up_clicked (GtkButton
*button
,
766 move_up_viewer((GtkWidget
*)button
, user_data
);
771 on_button_move_down_clicked (GtkButton
*button
,
774 move_down_viewer((GtkWidget
*)button
, user_data
);
779 on_button_delete_viewer_clicked (GtkButton
*button
,
782 delete_viewer((GtkWidget
*)button
, user_data
);
786 on_MWindow_destroy (GtkObject
*object
,
789 systemView
* sv
= gSysView
;
792 g_printf("There are : %d windows\n",++count
);
795 g_printf("There are : %d windows\n",++count
);
803 on_MNotebook_switch_page (GtkNotebook
*notebook
,
804 GtkNotebookPage
*page
,
808 mainWindow
* mw
= get_window_data_struct((GtkWidget
*)notebook
);
815 mw
->CurrentTab
= Tab
;