use time functions in time.h
[lttv.git] / ltt / branches / poly / lttv / modules / gui / mainWin / src / callbacks.c
CommitLineData
561eba2a 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"
95cd67ef 11#include <lttv/mainWindow.h>
37d0eca6 12#include <lttv/menu.h>
13#include <lttv/toolbar.h>
58960b51 14#include <lttv/gtkTraceSet.h>
6b1d3120 15#include <lttv/module.h>
fc188b78 16#include <lttv/gtkdirsel.h>
f7afe191 17#include <lttv/iattribute.h>
6b1d3120 18
f7afe191 19#define PATH_LENGTH 256
20#define DEFAULT_TIME_WIDTH_S 1
21
22//extern LttvTracesetContext * gTracesetContext;
23extern LttTrace *gInit_Trace ;
561eba2a 24
ec25ff5e 25
26/** Array containing instanced objects. */
27extern GSList * Main_Window_List;
561eba2a 28
7a859036 29static int gWinCount = 0;
30
561eba2a 31mainWindow * get_window_data_struct(GtkWidget * widget);
36b3c068 32char * get_unload_module(char ** loaded_module_name, int nb_module);
5723fa24 33void * create_tab(GtkWidget* parent, GtkNotebook * notebook, char * label);
561eba2a 34
35/* test part */
36void insertView(GtkWidget* widget, view_constructor constructor);
37
36b3c068 38enum
39{
40 MODULE_COLUMN,
41 N_COLUMNS
42};
43
561eba2a 44void
45on_textview1_grab_focus (GtkTextView *text_view,
46 gpointer user_data)
47{
48 GtkWidget * widget;
49 GtkCustom * custom = (GtkCustom*)user_data;
50 widget = gtk_widget_get_parent((GtkWidget*)text_view);
51 widget = gtk_widget_get_parent(widget);
52 gtk_custom_set_focus((GtkWidget*)custom, (gpointer)widget);
53}
54
55void
56insertViewTest(GtkMenuItem *menuitem, gpointer user_data)
57{
58 guint val = 20;
37d0eca6 59 insertView((GtkWidget*)menuitem, (view_constructor)user_data);
60 // selected_hook(&val);
561eba2a 61}
62
63void
64on_insert_viewer_test_activate (GtkMenuItem *menuitem,
65 gpointer user_data)
66{
67 GtkWidget *scrolledwindow1, *textview1, *label;
68 static int count = 0;
69 char str[64];
70 GtkCustom * custom;
71 GtkTextBuffer* buf;
72
73 mainWindow * mwData;
74 mwData = get_window_data_struct((GtkWidget*)menuitem);
75 if(!mwData->CurrentTab) return;
76 custom = mwData->CurrentTab->custom;
77
78 sprintf(str,"label : %d",++count);
79 scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
80 gtk_widget_show (scrolledwindow1);
81 label = gtk_label_new(str);
82 gtk_widget_show(label);
83
84 gtk_custom_widget_add(custom, scrolledwindow1);
85 gtk_widget_set_size_request ((GtkWidget*)scrolledwindow1, 800, 100);
86
87 textview1 = gtk_text_view_new ();
88 gtk_widget_show (textview1);
89 gtk_container_add (GTK_CONTAINER (scrolledwindow1), textview1);
90 buf = gtk_text_view_get_buffer((GtkTextView*)textview1);
91 sprintf(str,"text view : %d",count);
92 gtk_text_buffer_set_text(buf,str, -1);
93
94 g_signal_connect ((gpointer) textview1, "grab_focus",
95 G_CALLBACK (on_textview1_grab_focus), custom);
96}
97
98/* end of test part */
99
100
101/* internal functions */
102void insertView(GtkWidget* widget, view_constructor constructor)
103{
104 GtkCustom * custom;
105 mainWindow * mwData;
f9334f6f 106 GtkWidget * viewer;
561eba2a 107
108 mwData = get_window_data_struct(widget);
109 if(!mwData->CurrentTab) return;
110 custom = mwData->CurrentTab->custom;
111
f9334f6f 112 viewer = (GtkWidget*)constructor(mwData);
113 if(viewer)
f0d936c0 114 {
115 gtk_custom_widget_add(custom, viewer);
116 // Added by MD
8af8e4c5 117 // g_object_unref(G_OBJECT(viewer));
f0d936c0 118 }
561eba2a 119}
120
121void get_label_string (GtkWidget * text, gchar * label)
122{
123 GtkEntry * entry = (GtkEntry*)text;
124 if(strlen(gtk_entry_get_text(entry))!=0)
125 strcpy(label,gtk_entry_get_text(entry));
126}
127
6b1d3120 128void get_label(GtkWindow * mw, gchar * str, gchar* dialogue_title, gchar * label_str)
561eba2a 129{
130 GtkWidget * dialogue;
131 GtkWidget * text;
132 GtkWidget * label;
133 gint id;
134
5723fa24 135 dialogue = gtk_dialog_new_with_buttons(dialogue_title,NULL,
561eba2a 136 GTK_DIALOG_MODAL,
137 GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,
138 GTK_STOCK_CANCEL,GTK_RESPONSE_REJECT,
139 NULL);
140
6b1d3120 141 label = gtk_label_new(label_str);
561eba2a 142 gtk_widget_show(label);
143
144 text = gtk_entry_new();
145 gtk_widget_show(text);
146
147 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), label,TRUE, TRUE,0);
148 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), text,FALSE, FALSE,0);
149
150 id = gtk_dialog_run(GTK_DIALOG(dialogue));
151 switch(id){
152 case GTK_RESPONSE_ACCEPT:
153 get_label_string(text,str);
154 gtk_widget_destroy(dialogue);
155 break;
156 case GTK_RESPONSE_REJECT:
157 default:
158 gtk_widget_destroy(dialogue);
159 break;
160 }
161}
162
163mainWindow * get_window_data_struct(GtkWidget * widget)
164{
165 GtkWidget * mw;
166 mainWindow * mwData;
167
168 mw = lookup_widget(widget, "MWindow");
169 if(mw == NULL){
170 g_printf("Main window does not exist\n");
171 return;
172 }
173
174 mwData = (mainWindow *) g_object_get_data(G_OBJECT(mw),"mainWindow");
175 if(mwData == NULL){
176 g_printf("Main window data does not exist\n");
177 return;
178 }
179 return mwData;
180}
181
182void createNewWindow(GtkWidget* widget, gpointer user_data, gboolean clone)
183{
5723fa24 184 mainWindow * parent = get_window_data_struct(widget);
561eba2a 185
5723fa24 186 constructMainWin(parent, NULL);
561eba2a 187
188 if(clone){
189 g_printf("Clone : use the same traceset\n");
190 }else{
191 g_printf("Empty : traceset is set to NULL\n");
192 }
193}
194
195void move_up_viewer(GtkWidget * widget, gpointer user_data)
196{
197 mainWindow * mw = get_window_data_struct(widget);
198 if(!mw->CurrentTab) return;
199 gtk_custom_widget_move_up(mw->CurrentTab->custom);
200}
201
202void move_down_viewer(GtkWidget * widget, gpointer user_data)
203{
204 mainWindow * mw = get_window_data_struct(widget);
205 if(!mw->CurrentTab) return;
206 gtk_custom_widget_move_down(mw->CurrentTab->custom);
207}
208
209void delete_viewer(GtkWidget * widget, gpointer user_data)
210{
211 mainWindow * mw = get_window_data_struct(widget);
212 if(!mw->CurrentTab) return;
213 gtk_custom_widget_delete(mw->CurrentTab->custom);
214}
215
216void open_traceset(GtkWidget * widget, gpointer user_data)
217{
218 g_printf("Open a trace set\n");
219}
220
221void add_trace(GtkWidget * widget, gpointer user_data)
222{
223 g_printf("add a trace to a trace set\n");
224}
225
226void remove_trace(GtkWidget * widget, gpointer user_data)
227{
228 g_printf("remove a trace from a trace set\n");
229}
230
231void save(GtkWidget * widget, gpointer user_data)
232{
233 g_printf("Save\n");
234}
235
236void save_as(GtkWidget * widget, gpointer user_data)
237{
238 g_printf("Save as\n");
239}
240
241void zoom_in(GtkWidget * widget, gpointer user_data)
242{
243 g_printf("Zoom in\n");
244}
245
246void zoom_out(GtkWidget * widget, gpointer user_data)
247{
248 g_printf("Zoom out\n");
249}
250
251void zoom_extended(GtkWidget * widget, gpointer user_data)
252{
253 g_printf("Zoom extended\n");
254}
255
256void go_to_time(GtkWidget * widget, gpointer user_data)
257{
258 g_printf("Go to time\n");
259}
260
261void show_time_frame(GtkWidget * widget, gpointer user_data)
262{
263 g_printf("Show time frame\n");
264}
265
266
267/* callback function */
268
269void
270on_empty_traceset_activate (GtkMenuItem *menuitem,
271 gpointer user_data)
272{
273 createNewWindow((GtkWidget*)menuitem, user_data, FALSE);
274}
275
276
277void
278on_clone_traceset_activate (GtkMenuItem *menuitem,
279 gpointer user_data)
280{
281 createNewWindow((GtkWidget*)menuitem, user_data, TRUE);
282}
283
284
285void
286on_tab_activate (GtkMenuItem *menuitem,
287 gpointer user_data)
288{
6b1d3120 289 gchar label[PATH_LENGTH];
561eba2a 290 GtkNotebook * notebook = (GtkNotebook *)lookup_widget((GtkWidget*)menuitem, "MNotebook");
291 if(notebook == NULL){
292 g_printf("Notebook does not exist\n");
293 return;
294 }
295
6b1d3120 296 strcpy(label,"Page");
5723fa24 297 get_label(NULL, label,"Get the name of the tab","Please input tab's name");
561eba2a 298
5723fa24 299 create_tab ((GtkWidget*)menuitem, notebook, label);
561eba2a 300}
301
302
303void
304on_open_activate (GtkMenuItem *menuitem,
305 gpointer user_data)
306{
307 open_traceset((GtkWidget*)menuitem, user_data);
308}
309
310
311void
312on_close_activate (GtkMenuItem *menuitem,
313 gpointer user_data)
314{
315 g_printf("Close\n");
316}
317
318
319void
320on_close_tab_activate (GtkMenuItem *menuitem,
321 gpointer user_data)
322{
323 g_printf("Close tab\n");
324}
325
326
327void
328on_add_trace_activate (GtkMenuItem *menuitem,
329 gpointer user_data)
330{
331 add_trace((GtkWidget*)menuitem, user_data);
332}
333
334
335void
336on_remove_trace_activate (GtkMenuItem *menuitem,
337 gpointer user_data)
338{
339 remove_trace((GtkWidget*)menuitem, user_data);
340}
341
342
343void
344on_save_activate (GtkMenuItem *menuitem,
345 gpointer user_data)
346{
347 save((GtkWidget*)menuitem, user_data);
348}
349
350
351void
352on_save_as_activate (GtkMenuItem *menuitem,
353 gpointer user_data)
354{
355 save_as((GtkWidget*)menuitem, user_data);
356}
357
358
359void
360on_quit_activate (GtkMenuItem *menuitem,
361 gpointer user_data)
362{
7a859036 363 mainWindow * mwData = get_window_data_struct((GtkWidget*)menuitem);
364 mainWindow_Destructor(mwData);
561eba2a 365}
366
367
368void
369on_cut_activate (GtkMenuItem *menuitem,
370 gpointer user_data)
371{
372 g_printf("Cut\n");
373}
374
375
376void
377on_copy_activate (GtkMenuItem *menuitem,
378 gpointer user_data)
379{
380 g_printf("Copye\n");
381}
382
383
384void
385on_paste_activate (GtkMenuItem *menuitem,
386 gpointer user_data)
387{
388 g_printf("Paste\n");
389}
390
391
392void
393on_delete_activate (GtkMenuItem *menuitem,
394 gpointer user_data)
395{
396 g_printf("Delete\n");
397}
398
399
400void
401on_zoom_in_activate (GtkMenuItem *menuitem,
402 gpointer user_data)
403{
404 zoom_in((GtkWidget*)menuitem, user_data);
405}
406
407
408void
409on_zoom_out_activate (GtkMenuItem *menuitem,
410 gpointer user_data)
411{
412 zoom_out((GtkWidget*)menuitem, user_data);
413}
414
415
416void
417on_zoom_extended_activate (GtkMenuItem *menuitem,
418 gpointer user_data)
419{
420 zoom_extended((GtkWidget*)menuitem, user_data);
421}
422
423
424void
425on_go_to_time_activate (GtkMenuItem *menuitem,
426 gpointer user_data)
427{
428 go_to_time((GtkWidget*)menuitem, user_data);
429}
430
431
432void
433on_show_time_frame_activate (GtkMenuItem *menuitem,
434 gpointer user_data)
435{
436 show_time_frame((GtkWidget*)menuitem, user_data);
437}
438
439
440void
441on_move_viewer_up_activate (GtkMenuItem *menuitem,
442 gpointer user_data)
443{
444 move_up_viewer((GtkWidget*)menuitem, user_data);
445}
446
447
448void
449on_move_viewer_down_activate (GtkMenuItem *menuitem,
450 gpointer user_data)
451{
452 move_down_viewer((GtkWidget*)menuitem, user_data);
453}
454
455
456void
457on_remove_viewer_activate (GtkMenuItem *menuitem,
458 gpointer user_data)
459{
460 delete_viewer((GtkWidget*)menuitem, user_data);
461}
462
463
464void
465on_load_module_activate (GtkMenuItem *menuitem,
466 gpointer user_data)
467{
36b3c068 468 char ** dir;
469 gint id;
470 char str[PATH_LENGTH];
471 mainWindow * mwData = get_window_data_struct((GtkWidget*)menuitem);
472 GtkFileSelection * fileSelector = (GtkFileSelection *)gtk_file_selection_new("Select a module");
473 gtk_file_selection_hide_fileop_buttons(fileSelector);
474
475 str[0] = '\0';
476 id = gtk_dialog_run(GTK_DIALOG(fileSelector));
477 switch(id){
478 case GTK_RESPONSE_ACCEPT:
479 case GTK_RESPONSE_OK:
480 dir = gtk_file_selection_get_selections (fileSelector);
481 sprintf(str,dir[0]);
482 if(mwData->winCreationData)
483 lttv_module_load(str, mwData->winCreationData->argc,mwData->winCreationData->argv);
484 else
485 lttv_module_load(str, 0,NULL);
486 g_strfreev(dir);
487 case GTK_RESPONSE_REJECT:
488 case GTK_RESPONSE_CANCEL:
489 default:
490 gtk_widget_destroy((GtkWidget*)fileSelector);
491 break;
492 }
493 g_printf("Load module: %s\n", str);
561eba2a 494}
495
496
497void
498on_unload_module_activate (GtkMenuItem *menuitem,
499 gpointer user_data)
500{
36b3c068 501 int i;
502 char **name, *unload_module_name;
503 guint nb;
504 LttvModule ** modules, *module;
505 mainWindow * mwData = get_window_data_struct((GtkWidget*)menuitem);
506
507 modules = lttv_module_list(&nb);
508 name = g_new(char*, nb);
509 for(i=0;i<nb;i++){
510 module = modules[i];
511 name[i] = lttv_module_name(module);
512 }
513
514 unload_module_name =get_unload_module(name,nb);
515
516 if(unload_module_name){
517 for(i=0;i<nb;i++){
518 if(strcmp(unload_module_name, name[i]) == 0){
519 lttv_module_unload(modules[i]);
520 break;
521 }
522 }
523 }
524
525 g_free(name);
561eba2a 526}
527
528
529void
530on_add_module_search_path_activate (GtkMenuItem *menuitem,
531 gpointer user_data)
532{
fc188b78 533 GtkDirSelection * fileSelector = (GtkDirSelection *)gtk_dir_selection_new("Select module path");
534 char * dir;
535 gint id;
536
6b1d3120 537 mainWindow * mwData = get_window_data_struct((GtkWidget*)menuitem);
fc188b78 538
539 id = gtk_dialog_run(GTK_DIALOG(fileSelector));
540 switch(id){
541 case GTK_RESPONSE_ACCEPT:
542 case GTK_RESPONSE_OK:
543 dir = gtk_dir_selection_get_dir (fileSelector);
544 lttv_module_path_add(dir);
545 case GTK_RESPONSE_REJECT:
546 case GTK_RESPONSE_CANCEL:
547 default:
548 gtk_widget_destroy((GtkWidget*)fileSelector);
549 break;
6b1d3120 550 }
561eba2a 551}
552
553
554void
555on_color_activate (GtkMenuItem *menuitem,
556 gpointer user_data)
557{
558 g_printf("Color\n");
559}
560
561
562void
563on_filter_activate (GtkMenuItem *menuitem,
564 gpointer user_data)
565{
566 g_printf("Filter\n");
567}
568
569
570void
571on_save_configuration_activate (GtkMenuItem *menuitem,
572 gpointer user_data)
573{
574 g_printf("Save configuration\n");
575}
576
577
578void
579on_content_activate (GtkMenuItem *menuitem,
580 gpointer user_data)
581{
582 g_printf("Content\n");
583}
584
585
586void
587on_about_activate (GtkMenuItem *menuitem,
588 gpointer user_data)
589{
590 g_printf("About...\n");
591}
592
593
594void
595on_button_new_clicked (GtkButton *button,
596 gpointer user_data)
597{
598 createNewWindow((GtkWidget*)button, user_data, FALSE);
599}
600
601
602void
603on_button_open_clicked (GtkButton *button,
604 gpointer user_data)
605{
606 open_traceset((GtkWidget*)button, user_data);
607}
608
609
610void
611on_button_add_trace_clicked (GtkButton *button,
612 gpointer user_data)
613{
614 add_trace((GtkWidget*)button, user_data);
615}
616
617
618void
619on_button_remove_trace_clicked (GtkButton *button,
620 gpointer user_data)
621{
622 remove_trace((GtkWidget*)button, user_data);
623}
624
625
626void
627on_button_save_clicked (GtkButton *button,
628 gpointer user_data)
629{
630 save((GtkWidget*)button, user_data);
631}
632
633
634void
635on_button_save_as_clicked (GtkButton *button,
636 gpointer user_data)
637{
638 save_as((GtkWidget*)button, user_data);
639}
640
641
642void
643on_button_zoom_in_clicked (GtkButton *button,
644 gpointer user_data)
645{
646 zoom_in((GtkWidget*)button, user_data);
647}
648
649
650void
651on_button_zoom_out_clicked (GtkButton *button,
652 gpointer user_data)
653{
654 zoom_out((GtkWidget*)button, user_data);
655}
656
657
658void
659on_button_zoom_extended_clicked (GtkButton *button,
660 gpointer user_data)
661{
662 zoom_extended((GtkWidget*)button, user_data);
663}
664
665
666void
667on_button_go_to_time_clicked (GtkButton *button,
668 gpointer user_data)
669{
670 go_to_time((GtkWidget*)button, user_data);
671}
672
673
674void
675on_button_show_time_frame_clicked (GtkButton *button,
676 gpointer user_data)
677{
678 show_time_frame((GtkWidget*)button, user_data);
679}
680
681
682void
683on_button_move_up_clicked (GtkButton *button,
684 gpointer user_data)
685{
686 move_up_viewer((GtkWidget*)button, user_data);
687}
688
689
690void
691on_button_move_down_clicked (GtkButton *button,
692 gpointer user_data)
693{
694 move_down_viewer((GtkWidget*)button, user_data);
695}
696
697
698void
699on_button_delete_viewer_clicked (GtkButton *button,
700 gpointer user_data)
701{
702 delete_viewer((GtkWidget*)button, user_data);
703}
704
705void
706on_MWindow_destroy (GtkObject *object,
707 gpointer user_data)
708{
f7afe191 709 mainWindow *Main_Window = (mainWindow*)user_data;
710
5723fa24 711 g_printf("There are : %d windows\n",g_slist_length(Main_Window_List));
561eba2a 712
7a859036 713 gWinCount--;
714 if(gWinCount == 0)
715 gtk_main_quit ();
561eba2a 716}
717
718
719void
720on_MNotebook_switch_page (GtkNotebook *notebook,
721 GtkNotebookPage *page,
722 guint page_num,
723 gpointer user_data)
724{
725 mainWindow * mw = get_window_data_struct((GtkWidget*)notebook);
726 tab * Tab = mw->Tab;
727
728 while(page_num){
729 Tab = Tab->Next;
730 page_num--;
731 }
732 mw->CurrentTab = Tab;
733}
734
36b3c068 735char * get_unload_module(char ** loaded_module_name, int nb_module)
736{
737 GtkWidget * dialogue;
738 GtkWidget * scroll_win;
739 GtkWidget * tree;
740 GtkListStore * store;
741 GtkTreeViewColumn * column;
742 GtkCellRenderer * renderer;
743 GtkTreeSelection * select;
744 GtkTreeIter iter;
745 gint id, i;
746 char * unload_module_name = NULL;
747
748 dialogue = gtk_dialog_new_with_buttons("Select an unload module",
749 NULL,
750 GTK_DIALOG_MODAL,
751 GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,
752 GTK_STOCK_CANCEL,GTK_RESPONSE_REJECT,
753 NULL);
754 gtk_window_set_default_size((GtkWindow*)dialogue, 500, 200);
755
756 scroll_win = gtk_scrolled_window_new (NULL, NULL);
757 gtk_widget_show ( scroll_win);
758 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_win),
759 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
760
761 store = gtk_list_store_new (N_COLUMNS,G_TYPE_STRING);
762 tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL (store));
763 gtk_widget_show ( tree);
764 g_object_unref (G_OBJECT (store));
765
766 renderer = gtk_cell_renderer_text_new ();
767 column = gtk_tree_view_column_new_with_attributes ("MODULE NAME",
768 renderer,
769 "text", MODULE_COLUMN,
770 NULL);
771 gtk_tree_view_column_set_alignment (column, 0.5);
772 gtk_tree_view_column_set_fixed_width (column, 150);
773 gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
774
775 select = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
776 gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
777
778 gtk_container_add (GTK_CONTAINER (scroll_win), tree);
779
780 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialogue)->vbox), scroll_win,TRUE, TRUE,0);
781
782 for(i=0;i<nb_module;i++){
783 gtk_list_store_append (store, &iter);
784 gtk_list_store_set (store, &iter, MODULE_COLUMN,loaded_module_name[i],-1);
785 }
786
787 id = gtk_dialog_run(GTK_DIALOG(dialogue));
788 switch(id){
789 case GTK_RESPONSE_ACCEPT:
790 case GTK_RESPONSE_OK:
791 if (gtk_tree_selection_get_selected (select, (GtkTreeModel**)&store, &iter)){
792 gtk_tree_model_get ((GtkTreeModel*)store, &iter, MODULE_COLUMN, &unload_module_name, -1);
793 }
794 case GTK_RESPONSE_REJECT:
795 case GTK_RESPONSE_CANCEL:
796 default:
797 gtk_widget_destroy(dialogue);
798 break;
799 }
800
801 return unload_module_name;
802}
5723fa24 803
804void insertMenuToolbarItem(mainWindow * mw)
805{
806 int i;
807 GdkPixbuf *pixbuf;
808 view_constructor constructor;
809 LttvMenus * menu;
810 LttvToolbars * toolbar;
811 lttv_menu_closure *menuItem;
812 lttv_toolbar_closure *toolbarItem;
813 LttvAttributeValue value;
814 LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
815 GtkWidget * ToolMenuTitle_menu, *insert_view, *pixmap;
816
817 g_assert(lttv_iattribute_find_by_path(attributes,
818 "viewers/menu", LTTV_POINTER, &value));
819 menu = (LttvMenus*)*(value.v_pointer);
820
821 if(menu){
822 for(i=0;i<menu->len;i++){
823 menuItem = &g_array_index(menu, lttv_menu_closure, i);
824 constructor = menuItem->con;
825 ToolMenuTitle_menu = lookup_widget(mw->MWindow,"ToolMenuTitle_menu");
826 insert_view = gtk_menu_item_new_with_mnemonic (menuItem->menuText);
827 gtk_widget_show (insert_view);
828 gtk_container_add (GTK_CONTAINER (ToolMenuTitle_menu), insert_view);
829 g_signal_connect ((gpointer) insert_view, "activate",
830 G_CALLBACK (insertViewTest),
831 constructor);
832 }
833 }
834
835 g_assert(lttv_iattribute_find_by_path(attributes,
836 "viewers/toolbar", LTTV_POINTER, &value));
837 toolbar = (LttvToolbars*)*(value.v_pointer);
838
839 if(toolbar){
840 for(i=0;i<toolbar->len;i++){
841 toolbarItem = &g_array_index(toolbar, lttv_toolbar_closure, i);
842 constructor = toolbarItem->con;
843 ToolMenuTitle_menu = lookup_widget(mw->MWindow,"MToolbar2");
844 pixbuf = gdk_pixbuf_new_from_xpm_data ((const char**)toolbarItem->pixmap);
845 pixmap = gtk_image_new_from_pixbuf(pixbuf);
846 insert_view = gtk_toolbar_append_element (GTK_TOOLBAR (ToolMenuTitle_menu),
847 GTK_TOOLBAR_CHILD_BUTTON,
848 NULL,
849 "",
850 toolbarItem->tooltip, NULL,
851 pixmap, NULL, NULL);
852 gtk_label_set_use_underline (GTK_LABEL (((GtkToolbarChild*) (g_list_last (GTK_TOOLBAR (ToolMenuTitle_menu)->children)->data))->label), TRUE);
853 gtk_widget_show (insert_view);
854 gtk_container_set_border_width (GTK_CONTAINER (insert_view), 1);
855 g_signal_connect ((gpointer) insert_view, "clicked",G_CALLBACK (insertViewTest),constructor);
856 }
857 }
858}
859
860void constructMainWin(mainWindow * parent, WindowCreationData * win_creation_data)
861{
f7afe191 862 g_critical("constructMainWin()");
7a859036 863 // systemView * sv = NULL; /* System view */
f7afe191 864 //systemView * newSv; /* New system view displayed in the new window */
5723fa24 865 GtkWidget * newWindow; /* New generated main window */
866 mainWindow * newMWindow;/* New main window structure */
867 GtkNotebook * notebook;
f7afe191 868 LttvIAttribute *attributes =
869 LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
870 LttvAttributeValue value;
871
7a859036 872 // if(parent) sv = parent->SystemView;
5723fa24 873
874 newMWindow = g_new(mainWindow, 1);
875
876 // Add the object's information to the module's array
877 Main_Window_List = g_slist_append(Main_Window_List, newMWindow);
878
f7afe191 879
5723fa24 880 newWindow = create_MWindow();
881 gtk_widget_show (newWindow);
882
f7afe191 883 //newSv = g_new(systemView, 1);
7a859036 884 // if(sv){
885 // while(sv->Next) sv = sv->Next;
886 // sv->Next = newSv;
887 // }
5723fa24 888
f7afe191 889 //newSv->EventDB = NULL;
890 //newSv->SystemInfo = NULL;
891 //newSv->Options = NULL;
892 //newSv->Next = NULL;
893 //newSv->Window = newMWindow;
894
895 newMWindow->Attributes = attributes;
896
897 newMWindow->Traceset_Info = g_new(TracesetInfo,1);
898 newMWindow->Traceset_Info->path = NULL ;
899
900
901 newMWindow->Traceset_Info->before_traceset = lttv_hooks_new();
902 newMWindow->Traceset_Info->after_traceset = lttv_hooks_new();
903 newMWindow->Traceset_Info->before_trace = lttv_hooks_new();
904 newMWindow->Traceset_Info->after_trace = lttv_hooks_new();
905 newMWindow->Traceset_Info->before_tracefile = lttv_hooks_new();
906 newMWindow->Traceset_Info->after_tracefile = lttv_hooks_new();
907 newMWindow->Traceset_Info->before_event = lttv_hooks_new();
908 newMWindow->Traceset_Info->after_event = lttv_hooks_new();
909
910 g_assert(lttv_iattribute_find_by_path(attributes, "hooks/traceset/before",
911 LTTV_POINTER, &value));
912 *(value.v_pointer) = newMWindow->Traceset_Info->before_traceset;
913 g_assert(lttv_iattribute_find_by_path(attributes, "hooks/traceset/after",
914 LTTV_POINTER, &value));
915 *(value.v_pointer) = newMWindow->Traceset_Info->after_traceset;
916 g_assert(lttv_iattribute_find_by_path(attributes, "hooks/trace/before",
917 LTTV_POINTER, &value));
918 *(value.v_pointer) = newMWindow->Traceset_Info->before_trace;
919 g_assert(lttv_iattribute_find_by_path(attributes, "hooks/trace/after",
920 LTTV_POINTER, &value));
921 *(value.v_pointer) = newMWindow->Traceset_Info->after_trace;
922 g_assert(lttv_iattribute_find_by_path(attributes, "hooks/tracefile/before",
923 LTTV_POINTER, &value));
924 *(value.v_pointer) = newMWindow->Traceset_Info->before_tracefile;
925 g_assert(lttv_iattribute_find_by_path(attributes, "hooks/tracefile/after",
926 LTTV_POINTER, &value));
927 *(value.v_pointer) = newMWindow->Traceset_Info->after_tracefile;
928 g_assert(lttv_iattribute_find_by_path(attributes, "hooks/event/before",
929 LTTV_POINTER, &value));
930 *(value.v_pointer) = newMWindow->Traceset_Info->before_event;
931 g_assert(lttv_iattribute_find_by_path(attributes, "hooks/event/after",
932 LTTV_POINTER, &value));
933 *(value.v_pointer) = newMWindow->Traceset_Info->after_event;
934
935
5723fa24 936 newMWindow->MWindow = newWindow;
937 newMWindow->Tab = NULL;
938 newMWindow->CurrentTab = NULL;
f7afe191 939 //newMWindow->SystemView = newSv;
5723fa24 940 newMWindow->Attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
941 if(parent){
f7afe191 942 newMWindow->Traceset_Info->traceset =
943 lttv_traceset_copy(parent->Traceset_Info->traceset);
944
945//FIXME copy not implemented in lower level
946 newMWindow->Traceset_Info->TracesetContext =
947 g_object_new(LTTV_TRACESET_STATS_TYPE, NULL);
948 lttv_context_init(
949 LTTV_TRACESET_CONTEXT(newMWindow->Traceset_Info->TracesetContext),
950 newMWindow->Traceset_Info->traceset);
951 //newMWindow->traceset_context = parent->traceset_context;
5723fa24 952 newMWindow->winCreationData = parent->winCreationData;
953 }else{
f7afe191 954 newMWindow->Traceset_Info->traceset = lttv_traceset_new();
955
956 /* Add the command line trace */
957 if(gInit_Trace != NULL)
958 lttv_traceset_add(newMWindow->Traceset_Info->traceset, gInit_Trace);
959 /* NOTE : the context must be recreated if we change the traceset,
960 * ie : adding/removing traces */
961 newMWindow->Traceset_Info->TracesetContext =
962 g_object_new(LTTV_TRACESET_STATS_TYPE, NULL);
963 lttv_context_init(
964 LTTV_TRACESET_CONTEXT(newMWindow->Traceset_Info->TracesetContext),
965 newMWindow->Traceset_Info->traceset);
966
5723fa24 967 newMWindow->winCreationData = win_creation_data;
968 }
969
970 insertMenuToolbarItem(newMWindow);
971
f7afe191 972 //g_object_set_data(G_OBJECT(newWindow), "systemView", (gpointer)newSv);
5723fa24 973 g_object_set_data(G_OBJECT(newWindow), "mainWindow", (gpointer)newMWindow);
974
975 //create a default tab
976 notebook = (GtkNotebook *)lookup_widget(newMWindow->MWindow, "MNotebook");
977 if(notebook == NULL){
978 g_printf("Notebook does not exist\n");
979 return;
980 }
981 //for now there is no name field in LttvTraceset structure
982 //Use "Traceset" as the label for the default tab
983 create_tab(newMWindow->MWindow, notebook,"Traceset");
984
7a859036 985 g_object_set_data_full(
986 G_OBJECT(newMWindow->MWindow),
987 "Main_Window_Data",
988 newMWindow,
989 (GDestroyNotify)mainWindow_free);
990
991 gWinCount++;
5723fa24 992}
993
f7afe191 994void Tab_Destructor(tab *Tab)
995{
996 if(Tab->Attributes)
997 g_object_unref(Tab->Attributes);
998 g_free(Tab);
999}
1000
5723fa24 1001void * create_tab(GtkWidget* parent, GtkNotebook * notebook, char * label)
1002{
1003 GList * list;
1004 tab * tmpTab;
1005 mainWindow * mwData;
f7afe191 1006 LttTime TmpTime;
5723fa24 1007
1008 mwData = get_window_data_struct(parent);
5723fa24 1009 tmpTab = mwData->Tab;
1010 while(tmpTab && tmpTab->Next) tmpTab = tmpTab->Next;
1011 if(!tmpTab){
1012 mwData->CurrentTab = NULL;
1013 tmpTab = g_new(tab,1);
1014 mwData->Tab = tmpTab;
1015 }else{
1016 tmpTab->Next = g_new(tab,1);
1017 tmpTab = tmpTab->Next;
1018 }
1019 if(mwData->CurrentTab){
f7afe191 1020 // Will have to read directly at the main window level, as we want
1021 // to be able to modify a traceset on the fly.
1022 // tmpTab->traceStartTime = mwData->CurrentTab->traceStartTime;
1023 // tmpTab->traceEndTime = mwData->CurrentTab->traceEndTime;
1024 tmpTab->Time_Window = mwData->CurrentTab->Time_Window;
5723fa24 1025 tmpTab->currentTime = mwData->CurrentTab->currentTime;
1026 }else{
f7afe191 1027 // Will have to read directly at the main window level, as we want
1028 // to be able to modify a traceset on the fly.
1029 // getTracesetTimeSpan(mwData,&tmpTab->traceStartTime, &tmpTab->traceEndTime);
1030 tmpTab->Time_Window.startTime =
1031 LTTV_TRACESET_CONTEXT(mwData->Traceset_Info->TracesetContext)->Time_Span->startTime;
1032 if(DEFAULT_TIME_WIDTH_S <
1033 LTTV_TRACESET_CONTEXT(mwData->Traceset_Info->TracesetContext)->Time_Span->endTime.tv_sec)
1034 TmpTime.tv_sec = DEFAULT_TIME_WIDTH_S;
1035 else
1036 TmpTime.tv_sec =
1037 LTTV_TRACESET_CONTEXT(mwData->Traceset_Info->TracesetContext)->Time_Span->endTime.tv_sec;
1038 TmpTime.tv_nsec = 0;
1039 tmpTab->Time_Window.Time_Width = TmpTime ;
1040 tmpTab->currentTime.tv_sec = TmpTime.tv_sec / 2;
1041 tmpTab->currentTime.tv_nsec = 0 ;
5723fa24 1042 }
1043 tmpTab->Attributes = LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
1044 // mwData->CurrentTab = tmpTab;
1045 tmpTab->custom = (GtkCustom*)gtk_custom_new();
1046 tmpTab->custom->mw = mwData;
1047 gtk_widget_show((GtkWidget*)tmpTab->custom);
1048 tmpTab->Next = NULL;
1049
1050 tmpTab->label = gtk_label_new (label);
1051 gtk_widget_show (tmpTab->label);
1052
f7afe191 1053 g_object_set_data_full(
1054 G_OBJECT(tmpTab->custom),
1055 "Tab_Info",
1056 tmpTab,
1057 (GDestroyNotify)Tab_Destructor);
5723fa24 1058
f7afe191 1059 gtk_notebook_append_page(notebook, (GtkWidget*)tmpTab->custom, tmpTab->label);
5723fa24 1060 list = gtk_container_get_children(GTK_CONTAINER(notebook));
1061 gtk_notebook_set_current_page(notebook,g_list_length(list)-1);
1062}
This page took 0.067113 seconds and 4 git commands to generate.