8 #include "Process_List.h"
9 #include "Event_Hooks.h"
10 #include "CFV-private.h"
13 #define g_info(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, format)
14 #define g_debug(format...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format)
16 extern GSList
*gControl_Flow_Data_List
;
18 /*****************************************************************************
19 * Control Flow Viewer class implementation *
20 *****************************************************************************/
22 * Control Flow Viewer's constructor
24 * This constructor is given as a parameter to the menuitem and toolbar button
25 * registration. It creates the drawing widget.
26 * @param ParentWindow A pointer to the parent window.
27 * @return The widget created.
32 GtkWidget
*Process_List_Widget
, *Drawing_Widget
;
34 ControlFlowData
* Control_Flow_Data
= g_new(ControlFlowData
,1) ;
36 /* Create the Drawing */
37 Control_Flow_Data
->Drawing
= drawing_construct(Control_Flow_Data
);
40 drawing_get_widget(Control_Flow_Data
->Drawing
);
42 /* TEST DATA, TO BE READ FROM THE TRACE */
43 Control_Flow_Data
->Number_Of_Events
= 1000 ;
44 Control_Flow_Data
->Currently_Selected_Event
= FALSE
;
45 Control_Flow_Data
->Selected_Event
= 0;
46 Control_Flow_Data
->Number_Of_Process
= 10;
48 /* FIXME register Event_Selected_Hook */
52 /* Create the Process list */
53 Control_Flow_Data
->Process_List
= processlist_construct();
56 processlist_get_widget(Control_Flow_Data
->Process_List
);
58 Control_Flow_Data
->Inside_HBox_V
= gtk_hbox_new(0, 0);
61 GTK_BOX(Control_Flow_Data
->Inside_HBox_V
),
62 Process_List_Widget
, FALSE
, TRUE
, 0); // FALSE TRUE
64 GTK_BOX(Control_Flow_Data
->Inside_HBox_V
),
65 Drawing_Widget
, TRUE
, TRUE
, 0);
68 Control_Flow_Data
->VAdjust_C
=
69 GTK_ADJUSTMENT(gtk_adjustment_new( 0.0, /* Value */
74 0.0)); /* page size */
76 Control_Flow_Data
->Scrolled_Window_VC
=
77 gtk_scrolled_window_new (NULL
,
78 Control_Flow_Data
->VAdjust_C
);
80 gtk_scrolled_window_set_policy(
81 GTK_SCROLLED_WINDOW(Control_Flow_Data
->Scrolled_Window_VC
) ,
83 GTK_POLICY_AUTOMATIC
);
85 gtk_scrolled_window_add_with_viewport(
86 GTK_SCROLLED_WINDOW(Control_Flow_Data
->Scrolled_Window_VC
),
87 Control_Flow_Data
->Inside_HBox_V
);
90 //g_signal_connect (G_OBJECT (Control_Flow_Data->Drawing_Area_V),
92 // G_CALLBACK (expose_event_cb),
93 // Control_Flow_Data);
97 //g_signal_connect (G_OBJECT (Control_Flow_Data->VAdjust_C),
99 // G_CALLBACK (v_scroll_cb),
100 // Control_Flow_Data);
103 /* Set the size of the drawing area */
104 //Drawing_Resize(Drawing, h, w);
106 /* Get trace statistics */
107 //Control_Flow_Data->Trace_Statistics = get_trace_statistics(Trace);
110 gtk_widget_show(Drawing_Widget
);
111 gtk_widget_show(Process_List_Widget
);
112 gtk_widget_show(Control_Flow_Data
->Inside_HBox_V
);
113 gtk_widget_show(Control_Flow_Data
->Scrolled_Window_VC
);
115 g_object_set_data_full(
116 G_OBJECT(Control_Flow_Data
->Scrolled_Window_VC
),
119 (GDestroyNotify
)guicontrolflow_destructor
);
122 G_OBJECT(Drawing_Widget
),
126 gControl_Flow_Data_List
= g_slist_append(
127 gControl_Flow_Data_List
,
130 //WARNING : The widget must be
131 //inserted in the main window before the Drawing area
132 //can be configured (and this must happend bedore sending
135 return Control_Flow_Data
;
139 /* Destroys widget also */
141 guicontrolflow_destructor_full(ControlFlowData
*Control_Flow_Data
)
143 g_info("CFV.c : guicontrolflow_destructor_full, %p", Control_Flow_Data
);
144 /* May already have been done by GTK window closing */
145 if(GTK_IS_WIDGET(Control_Flow_Data
->Scrolled_Window_VC
))
146 gtk_widget_destroy(Control_Flow_Data
->Scrolled_Window_VC
);
147 //Control_Flow_Data->Parent_Window = NULL;
148 //FIXME guicontrolflow_destructor(Control_Flow_Data);
151 /* When this destructor is called, the widgets are already disconnected */
153 guicontrolflow_destructor(ControlFlowData
*Control_Flow_Data
)
157 g_info("CFV.c : guicontrolflow_destructor, %p", Control_Flow_Data
);
158 g_info("%p, %p, %p", update_time_window_hook
, Control_Flow_Data
, Control_Flow_Data
->Parent_Window
);
159 if(GTK_IS_WIDGET(Control_Flow_Data
->Scrolled_Window_VC
))
160 g_info("widget still exists");
162 /* Process List is removed with it's widget */
163 //ProcessList_destroy(Control_Flow_Data->Process_List);
164 if(Control_Flow_Data
->Parent_Window
!= NULL
)
166 unreg_update_time_window(update_time_window_hook
,
168 Control_Flow_Data
->Parent_Window
);
170 unreg_update_current_time(update_current_time_hook
,
172 Control_Flow_Data
->Parent_Window
);
174 g_info("CFV.c : guicontrolflow_destructor, %p", Control_Flow_Data
);
175 g_slist_remove(gControl_Flow_Data_List
,Control_Flow_Data
);
176 g_free(Control_Flow_Data
);
179 GtkWidget
*guicontrolflow_get_widget(ControlFlowData
*Control_Flow_Data
)
181 return Control_Flow_Data
->Scrolled_Window_VC
;
184 ProcessList
*guicontrolflow_get_process_list
185 (ControlFlowData
*Control_Flow_Data
)
187 return Control_Flow_Data
->Process_List
;
190 TimeWindow
*guicontrolflow_get_time_window(ControlFlowData
*Control_Flow_Data
)
192 return &Control_Flow_Data
->Time_Window
;
194 LttTime
*guicontrolflow_get_current_time(ControlFlowData
*Control_Flow_Data
)
196 return &Control_Flow_Data
->Current_Time
;