mega modif by Mathieu Desnoyers. Independant main windows, multiple tracesets, contro...
[lttv.git] / ltt / branches / poly / lttv / modules / guiControlFlow / CFV.c
index 9855da64bebbcc5fbe2a0609908ab0aa8fb1a8f0..032a7f50ad42ca06320336b82464e9ae042d5fb7 100644 (file)
@@ -6,50 +6,15 @@
 #include "CFV.h"
 #include "Drawing.h"
 #include "Process_List.h"
+#include "Event_Hooks.h"
+#include "CFV-private.h"
 
-#include "../icons/hGuiControlFlowInsert.xpm"
 
+extern GSList *gControl_Flow_Data_List;
 
 /*****************************************************************************
  *                     Control Flow Viewer class implementation              *
  *****************************************************************************/
-
-
-typedef struct _ControlFlowData {
-
-       GtkWidget *Drawing_Area_V;
-       GtkWidget *Scrolled_Window_VC;
-       
-       ProcessList *Process_List;
-       Drawing_t *Drawing;
-
-       GtkWidget *HBox_V;
-       GtkWidget *Inside_HBox_V;
-
-       GtkAdjustment *VAdjust_C ;
-       
-       /* Trace information */
-       TraceSet *Trace_Set;
-       TraceStatistics *Trace_Statistics;
-       
-       /* Shown events information */
-       guint First_Event, Last_Event;
-       ltt_time Begin_Time, End_Time;
-       
-       
-       /* TEST DATA, TO BE READ FROM THE TRACE */
-       gint Number_Of_Events ;
-       guint Currently_Selected_Event  ;
-       gboolean Selected_Event ;
-       guint Number_Of_Process;
-
-} ControlFlowData ;
-
-
-/** Array containing instanced objects. Used when module is unloaded */
-static GSList *sControl_Flow_Data_List = NULL ;
-
-
 /**
  * Control Flow Viewer's constructor
  *
@@ -61,12 +26,15 @@ 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(Control_Flow_Data);
+       
+       Drawing_Widget = 
+               Drawing_getWidget(Control_Flow_Data->Drawing);
        
        /* TEST DATA, TO BE READ FROM THE TRACE */
        Control_Flow_Data->Number_Of_Events = 1000 ;
@@ -79,19 +47,19 @@ GuiControlFlow(void)
 
 
        /* 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 = 
@@ -102,7 +70,6 @@ GuiControlFlow(void)
                                                        0.0,    /* Page inc. */
                                                        0.0));  /* page size */
        
-
        Control_Flow_Data->Scrolled_Window_VC =
                        gtk_scrolled_window_new (NULL,
                        Control_Flow_Data->VAdjust_C);
@@ -137,36 +104,78 @@ GuiControlFlow(void)
        //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);
                        
+       gControl_Flow_Data_List = g_slist_append(
+                       gControl_Flow_Data_List,
+                       Control_Flow_Data);
+
+       //WARNING : The widget must be 
+       //inserted in the main window before the Drawing area
+       //can be configured (and this must happend bedore sending
+       //data)
 
        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);
+       UnregUpdateTimeWindow(Update_Time_Window_Hook,
+                               Control_Flow_Data,
+                               Control_Flow_Data->Scrolled_Window_VC->parent);
        
-       g_slist_remove(sControl_Flow_Data_List,Control_Flow_Data);
+       UnregUpdateCurrentTime(Update_Current_Time_Hook,
+                               Control_Flow_Data,
+                               Control_Flow_Data->Scrolled_Window_VC->parent);
+       
+       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 ;
+}
+
+ProcessList *GuiControlFlow_get_Process_List
+               (ControlFlowData *Control_Flow_Data)
+{
+               return Control_Flow_Data->Process_List ;
+}
+
+TimeWindow *GuiControlFlow_get_Time_Window(ControlFlowData *Control_Flow_Data)
+{
+       return &Control_Flow_Data->Time_Window;
+}
+LttTime *GuiControlFlow_get_Current_Time(ControlFlowData *Control_Flow_Data)
+{
+       return &Control_Flow_Data->Current_Time;
+}
 
 
This page took 0.026309 seconds and 4 git commands to generate.