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