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