#include "Drawing.h"
#include "Process_List.h"
-#include "../icons/hGuiControlFlowInsert.xpm"
+extern GSList *gControl_Flow_Data_List;
/*****************************************************************************
* Control Flow Viewer class implementation *
*****************************************************************************/
-typedef struct _ControlFlowData {
+struct _ControlFlowData {
- GtkWidget *Drawing_Area_V;
GtkWidget *Scrolled_Window_VC;
ProcessList *Process_List;
Drawing_t *Drawing;
- GtkWidget *HBox_V;
+ //GtkWidget *HBox_V;
GtkWidget *Inside_HBox_V;
GtkAdjustment *VAdjust_C ;
/* Trace information */
- TraceSet *Trace_Set;
- TraceStatistics *Trace_Statistics;
+ //TraceSet *Trace_Set;
+ //TraceStatistics *Trace_Statistics;
/* Shown events information */
guint First_Event, Last_Event;
- ltt_time Begin_Time, End_Time;
+ LttTime Begin_Time, End_Time;
/* TEST DATA, TO BE READ FROM THE TRACE */
gboolean Selected_Event ;
guint Number_Of_Process;
-} ControlFlowData ;
-
-
-/** Array containing instanced objects. Used when module is unloaded */
-static GSList *sControl_Flow_Data_List = NULL ;
+} ;
/**
ControlFlowData *
GuiControlFlow(void)
{
- GtkWidget *Process_List_Widget;
+ GtkWidget *Process_List_Widget, *Drawing_Widget;
ControlFlowData* Control_Flow_Data = g_new(ControlFlowData,1) ;
/* Create the Drawing */
- //Control_Flow_Data->Drawing = Drawing();
+ Control_Flow_Data->Drawing = Drawing_construct();
+
+ Drawing_Widget =
+ Drawing_getWidget(Control_Flow_Data->Drawing);
/* TEST DATA, TO BE READ FROM THE TRACE */
Control_Flow_Data->Number_Of_Events = 1000 ;
/* Create the Process list */
- //Control_Flow_Data->Process_List = ProcessList();
+ Control_Flow_Data->Process_List = ProcessList_construct();
- //Process_List_Widget =
- // ProcessList_getWidget(Control_Flow_Data->Process_List);
+ Process_List_Widget =
+ ProcessList_getWidget(Control_Flow_Data->Process_List);
Control_Flow_Data->Inside_HBox_V = gtk_hbox_new(0, 0);
- //gtk_box_pack_start(
- // GTK_BOX(Control_Flow_Data->Inside_HBox_V),
- // Process_List_Widget, FALSE, TRUE, 0);
- //gtk_box_pack_start(
- // GTK_BOX(Control_Flow_Data->Inside_HBox_V),
- // Control_Flow_Data->Drawing_Area_V, TRUE, TRUE, 0);
+ gtk_box_pack_start(
+ GTK_BOX(Control_Flow_Data->Inside_HBox_V),
+ Process_List_Widget, FALSE, TRUE, 0); // FALSE TRUE
+ gtk_box_pack_start(
+ GTK_BOX(Control_Flow_Data->Inside_HBox_V),
+ Drawing_Widget, TRUE, TRUE, 0);
Control_Flow_Data->VAdjust_C =
0.0, /* Page inc. */
0.0)); /* page size */
-
Control_Flow_Data->Scrolled_Window_VC =
gtk_scrolled_window_new (NULL,
Control_Flow_Data->VAdjust_C);
//Control_Flow_Data->Trace_Statistics = get_trace_statistics(Trace);
- gtk_widget_show(Control_Flow_Data->Drawing_Area_V);
+ gtk_widget_show(Drawing_Widget);
gtk_widget_show(Process_List_Widget);
gtk_widget_show(Control_Flow_Data->Inside_HBox_V);
gtk_widget_show(Control_Flow_Data->Scrolled_Window_VC);
-
+
g_object_set_data_full(
- G_OBJECT(Control_Flow_Data->HBox_V),
+ G_OBJECT(Control_Flow_Data->Scrolled_Window_VC),
"Control_Flow_Data",
Control_Flow_Data,
- GuiControlFlow_Destructor);
+ (GDestroyNotify)GuiControlFlow_Destructor);
+ g_slist_append(gControl_Flow_Data_List,Control_Flow_Data);
+ //FIXME : data sent too fast. The widget must be
+ //inserted in the main window before the Drawing area
+ //can be configured (and this must happend bedore sending
+ //data)
+ send_test_data(Control_Flow_Data->Process_List,
+ Control_Flow_Data->Drawing);
+
return Control_Flow_Data;
}
+/* Destroys widget also */
+void
+GuiControlFlow_Destructor_Full(ControlFlowData *Control_Flow_Data)
+{
+ /* May already have been done by GTK window closing */
+ if(GTK_IS_WIDGET(Control_Flow_Data->Scrolled_Window_VC))
+ gtk_widget_destroy(Control_Flow_Data->Scrolled_Window_VC);
+
+ GuiControlFlow_Destructor(Control_Flow_Data);
+}
+
void
GuiControlFlow_Destructor(ControlFlowData *Control_Flow_Data)
{
guint index;
-
- /* May already been done by GTK window closing */
- if(GTK_IS_WIDGET(Control_Flow_Data->HBox_V))
- gtk_widget_destroy(Control_Flow_Data->HBox_V);
- ProcessList_destroy(Control_Flow_Data->Process_List);
+ /* Process List is removed with it's widget */
+ //ProcessList_destroy(Control_Flow_Data->Process_List);
- g_slist_remove(sControl_Flow_Data_List,Control_Flow_Data);
+ g_slist_remove(gControl_Flow_Data_List,Control_Flow_Data);
+ g_free(Control_Flow_Data);
}
-//FIXME : call hGuiEvents_Destructor for corresponding data upon widget destroy
-
+GtkWidget *GuiControlFlow_get_Widget(ControlFlowData *Control_Flow_Data)
+{
+ return Control_Flow_Data->Scrolled_Window_VC ;
+}