git-svn-id: http://ltt.polymtl.ca/svn@280 04897980-b3bd-0310-b5e0-8ef037075253
[lttv.git] / ltt / branches / poly / lttv / modules / guiEvents.c
index 00f694e8c2744e85c846614d4fa52bb11e993831..0d3b9bc9f1f2a7193d0877c9f25353d0aa6b9132 100644 (file)
@@ -134,6 +134,7 @@ GtkWidget *hGuiEvents(mainWindow *pmParentWindow);
 EventViewerData *GuiEvents(mainWindow *pmParentWindow);
 //! Event Viewer's destructor
 void GuiEvents_Destructor(EventViewerData *Event_Viewer_Data);
+void GuiEvents_free(EventViewerData *Event_Viewer_Data);
 
 static int Event_Selected_Hook(void *hook_data, void *call_data);
 
@@ -159,13 +160,24 @@ static void get_events(EventViewerData* Event_Viewer_Data, LttTime start,
                       LttTime end, unsigned maxNumEvents, unsigned * realNumEvent);
 static gboolean parse_event(void *hook_data, void *call_data);
 
+static LttvModule *Main_Win_Module;
+
 /**
  * plugin's init function
  *
  * This function initializes the Event Viewer functionnality through the
  * gtkTraceSet API.
  */
-G_MODULE_EXPORT void init() {
+G_MODULE_EXPORT void init(LttvModule *self, int argc, char *argv[]) {
+
+       Main_Win_Module = lttv_module_require(self, "mainwin", argc, argv);
+       
+       if(Main_Win_Module == NULL)
+       {
+         g_critical("Can't load Control Flow Viewer : missing mainwin\n");
+         return;
+       }
+       
 
   g_critical("GUI Event Viewer init()");
   
@@ -196,7 +208,9 @@ G_MODULE_EXPORT void destroy() {
   g_critical("GUI Event Viewer destroy()");
 
   g_slist_foreach(sEvent_Viewer_Data_List, destroy_walk, NULL );
-       
+
+  g_slist_free(sEvent_Viewer_Data_List);
+
   /* Unregister the toolbar insert button */
   ToolbarItemUnreg(hGuiEvents);
        
@@ -231,7 +245,7 @@ hGuiEvents(mainWindow * pmParentWindow)
   EventViewerData* Event_Viewer_Data = GuiEvents(pmParentWindow) ;
 
   if(Event_Viewer_Data)
-    return Event_Viewer_Data->HBox_V ;
+    return Event_Viewer_Data->HBox_V;
   else return NULL;
        
 }
@@ -276,13 +290,14 @@ GuiEvents(mainWindow *pmParentWindow)
   Event_Viewer_Data->Selected_Event = 0;
 
   /* Create a model for storing the data list */
-  Event_Viewer_Data->Store_M = gtk_list_store_new (N_COLUMNS,       /* Total number of columns */
-                                                  G_TYPE_INT,      /* CPUID                  */
-                                                  G_TYPE_STRING,   /* Event                   */
-                                                  G_TYPE_UINT64,      /* Time                    */
-                                                  G_TYPE_INT,      /* PID                     */
-                                                  G_TYPE_INT,      /* Entry length            */
-                                                  G_TYPE_STRING);  /* Event's description     */
+  Event_Viewer_Data->Store_M = gtk_list_store_new (
+               N_COLUMNS,      /* Total number of columns */
+               G_TYPE_INT,     /* CPUID                  */
+               G_TYPE_STRING,  /* Event                   */
+               G_TYPE_UINT64,  /* Time                    */
+               G_TYPE_INT,     /* PID                     */
+               G_TYPE_INT,     /* Entry length            */
+               G_TYPE_STRING); /* Event's description     */
        
   /* Create the viewer widget for the columned list */
   Event_Viewer_Data->Tree_V = gtk_tree_view_new_with_model (GTK_TREE_MODEL (Event_Viewer_Data->Store_M));
@@ -446,6 +461,13 @@ GuiEvents(mainWindow *pmParentWindow)
 
   /* Set the Selected Event */
   //  Tree_V_set_cursor(Event_Viewer_Data);
+
+
+  g_object_set_data_full(
+                       G_OBJECT(Event_Viewer_Data->HBox_V),
+                       "Event_Viewer_Data",
+                       Event_Viewer_Data,
+                       (GDestroyNotify)GuiEvents_free);
   
   return Event_Viewer_Data;
 }
@@ -949,8 +971,10 @@ void get_test_data(double time_value, guint List_Height,
            get_events(Event_Viewer_Data, start, end, maxNum, &size);
            Event_Viewer_Data->start_event_index = Event_Viewer_Data->current_event_index;
          }
+         Event_Number = Event_Viewer_Data->raw_trace_data_queue->length - List_Height;
+       }else{
+         Event_Number = 0;
        }
-       Event_Number = Event_Viewer_Data->raw_trace_data_queue->length - List_Height;
        break;
       case SCROLL_NONE:
        Event_Number = Event_Viewer_Data->current_event_index;
@@ -1100,6 +1124,23 @@ void add_test_data(EventViewerData *Event_Viewer_Data)
   
 }
        
+void
+GuiEvents_free(EventViewerData *Event_Viewer_Data)
+{
+  lttv_hooks_remove(Event_Viewer_Data->before_event_hooks,parse_event);
+  lttv_hooks_destroy(Event_Viewer_Data->before_event_hooks);
+  
+  remove_all_items_from_queue (Event_Viewer_Data->raw_trace_data_queue);
+  g_queue_free(Event_Viewer_Data->raw_trace_data_queue);
+  g_queue_free(Event_Viewer_Data->raw_trace_data_queue_tmp);
+
+  UnregUpdateTimeInterval(updateTimeInterval,Event_Viewer_Data, Event_Viewer_Data->mw);
+  UnregUpdateCurrentTime(updateCurrentTime,Event_Viewer_Data, Event_Viewer_Data->mw);
+
+  sEvent_Viewer_Data_List = g_slist_remove(sEvent_Viewer_Data_List, Event_Viewer_Data);
+  g_warning("Delete Event data\n");
+  g_free(Event_Viewer_Data);
+}
 
 void
 GuiEvents_Destructor(EventViewerData *Event_Viewer_Data)
@@ -1117,8 +1158,8 @@ GuiEvents_Destructor(EventViewerData *Event_Viewer_Data)
   //gtk_list_store_clear(Event_Viewer_Data->Store_M);
   //gtk_widget_destroy(GTK_WIDGET(Event_Viewer_Data->Store_M));
   
-  g_slist_remove(sEvent_Viewer_Data_List,Event_Viewer_Data);
-  g_free(Event_Viewer_Data);
+  g_warning("Delete Event data from destroy\n");
+  GuiEvents_free(Event_Viewer_Data);
 }
 
 //FIXME : call hGuiEvents_Destructor for corresponding data upon widget destroy
@@ -1191,7 +1232,7 @@ gboolean updateCurrentTime(void * hook_data, void * call_data)
     }
     //    Event_Selected_Hook(Event_Viewer_Data, &count);
   }
-  
+
   return FALSE;
 }
 
@@ -1465,6 +1506,8 @@ void remove_all_items_from_queue(GQueue *q)
 
 
 
+
+
 /* Imported code from LTT 0.9.6pre2 tracevisualizer */
 #ifdef DEBUG
 
This page took 0.024318 seconds and 4 git commands to generate.