initial control flow viewer structure rework
[lttv.git] / ltt / branches / poly / lttv / modules / gui / mainWin / src / callbacks.c
1 #ifdef HAVE_CONFIG_H
2 # include <config.h>
3 #endif
4
5 #include <gtk/gtk.h>
6 #include <gmodule.h>
7
8 #include "callbacks.h"
9 #include "interface.h"
10 #include "support.h"
11 #include <lttv/mainWindow.h>
12 #include <lttv/menu.h>
13 #include <lttv/toolbar.h>
14 #include <lttv/gtkTraceSet.h>
15
16 extern systemView * gSysView;
17 extern LttvTracesetContext * gTracesetContext;
18
19 /** Array containing instanced objects. */
20 extern GSList * Main_Window_List;
21
22 mainWindow * get_window_data_struct(GtkWidget * widget);
23
24 /* test part */
25 void insertView(GtkWidget* widget, view_constructor constructor);
26
27 void
28 on_textview1_grab_focus (GtkTextView *text_view,
29 gpointer user_data)
30 {
31 GtkWidget * widget;
32 GtkCustom * custom = (GtkCustom*)user_data;
33 widget = gtk_widget_get_parent((GtkWidget*)text_view);
34 widget = gtk_widget_get_parent(widget);
35 gtk_custom_set_focus((GtkWidget*)custom, (gpointer)widget);
36 }
37
38 void
39 insertViewTest(GtkMenuItem *menuitem, gpointer user_data)
40 {
41 guint val = 20;
42 insertView((GtkWidget*)menuitem, (view_constructor)user_data);
43 // selected_hook(&val);
44 }
45
46 void
47 on_insert_viewer_test_activate (GtkMenuItem *menuitem,
48 gpointer user_data)
49 {
50 GtkWidget *scrolledwindow1, *textview1, *label;
51 static int count = 0;
52 char str[64];
53 GtkCustom * custom;
54 GtkTextBuffer* buf;
55
56 mainWindow * mwData;
57 mwData = get_window_data_struct((GtkWidget*)menuitem);
58 if(!mwData->CurrentTab) return;
59 custom = mwData->CurrentTab->custom;
60
61 sprintf(str,"label : %d",++count);
62 scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
63 gtk_widget_show (scrolledwindow1);
64 label = gtk_label_new(str);
65 gtk_widget_show(label);
66
67 gtk_custom_widget_add(custom, scrolledwindow1);
68 gtk_widget_set_size_request ((GtkWidget*)scrolledwindow1, 800, 100);
69
70 textview1 = gtk_text_view_new ();
71 gtk_widget_show (textview1);
72 gtk_container_add (GTK_CONTAINER (scrolledwindow1), textview1);
73 buf = gtk_text_view_get_buffer((GtkTextView*)textview1);
74 sprintf(str,"text view : %d",count);
75 gtk_text_buffer_set_text(buf,str, -1);
76
77 g_signal_connect ((gpointer) textview1, "grab_focus",
78 G_CALLBACK (on_textview1_grab_focus), custom);
79 }
80
81 /* end of test part */
82
83
84 /* internal functions */
85 void insertView(GtkWidget* widget, view_constructor constructor)
86 {
87 GtkCustom * custom;
88 mainWindow * mwData;
89 GtkWidget * viewer;
90
91 mwData = get_window_data_struct(widget);
92 if(!mwData->CurrentTab) return;
93 custom = mwData->CurrentTab->custom;
94
95 viewer = (GtkWidget*)constructor(mwData);
96 if(viewer)
97 {
98 gtk_custom_widget_add(custom, viewer);
99 // Added by MD
100 g_object_unref(G_OBJECT(viewer));
101 }
102 }
103
104 void get_label_string (GtkWidget * text, gchar * label)
105 {
106 GtkEntry * entry = (GtkEntry*)text;
107 if(strlen(gtk_entry_get_text(entry))!=0)
108 strcpy(label,gtk_entry_get_text(entry));
109 }
110
111 void get_label(GtkWindow * mw, gchar * str)
112 {
113 GtkWidget * dialogue;
114 GtkWidget * text;
115 GtkWidget * label;
116 gint id;
117
118 strcpy(str,"Page"); //default label
119
120 dialogue = gtk_dialog_new_with_buttons("Get the name of the tab",mw,
121 GTK_DIALOG_MODAL,
122 GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,
123 GTK_STOCK_CANCEL,GTK_RESPONSE_REJECT,
124 NULL);
125
126 label = gtk_label_new("Please input tab's name");
127 gtk_widget_show(label);
128
129 text = gtk_entry_new();
130 gtk_widget_show(text);
131
132 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), label,TRUE, TRUE,0);
133 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), text,FALSE, FALSE,0);
134
135 id = gtk_dialog_run(GTK_DIALOG(dialogue));
136 switch(id){
137 case GTK_RESPONSE_ACCEPT:
138 get_label_string(text,str);
139 gtk_widget_destroy(dialogue);
140 break;
141 case GTK_RESPONSE_REJECT:
142 default:
143 gtk_widget_destroy(dialogue);
144 break;
145 }
146 }
147
148 mainWindow * get_window_data_struct(GtkWidget * widget)
149 {
150 GtkWidget * mw;
151 mainWindow * mwData;
152
153 mw = lookup_widget(widget, "MWindow");
154 if(mw == NULL){
155 g_printf("Main window does not exist\n");
156 return;
157 }
158
159 mwData = (mainWindow *) g_object_get_data(G_OBJECT(mw),"mainWindow");
160 if(mwData == NULL){
161 g_printf("Main window data does not exist\n");
162 return;
163 }
164 return mwData;
165 }
166
167 void createNewWindow(GtkWidget* widget, gpointer user_data, gboolean clone)
168 {
169 GtkWidget * mw = NULL; /* Main window */
170 systemView * sv = NULL; /* System view */
171 systemView * newSv; /* New system view displayed in the new window */
172 GtkWidget * newWindow; /* New generated main window */
173 mainWindow * newMWindow;/* New main window structure */
174
175 //test
176 int i;
177 GtkWidget * ToolMenuTitle_menu, *insert_view, *pixmap;
178 LttvMenus * menu;
179 LttvToolbars * toolbar;
180 lttv_menu_closure *menuItem;
181 lttv_toolbar_closure *toolbarItem;
182 LttvAttributeValue value;
183 LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
184 view_constructor constructor;
185 GdkPixbuf *pixbuf;
186 //end
187
188 mw = lookup_widget (widget, "MWindow");
189 if(mw == NULL){
190 g_printf("Can not find main window\n");
191 return;
192 }
193
194 sv = (systemView *)g_object_get_data(G_OBJECT(mw),"systemView");
195 if(sv == NULL){
196 g_printf("Can not find system view\n");
197 return;
198 }
199
200 newMWindow = g_new(mainWindow, 1);
201
202 /* Add the object's information to the module's array */
203 Main_Window_List = g_slist_append(Main_Window_List, mw);
204
205 newWindow = create_MWindow();
206 gtk_widget_show (newWindow);
207
208
209 newSv = g_new(systemView, 1);
210 while(sv->Next) sv = sv->Next;
211 sv->Next = newSv;
212
213 newSv->EventDB = NULL;
214 newSv->SystemInfo = NULL;
215 newSv->Options = NULL;
216 newSv->Next = NULL;
217 newSv->Window = newMWindow;
218
219 newMWindow->MWindow = newWindow;
220 newMWindow->Tab = NULL;
221 newMWindow->CurrentTab = NULL;
222 newMWindow->SystemView = newSv;
223 newMWindow->Attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
224 newMWindow->traceset_context = LTTV_TRACESET_CONTEXT(gTracesetContext);
225 newMWindow->traceset = (LTTV_TRACESET_CONTEXT(gTracesetContext))->ts;
226 g_object_ref(gTracesetContext);
227
228 //test yxx
229 g_assert(lttv_iattribute_find_by_path(attributes,
230 "viewers/menu", LTTV_POINTER, &value));
231 menu = (LttvMenus*)*(value.v_pointer);
232
233 if(menu){
234 for(i=0;i<menu->len;i++){
235 menuItem = &g_array_index(menu, lttv_menu_closure, i);
236 constructor = menuItem->con;
237 ToolMenuTitle_menu = lookup_widget(newMWindow->MWindow,"ToolMenuTitle_menu");
238 insert_view = gtk_menu_item_new_with_mnemonic (menuItem->menuText);
239 gtk_widget_show (insert_view);
240 gtk_container_add (GTK_CONTAINER (ToolMenuTitle_menu), insert_view);
241 g_signal_connect ((gpointer) insert_view, "activate",
242 G_CALLBACK (insertViewTest),
243 constructor);
244 }
245 }
246 g_assert(lttv_iattribute_find_by_path(attributes,
247 "viewers/toolbar", LTTV_POINTER, &value));
248 toolbar = (LttvToolbars*)*(value.v_pointer);
249
250 if(toolbar){
251 for(i=0;i<toolbar->len;i++){
252 toolbarItem = &g_array_index(toolbar, lttv_toolbar_closure, i);
253 constructor = toolbarItem->con;
254 ToolMenuTitle_menu = lookup_widget(newMWindow->MWindow,"MToolbar2");
255 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char**)toolbarItem->pixmap);
256 pixmap = gtk_image_new_from_pixbuf(pixbuf);
257 insert_view = gtk_toolbar_append_element (GTK_TOOLBAR (ToolMenuTitle_menu),
258 GTK_TOOLBAR_CHILD_BUTTON,
259 NULL,
260 "",
261 toolbarItem->tooltip, NULL,
262 pixmap, NULL, NULL);
263 gtk_label_set_use_underline (GTK_LABEL (((GtkToolbarChild*) (g_list_last (GTK_TOOLBAR (ToolMenuTitle_menu)->children)->data))->label), TRUE);
264 gtk_widget_show (insert_view);
265 gtk_container_set_border_width (GTK_CONTAINER (insert_view), 1);
266 g_signal_connect ((gpointer) insert_view, "clicked",G_CALLBACK (insertViewTest),constructor);
267 }
268 }
269 //end
270
271 g_object_set_data(G_OBJECT(newWindow), "systemView", (gpointer)newSv);
272 g_object_set_data(G_OBJECT(newWindow), "mainWindow", (gpointer)newMWindow);
273
274 if(clone){
275 g_printf("Clone : use the same traceset\n");
276 }else{
277 g_printf("Empty : traceset is set to NULL\n");
278 }
279 }
280
281 void move_up_viewer(GtkWidget * widget, gpointer user_data)
282 {
283 mainWindow * mw = get_window_data_struct(widget);
284 if(!mw->CurrentTab) return;
285 gtk_custom_widget_move_up(mw->CurrentTab->custom);
286 }
287
288 void move_down_viewer(GtkWidget * widget, gpointer user_data)
289 {
290 mainWindow * mw = get_window_data_struct(widget);
291 if(!mw->CurrentTab) return;
292 gtk_custom_widget_move_down(mw->CurrentTab->custom);
293 }
294
295 void delete_viewer(GtkWidget * widget, gpointer user_data)
296 {
297 mainWindow * mw = get_window_data_struct(widget);
298 if(!mw->CurrentTab) return;
299 gtk_custom_widget_delete(mw->CurrentTab->custom);
300 }
301
302 void open_traceset(GtkWidget * widget, gpointer user_data)
303 {
304 g_printf("Open a trace set\n");
305 }
306
307 void add_trace(GtkWidget * widget, gpointer user_data)
308 {
309 g_printf("add a trace to a trace set\n");
310 }
311
312 void remove_trace(GtkWidget * widget, gpointer user_data)
313 {
314 g_printf("remove a trace from a trace set\n");
315 }
316
317 void save(GtkWidget * widget, gpointer user_data)
318 {
319 g_printf("Save\n");
320 }
321
322 void save_as(GtkWidget * widget, gpointer user_data)
323 {
324 g_printf("Save as\n");
325 }
326
327 void zoom_in(GtkWidget * widget, gpointer user_data)
328 {
329 g_printf("Zoom in\n");
330 }
331
332 void zoom_out(GtkWidget * widget, gpointer user_data)
333 {
334 g_printf("Zoom out\n");
335 }
336
337 void zoom_extended(GtkWidget * widget, gpointer user_data)
338 {
339 g_printf("Zoom extended\n");
340 }
341
342 void go_to_time(GtkWidget * widget, gpointer user_data)
343 {
344 g_printf("Go to time\n");
345 }
346
347 void show_time_frame(GtkWidget * widget, gpointer user_data)
348 {
349 g_printf("Show time frame\n");
350 }
351
352
353 /* callback function */
354
355 void
356 on_empty_traceset_activate (GtkMenuItem *menuitem,
357 gpointer user_data)
358 {
359 createNewWindow((GtkWidget*)menuitem, user_data, FALSE);
360 }
361
362
363 void
364 on_clone_traceset_activate (GtkMenuItem *menuitem,
365 gpointer user_data)
366 {
367 createNewWindow((GtkWidget*)menuitem, user_data, TRUE);
368 }
369
370
371 void
372 on_tab_activate (GtkMenuItem *menuitem,
373 gpointer user_data)
374 {
375 GList * list;
376 gchar label[64];
377
378 tab * tmpTab;
379 GtkWidget * pane;
380 mainWindow * mwData;
381 GtkNotebook * notebook = (GtkNotebook *)lookup_widget((GtkWidget*)menuitem, "MNotebook");
382 if(notebook == NULL){
383 g_printf("Notebook does not exist\n");
384 return;
385 }
386
387 mwData = get_window_data_struct((GtkWidget*)menuitem);
388
389 tmpTab = mwData->Tab;
390 while(tmpTab && tmpTab->Next) tmpTab = tmpTab->Next;
391 if(!tmpTab){
392 mwData->CurrentTab = NULL;
393 tmpTab = g_new(tab,1);
394 mwData->Tab = tmpTab;
395 }else{
396 tmpTab->Next = g_new(tab,1);
397 tmpTab = tmpTab->Next;
398 }
399 if(mwData->CurrentTab){
400 tmpTab->traceStartTime = mwData->CurrentTab->traceStartTime;
401 tmpTab->traceEndTime = mwData->CurrentTab->traceEndTime;
402 tmpTab->startTime = mwData->CurrentTab->startTime;
403 tmpTab->endTime = mwData->CurrentTab->endTime;
404 tmpTab->currentTime = mwData->CurrentTab->currentTime;
405 }else{
406 getTracesetTimeSpan(mwData,&tmpTab->traceStartTime, &tmpTab->traceEndTime);
407 tmpTab->startTime = tmpTab->traceStartTime;
408 tmpTab->endTime = tmpTab->traceEndTime;
409 tmpTab->currentTime = tmpTab->traceStartTime;
410 }
411 tmpTab->Attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
412 // mwData->CurrentTab = tmpTab;
413 tmpTab->custom = (GtkCustom*)gtk_custom_new();
414 tmpTab->custom->mw = mwData;
415 gtk_widget_show((GtkWidget*)tmpTab->custom);
416 tmpTab->Next = NULL;
417
418 get_label((GtkWindow*)mwData->MWindow, label);
419 tmpTab->label = gtk_label_new (label);
420 gtk_widget_show (tmpTab->label);
421
422 gtk_notebook_append_page(notebook, (GtkWidget*)tmpTab->custom, tmpTab->label);
423
424 list = gtk_container_get_children(GTK_CONTAINER(notebook));
425 gtk_notebook_set_current_page(notebook,g_list_length(list)-1);
426 }
427
428
429 void
430 on_open_activate (GtkMenuItem *menuitem,
431 gpointer user_data)
432 {
433 open_traceset((GtkWidget*)menuitem, user_data);
434 }
435
436
437 void
438 on_close_activate (GtkMenuItem *menuitem,
439 gpointer user_data)
440 {
441 g_printf("Close\n");
442 }
443
444
445 void
446 on_close_tab_activate (GtkMenuItem *menuitem,
447 gpointer user_data)
448 {
449 g_printf("Close tab\n");
450 }
451
452
453 void
454 on_add_trace_activate (GtkMenuItem *menuitem,
455 gpointer user_data)
456 {
457 add_trace((GtkWidget*)menuitem, user_data);
458 }
459
460
461 void
462 on_remove_trace_activate (GtkMenuItem *menuitem,
463 gpointer user_data)
464 {
465 remove_trace((GtkWidget*)menuitem, user_data);
466 }
467
468
469 void
470 on_save_activate (GtkMenuItem *menuitem,
471 gpointer user_data)
472 {
473 save((GtkWidget*)menuitem, user_data);
474 }
475
476
477 void
478 on_save_as_activate (GtkMenuItem *menuitem,
479 gpointer user_data)
480 {
481 save_as((GtkWidget*)menuitem, user_data);
482 }
483
484
485 void
486 on_quit_activate (GtkMenuItem *menuitem,
487 gpointer user_data)
488 {
489 on_MWindow_destroy(GTK_OBJECT(menuitem), user_data);
490 }
491
492
493 void
494 on_cut_activate (GtkMenuItem *menuitem,
495 gpointer user_data)
496 {
497 g_printf("Cut\n");
498 }
499
500
501 void
502 on_copy_activate (GtkMenuItem *menuitem,
503 gpointer user_data)
504 {
505 g_printf("Copye\n");
506 }
507
508
509 void
510 on_paste_activate (GtkMenuItem *menuitem,
511 gpointer user_data)
512 {
513 g_printf("Paste\n");
514 }
515
516
517 void
518 on_delete_activate (GtkMenuItem *menuitem,
519 gpointer user_data)
520 {
521 g_printf("Delete\n");
522 }
523
524
525 void
526 on_zoom_in_activate (GtkMenuItem *menuitem,
527 gpointer user_data)
528 {
529 zoom_in((GtkWidget*)menuitem, user_data);
530 }
531
532
533 void
534 on_zoom_out_activate (GtkMenuItem *menuitem,
535 gpointer user_data)
536 {
537 zoom_out((GtkWidget*)menuitem, user_data);
538 }
539
540
541 void
542 on_zoom_extended_activate (GtkMenuItem *menuitem,
543 gpointer user_data)
544 {
545 zoom_extended((GtkWidget*)menuitem, user_data);
546 }
547
548
549 void
550 on_go_to_time_activate (GtkMenuItem *menuitem,
551 gpointer user_data)
552 {
553 go_to_time((GtkWidget*)menuitem, user_data);
554 }
555
556
557 void
558 on_show_time_frame_activate (GtkMenuItem *menuitem,
559 gpointer user_data)
560 {
561 show_time_frame((GtkWidget*)menuitem, user_data);
562 }
563
564
565 void
566 on_move_viewer_up_activate (GtkMenuItem *menuitem,
567 gpointer user_data)
568 {
569 move_up_viewer((GtkWidget*)menuitem, user_data);
570 }
571
572
573 void
574 on_move_viewer_down_activate (GtkMenuItem *menuitem,
575 gpointer user_data)
576 {
577 move_down_viewer((GtkWidget*)menuitem, user_data);
578 }
579
580
581 void
582 on_remove_viewer_activate (GtkMenuItem *menuitem,
583 gpointer user_data)
584 {
585 delete_viewer((GtkWidget*)menuitem, user_data);
586 }
587
588
589 void
590 on_load_module_activate (GtkMenuItem *menuitem,
591 gpointer user_data)
592 {
593 g_printf("Load module\n");
594 }
595
596
597 void
598 on_unload_module_activate (GtkMenuItem *menuitem,
599 gpointer user_data)
600 {
601 g_printf("Unload module\n");
602 }
603
604
605 void
606 on_add_module_search_path_activate (GtkMenuItem *menuitem,
607 gpointer user_data)
608 {
609 g_printf("Add module search path\n");
610 }
611
612
613 void
614 on_color_activate (GtkMenuItem *menuitem,
615 gpointer user_data)
616 {
617 g_printf("Color\n");
618 }
619
620
621 void
622 on_filter_activate (GtkMenuItem *menuitem,
623 gpointer user_data)
624 {
625 g_printf("Filter\n");
626 }
627
628
629 void
630 on_save_configuration_activate (GtkMenuItem *menuitem,
631 gpointer user_data)
632 {
633 g_printf("Save configuration\n");
634 }
635
636
637 void
638 on_content_activate (GtkMenuItem *menuitem,
639 gpointer user_data)
640 {
641 g_printf("Content\n");
642 }
643
644
645 void
646 on_about_activate (GtkMenuItem *menuitem,
647 gpointer user_data)
648 {
649 g_printf("About...\n");
650 }
651
652
653 void
654 on_button_new_clicked (GtkButton *button,
655 gpointer user_data)
656 {
657 createNewWindow((GtkWidget*)button, user_data, FALSE);
658 }
659
660
661 void
662 on_button_open_clicked (GtkButton *button,
663 gpointer user_data)
664 {
665 open_traceset((GtkWidget*)button, user_data);
666 }
667
668
669 void
670 on_button_add_trace_clicked (GtkButton *button,
671 gpointer user_data)
672 {
673 add_trace((GtkWidget*)button, user_data);
674 }
675
676
677 void
678 on_button_remove_trace_clicked (GtkButton *button,
679 gpointer user_data)
680 {
681 remove_trace((GtkWidget*)button, user_data);
682 }
683
684
685 void
686 on_button_save_clicked (GtkButton *button,
687 gpointer user_data)
688 {
689 save((GtkWidget*)button, user_data);
690 }
691
692
693 void
694 on_button_save_as_clicked (GtkButton *button,
695 gpointer user_data)
696 {
697 save_as((GtkWidget*)button, user_data);
698 }
699
700
701 void
702 on_button_zoom_in_clicked (GtkButton *button,
703 gpointer user_data)
704 {
705 zoom_in((GtkWidget*)button, user_data);
706 }
707
708
709 void
710 on_button_zoom_out_clicked (GtkButton *button,
711 gpointer user_data)
712 {
713 zoom_out((GtkWidget*)button, user_data);
714 }
715
716
717 void
718 on_button_zoom_extended_clicked (GtkButton *button,
719 gpointer user_data)
720 {
721 zoom_extended((GtkWidget*)button, user_data);
722 }
723
724
725 void
726 on_button_go_to_time_clicked (GtkButton *button,
727 gpointer user_data)
728 {
729 go_to_time((GtkWidget*)button, user_data);
730 }
731
732
733 void
734 on_button_show_time_frame_clicked (GtkButton *button,
735 gpointer user_data)
736 {
737 show_time_frame((GtkWidget*)button, user_data);
738 }
739
740
741 void
742 on_button_move_up_clicked (GtkButton *button,
743 gpointer user_data)
744 {
745 move_up_viewer((GtkWidget*)button, user_data);
746 }
747
748
749 void
750 on_button_move_down_clicked (GtkButton *button,
751 gpointer user_data)
752 {
753 move_down_viewer((GtkWidget*)button, user_data);
754 }
755
756
757 void
758 on_button_delete_viewer_clicked (GtkButton *button,
759 gpointer user_data)
760 {
761 delete_viewer((GtkWidget*)button, user_data);
762 }
763
764 void
765 on_MWindow_destroy (GtkObject *object,
766 gpointer user_data)
767 {
768 systemView * sv = gSysView;
769 gint count = 0;
770 while(sv->Next){
771 g_printf("There are : %d windows\n",++count);
772 sv = sv->Next;
773 }
774 g_printf("There are : %d windows\n",++count);
775
776 gtk_main_quit ();
777
778 }
779
780
781 void
782 on_MNotebook_switch_page (GtkNotebook *notebook,
783 GtkNotebookPage *page,
784 guint page_num,
785 gpointer user_data)
786 {
787 mainWindow * mw = get_window_data_struct((GtkWidget*)notebook);
788 tab * Tab = mw->Tab;
789
790 while(page_num){
791 Tab = Tab->Next;
792 page_num--;
793 }
794 mw->CurrentTab = Tab;
795 }
796
This page took 0.047081 seconds and 4 git commands to generate.