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