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>
17 #define PATH_LENGTH 256
19 extern systemView
* gSysView
;
20 extern LttvTracesetContext
* gTracesetContext
;
22 /** Array containing instanced objects. */
23 extern GSList
* Main_Window_List
;
25 mainWindow
* get_window_data_struct(GtkWidget
* widget
);
28 void insertView(GtkWidget
* widget
, view_constructor constructor
);
31 on_textview1_grab_focus (GtkTextView
*text_view
,
35 GtkCustom
* custom
= (GtkCustom
*)user_data
;
36 widget
= gtk_widget_get_parent((GtkWidget
*)text_view
);
37 widget
= gtk_widget_get_parent(widget
);
38 gtk_custom_set_focus((GtkWidget
*)custom
, (gpointer
)widget
);
42 insertViewTest(GtkMenuItem
*menuitem
, gpointer user_data
)
45 insertView((GtkWidget
*)menuitem
, (view_constructor
)user_data
);
46 // selected_hook(&val);
50 on_insert_viewer_test_activate (GtkMenuItem
*menuitem
,
53 GtkWidget
*scrolledwindow1
, *textview1
, *label
;
60 mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
61 if(!mwData
->CurrentTab
) return;
62 custom
= mwData
->CurrentTab
->custom
;
64 sprintf(str
,"label : %d",++count
);
65 scrolledwindow1
= gtk_scrolled_window_new (NULL
, NULL
);
66 gtk_widget_show (scrolledwindow1
);
67 label
= gtk_label_new(str
);
68 gtk_widget_show(label
);
70 gtk_custom_widget_add(custom
, scrolledwindow1
);
71 gtk_widget_set_size_request ((GtkWidget
*)scrolledwindow1
, 800, 100);
73 textview1
= gtk_text_view_new ();
74 gtk_widget_show (textview1
);
75 gtk_container_add (GTK_CONTAINER (scrolledwindow1
), textview1
);
76 buf
= gtk_text_view_get_buffer((GtkTextView
*)textview1
);
77 sprintf(str
,"text view : %d",count
);
78 gtk_text_buffer_set_text(buf
,str
, -1);
80 g_signal_connect ((gpointer
) textview1
, "grab_focus",
81 G_CALLBACK (on_textview1_grab_focus
), custom
);
84 /* end of test part */
87 /* internal functions */
88 void insertView(GtkWidget
* widget
, view_constructor constructor
)
94 mwData
= get_window_data_struct(widget
);
95 if(!mwData
->CurrentTab
) return;
96 custom
= mwData
->CurrentTab
->custom
;
98 viewer
= (GtkWidget
*)constructor(mwData
);
101 gtk_custom_widget_add(custom
, viewer
);
103 // g_object_unref(G_OBJECT(viewer));
107 void get_label_string (GtkWidget
* text
, gchar
* label
)
109 GtkEntry
* entry
= (GtkEntry
*)text
;
110 if(strlen(gtk_entry_get_text(entry
))!=0)
111 strcpy(label
,gtk_entry_get_text(entry
));
114 void get_label(GtkWindow
* mw
, gchar
* str
, gchar
* dialogue_title
, gchar
* label_str
)
116 GtkWidget
* dialogue
;
121 dialogue
= gtk_dialog_new_with_buttons(dialogue_title
,mw
,
123 GTK_STOCK_OK
,GTK_RESPONSE_ACCEPT
,
124 GTK_STOCK_CANCEL
,GTK_RESPONSE_REJECT
,
127 label
= gtk_label_new(label_str
);
128 gtk_widget_show(label
);
130 text
= gtk_entry_new();
131 gtk_widget_show(text
);
133 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), label
,TRUE
, TRUE
,0);
134 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue
)->vbox
), text
,FALSE
, FALSE
,0);
136 id
= gtk_dialog_run(GTK_DIALOG(dialogue
));
138 case GTK_RESPONSE_ACCEPT
:
139 get_label_string(text
,str
);
140 gtk_widget_destroy(dialogue
);
142 case GTK_RESPONSE_REJECT
:
144 gtk_widget_destroy(dialogue
);
149 mainWindow
* get_window_data_struct(GtkWidget
* widget
)
154 mw
= lookup_widget(widget
, "MWindow");
156 g_printf("Main window does not exist\n");
160 mwData
= (mainWindow
*) g_object_get_data(G_OBJECT(mw
),"mainWindow");
162 g_printf("Main window data does not exist\n");
168 void createNewWindow(GtkWidget
* widget
, gpointer user_data
, gboolean clone
)
170 GtkWidget
* mw
= NULL
; /* Main window */
171 systemView
* sv
= NULL
; /* System view */
172 systemView
* newSv
; /* New system view displayed in the new window */
173 GtkWidget
* newWindow
; /* New generated main window */
174 mainWindow
* newMWindow
;/* New main window structure */
178 GtkWidget
* ToolMenuTitle_menu
, *insert_view
, *pixmap
;
180 LttvToolbars
* toolbar
;
181 lttv_menu_closure
*menuItem
;
182 lttv_toolbar_closure
*toolbarItem
;
183 LttvAttributeValue value
;
184 LttvIAttribute
*attributes
= LTTV_IATTRIBUTE(lttv_global_attributes());
185 view_constructor constructor
;
189 mw
= lookup_widget (widget
, "MWindow");
191 g_printf("Can not find main window\n");
195 sv
= (systemView
*)g_object_get_data(G_OBJECT(mw
),"systemView");
197 g_printf("Can not find system view\n");
201 newMWindow
= g_new(mainWindow
, 1);
203 /* Add the object's information to the module's array */
204 Main_Window_List
= g_slist_append(Main_Window_List
, mw
);
206 newWindow
= create_MWindow();
207 gtk_widget_show (newWindow
);
210 newSv
= g_new(systemView
, 1);
211 while(sv
->Next
) sv
= sv
->Next
;
214 newSv
->EventDB
= NULL
;
215 newSv
->SystemInfo
= NULL
;
216 newSv
->Options
= NULL
;
218 newSv
->Window
= newMWindow
;
220 newMWindow
->MWindow
= newWindow
;
221 newMWindow
->Tab
= NULL
;
222 newMWindow
->CurrentTab
= NULL
;
223 newMWindow
->SystemView
= newSv
;
224 newMWindow
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
225 newMWindow
->traceset_context
= LTTV_TRACESET_CONTEXT(gTracesetContext
);
226 newMWindow
->traceset
= (LTTV_TRACESET_CONTEXT(gTracesetContext
))->ts
;
227 g_object_ref(gTracesetContext
);
230 g_assert(lttv_iattribute_find_by_path(attributes
,
231 "viewers/menu", LTTV_POINTER
, &value
));
232 menu
= (LttvMenus
*)*(value
.v_pointer
);
235 for(i
=0;i
<menu
->len
;i
++){
236 menuItem
= &g_array_index(menu
, lttv_menu_closure
, i
);
237 constructor
= menuItem
->con
;
238 ToolMenuTitle_menu
= lookup_widget(newMWindow
->MWindow
,"ToolMenuTitle_menu");
239 insert_view
= gtk_menu_item_new_with_mnemonic (menuItem
->menuText
);
240 gtk_widget_show (insert_view
);
241 gtk_container_add (GTK_CONTAINER (ToolMenuTitle_menu
), insert_view
);
242 g_signal_connect ((gpointer
) insert_view
, "activate",
243 G_CALLBACK (insertViewTest
),
247 g_assert(lttv_iattribute_find_by_path(attributes
,
248 "viewers/toolbar", LTTV_POINTER
, &value
));
249 toolbar
= (LttvToolbars
*)*(value
.v_pointer
);
252 for(i
=0;i
<toolbar
->len
;i
++){
253 toolbarItem
= &g_array_index(toolbar
, lttv_toolbar_closure
, i
);
254 constructor
= toolbarItem
->con
;
255 ToolMenuTitle_menu
= lookup_widget(newMWindow
->MWindow
,"MToolbar2");
256 pixbuf
= gdk_pixbuf_new_from_xpm_data ((const char**)toolbarItem
->pixmap
);
257 pixmap
= gtk_image_new_from_pixbuf(pixbuf
);
258 insert_view
= gtk_toolbar_append_element (GTK_TOOLBAR (ToolMenuTitle_menu
),
259 GTK_TOOLBAR_CHILD_BUTTON
,
262 toolbarItem
->tooltip
, NULL
,
264 gtk_label_set_use_underline (GTK_LABEL (((GtkToolbarChild
*) (g_list_last (GTK_TOOLBAR (ToolMenuTitle_menu
)->children
)->data
))->label
), TRUE
);
265 gtk_widget_show (insert_view
);
266 gtk_container_set_border_width (GTK_CONTAINER (insert_view
), 1);
267 g_signal_connect ((gpointer
) insert_view
, "clicked",G_CALLBACK (insertViewTest
),constructor
);
272 g_object_set_data(G_OBJECT(newWindow
), "systemView", (gpointer
)newSv
);
273 g_object_set_data(G_OBJECT(newWindow
), "mainWindow", (gpointer
)newMWindow
);
276 g_printf("Clone : use the same traceset\n");
278 g_printf("Empty : traceset is set to NULL\n");
282 void move_up_viewer(GtkWidget
* widget
, gpointer user_data
)
284 mainWindow
* mw
= get_window_data_struct(widget
);
285 if(!mw
->CurrentTab
) return;
286 gtk_custom_widget_move_up(mw
->CurrentTab
->custom
);
289 void move_down_viewer(GtkWidget
* widget
, gpointer user_data
)
291 mainWindow
* mw
= get_window_data_struct(widget
);
292 if(!mw
->CurrentTab
) return;
293 gtk_custom_widget_move_down(mw
->CurrentTab
->custom
);
296 void delete_viewer(GtkWidget
* widget
, gpointer user_data
)
298 mainWindow
* mw
= get_window_data_struct(widget
);
299 if(!mw
->CurrentTab
) return;
300 gtk_custom_widget_delete(mw
->CurrentTab
->custom
);
303 void open_traceset(GtkWidget
* widget
, gpointer user_data
)
305 g_printf("Open a trace set\n");
308 void add_trace(GtkWidget
* widget
, gpointer user_data
)
310 g_printf("add a trace to a trace set\n");
313 void remove_trace(GtkWidget
* widget
, gpointer user_data
)
315 g_printf("remove a trace from a trace set\n");
318 void save(GtkWidget
* widget
, gpointer user_data
)
323 void save_as(GtkWidget
* widget
, gpointer user_data
)
325 g_printf("Save as\n");
328 void zoom_in(GtkWidget
* widget
, gpointer user_data
)
330 g_printf("Zoom in\n");
333 void zoom_out(GtkWidget
* widget
, gpointer user_data
)
335 g_printf("Zoom out\n");
338 void zoom_extended(GtkWidget
* widget
, gpointer user_data
)
340 g_printf("Zoom extended\n");
343 void go_to_time(GtkWidget
* widget
, gpointer user_data
)
345 g_printf("Go to time\n");
348 void show_time_frame(GtkWidget
* widget
, gpointer user_data
)
350 g_printf("Show time frame\n");
354 /* callback function */
357 on_empty_traceset_activate (GtkMenuItem
*menuitem
,
360 createNewWindow((GtkWidget
*)menuitem
, user_data
, FALSE
);
365 on_clone_traceset_activate (GtkMenuItem
*menuitem
,
368 createNewWindow((GtkWidget
*)menuitem
, user_data
, TRUE
);
373 on_tab_activate (GtkMenuItem
*menuitem
,
377 gchar label
[PATH_LENGTH
];
382 GtkNotebook
* notebook
= (GtkNotebook
*)lookup_widget((GtkWidget
*)menuitem
, "MNotebook");
383 if(notebook
== NULL
){
384 g_printf("Notebook does not exist\n");
388 mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
390 tmpTab
= mwData
->Tab
;
391 while(tmpTab
&& tmpTab
->Next
) tmpTab
= tmpTab
->Next
;
393 mwData
->CurrentTab
= NULL
;
394 tmpTab
= g_new(tab
,1);
395 mwData
->Tab
= tmpTab
;
397 tmpTab
->Next
= g_new(tab
,1);
398 tmpTab
= tmpTab
->Next
;
400 if(mwData
->CurrentTab
){
401 tmpTab
->traceStartTime
= mwData
->CurrentTab
->traceStartTime
;
402 tmpTab
->traceEndTime
= mwData
->CurrentTab
->traceEndTime
;
403 tmpTab
->startTime
= mwData
->CurrentTab
->startTime
;
404 tmpTab
->endTime
= mwData
->CurrentTab
->endTime
;
405 tmpTab
->currentTime
= mwData
->CurrentTab
->currentTime
;
407 getTracesetTimeSpan(mwData
,&tmpTab
->traceStartTime
, &tmpTab
->traceEndTime
);
408 tmpTab
->startTime
= tmpTab
->traceStartTime
;
409 tmpTab
->endTime
= tmpTab
->traceEndTime
;
410 tmpTab
->currentTime
= tmpTab
->traceStartTime
;
412 tmpTab
->Attributes
= LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE
, NULL
));
413 // mwData->CurrentTab = tmpTab;
414 tmpTab
->custom
= (GtkCustom
*)gtk_custom_new();
415 tmpTab
->custom
->mw
= mwData
;
416 gtk_widget_show((GtkWidget
*)tmpTab
->custom
);
419 strcpy(label
,"Page");
420 get_label((GtkWindow
*)mwData
->MWindow
, label
,"Get the name of the tab","Please input tab's name");
421 tmpTab
->label
= gtk_label_new (label
);
422 gtk_widget_show (tmpTab
->label
);
424 gtk_notebook_append_page(notebook
, (GtkWidget
*)tmpTab
->custom
, tmpTab
->label
);
426 list
= gtk_container_get_children(GTK_CONTAINER(notebook
));
427 gtk_notebook_set_current_page(notebook
,g_list_length(list
)-1);
432 on_open_activate (GtkMenuItem
*menuitem
,
435 open_traceset((GtkWidget
*)menuitem
, user_data
);
440 on_close_activate (GtkMenuItem
*menuitem
,
448 on_close_tab_activate (GtkMenuItem
*menuitem
,
451 g_printf("Close tab\n");
456 on_add_trace_activate (GtkMenuItem
*menuitem
,
459 add_trace((GtkWidget
*)menuitem
, user_data
);
464 on_remove_trace_activate (GtkMenuItem
*menuitem
,
467 remove_trace((GtkWidget
*)menuitem
, user_data
);
472 on_save_activate (GtkMenuItem
*menuitem
,
475 save((GtkWidget
*)menuitem
, user_data
);
480 on_save_as_activate (GtkMenuItem
*menuitem
,
483 save_as((GtkWidget
*)menuitem
, user_data
);
488 on_quit_activate (GtkMenuItem
*menuitem
,
491 on_MWindow_destroy(GTK_OBJECT(menuitem
), user_data
);
496 on_cut_activate (GtkMenuItem
*menuitem
,
504 on_copy_activate (GtkMenuItem
*menuitem
,
512 on_paste_activate (GtkMenuItem
*menuitem
,
520 on_delete_activate (GtkMenuItem
*menuitem
,
523 g_printf("Delete\n");
528 on_zoom_in_activate (GtkMenuItem
*menuitem
,
531 zoom_in((GtkWidget
*)menuitem
, user_data
);
536 on_zoom_out_activate (GtkMenuItem
*menuitem
,
539 zoom_out((GtkWidget
*)menuitem
, user_data
);
544 on_zoom_extended_activate (GtkMenuItem
*menuitem
,
547 zoom_extended((GtkWidget
*)menuitem
, user_data
);
552 on_go_to_time_activate (GtkMenuItem
*menuitem
,
555 go_to_time((GtkWidget
*)menuitem
, user_data
);
560 on_show_time_frame_activate (GtkMenuItem
*menuitem
,
563 show_time_frame((GtkWidget
*)menuitem
, user_data
);
568 on_move_viewer_up_activate (GtkMenuItem
*menuitem
,
571 move_up_viewer((GtkWidget
*)menuitem
, user_data
);
576 on_move_viewer_down_activate (GtkMenuItem
*menuitem
,
579 move_down_viewer((GtkWidget
*)menuitem
, user_data
);
584 on_remove_viewer_activate (GtkMenuItem
*menuitem
,
587 delete_viewer((GtkWidget
*)menuitem
, user_data
);
592 on_load_module_activate (GtkMenuItem
*menuitem
,
595 g_printf("Load module\n");
600 on_unload_module_activate (GtkMenuItem
*menuitem
,
603 g_printf("Unload module\n");
608 on_add_module_search_path_activate (GtkMenuItem
*menuitem
,
611 gchar str
[PATH_LENGTH
];
612 mainWindow
* mwData
= get_window_data_struct((GtkWidget
*)menuitem
);
613 g_printf("Add module search path\n");
615 get_label((GtkWindow
*)mwData
->MWindow
, str
, "Add module search path", "Please input a search path:");
617 lttv_module_path_add(str
);
623 on_color_activate (GtkMenuItem
*menuitem
,
631 on_filter_activate (GtkMenuItem
*menuitem
,
634 g_printf("Filter\n");
639 on_save_configuration_activate (GtkMenuItem
*menuitem
,
642 g_printf("Save configuration\n");
647 on_content_activate (GtkMenuItem
*menuitem
,
650 g_printf("Content\n");
655 on_about_activate (GtkMenuItem
*menuitem
,
658 g_printf("About...\n");
663 on_button_new_clicked (GtkButton
*button
,
666 createNewWindow((GtkWidget
*)button
, user_data
, FALSE
);
671 on_button_open_clicked (GtkButton
*button
,
674 open_traceset((GtkWidget
*)button
, user_data
);
679 on_button_add_trace_clicked (GtkButton
*button
,
682 add_trace((GtkWidget
*)button
, user_data
);
687 on_button_remove_trace_clicked (GtkButton
*button
,
690 remove_trace((GtkWidget
*)button
, user_data
);
695 on_button_save_clicked (GtkButton
*button
,
698 save((GtkWidget
*)button
, user_data
);
703 on_button_save_as_clicked (GtkButton
*button
,
706 save_as((GtkWidget
*)button
, user_data
);
711 on_button_zoom_in_clicked (GtkButton
*button
,
714 zoom_in((GtkWidget
*)button
, user_data
);
719 on_button_zoom_out_clicked (GtkButton
*button
,
722 zoom_out((GtkWidget
*)button
, user_data
);
727 on_button_zoom_extended_clicked (GtkButton
*button
,
730 zoom_extended((GtkWidget
*)button
, user_data
);
735 on_button_go_to_time_clicked (GtkButton
*button
,
738 go_to_time((GtkWidget
*)button
, user_data
);
743 on_button_show_time_frame_clicked (GtkButton
*button
,
746 show_time_frame((GtkWidget
*)button
, user_data
);
751 on_button_move_up_clicked (GtkButton
*button
,
754 move_up_viewer((GtkWidget
*)button
, user_data
);
759 on_button_move_down_clicked (GtkButton
*button
,
762 move_down_viewer((GtkWidget
*)button
, user_data
);
767 on_button_delete_viewer_clicked (GtkButton
*button
,
770 delete_viewer((GtkWidget
*)button
, user_data
);
774 on_MWindow_destroy (GtkObject
*object
,
777 systemView
* sv
= gSysView
;
780 g_printf("There are : %d windows\n",++count
);
783 g_printf("There are : %d windows\n",++count
);
791 on_MNotebook_switch_page (GtkNotebook
*notebook
,
792 GtkNotebookPage
*page
,
796 mainWindow
* mw
= get_window_data_struct((GtkWidget
*)notebook
);
803 mw
->CurrentTab
= Tab
;