unref attribute should work better
[lttv.git] / ltt / branches / poly / lttv / modules / gui / lttvwindow / lttvwindow / callbacks.c
index c6f574d498c38832ec7c0afb93abf018dcbd4f04..3b0aad1c1b6a2e3cf8d08086cab68ca3e513ea0b 100644 (file)
@@ -435,8 +435,6 @@ gboolean lttvwindow_process_pending_requests(Tab *tab)
   LttvTracesetContextPosition *end_position;
     
   
-  /* Current tab check : if no current tab is present, no hooks to call. */
-  /* (Xang Xiu) It makes the expose works..  MD:? */
   if(tab == NULL)
     return FALSE;
 
@@ -1074,13 +1072,17 @@ void add_trace(GtkWidget * widget, gpointer user_data)
       trace_v = lttvwindowtraces_get_trace_by_name(abs_path);
       if(trace_v == NULL) {
         trace = ltt_trace_open(abs_path);
-        if(trace == NULL) g_critical("cannot open trace %s", abs_path);
-        trace_v = lttv_trace_new(trace);
-        lttvwindowtraces_add_trace(trace_v);
+        if(trace == NULL) {
+          g_warning("cannot open trace %s", abs_path);
+        } else {
+          trace_v = lttv_trace_new(trace);
+          lttvwindowtraces_add_trace(trace_v);
+          lttvwindow_add_trace(tab, trace_v);
+        }
+      } else {
+        lttvwindow_add_trace(tab, trace_v);
       }
 
-      lttvwindow_add_trace(tab, trace_v);
-
       gtk_widget_destroy((GtkWidget*)file_selector);
       
       //update current tab
@@ -1270,6 +1272,84 @@ void remove_trace(GtkWidget * widget, gpointer user_data)
 }
 
 
+/* Redraw all the viewers in the current tab */
+void redraw(GtkWidget *widget, gpointer user_data)
+{
+  GtkWidget * notebook = lookup_widget(widget, "MNotebook");
+  GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
+                      gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
+  Tab *tab;
+  if(!page) {
+    return;
+  } else {
+    tab = (Tab *)g_object_get_data(G_OBJECT(page), "Tab_Info");
+  }
+
+  LttvHooks * tmp;
+  LttvAttributeValue value;
+
+  g_assert(lttv_iattribute_find_by_path(tab->attributes, "hooks/redraw", LTTV_POINTER, &value));
+
+  tmp = (LttvHooks*)*(value.v_pointer);
+  if(tmp != NULL)
+    lttv_hooks_call(tmp,NULL);
+}
+
+
+void continue_processing(GtkWidget *widget, gpointer user_data)
+{
+  GtkWidget * notebook = lookup_widget(widget, "MNotebook");
+  GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
+                      gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
+  Tab *tab;
+  if(!page) {
+    return;
+  } else {
+    tab = (Tab *)g_object_get_data(G_OBJECT(page), "Tab_Info");
+  }
+
+  LttvHooks * tmp;
+  LttvAttributeValue value;
+
+  g_assert(lttv_iattribute_find_by_path(tab->attributes,
+     "hooks/continue", LTTV_POINTER, &value));
+
+  tmp = (LttvHooks*)*(value.v_pointer);
+  if(tmp != NULL)
+    lttv_hooks_call(tmp,NULL);
+}
+
+/* Stop the processing for the calling main window's current tab.
+ * It removes every processing requests that are in its list. It does not call
+ * the end request hooks, because the request is not finished.
+ */
+
+void stop_processing(GtkWidget *widget, gpointer user_data)
+{
+  GtkWidget * notebook = lookup_widget(widget, "MNotebook");
+  GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
+                      gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
+  Tab *tab;
+  if(!page) {
+    return;
+  } else {
+    tab = (Tab *)g_object_get_data(G_OBJECT(page), "Tab_Info");
+  }
+  GSList *events_requests = tab->events_requests;
+
+  GSList *iter = events_requests;
+  
+  while(iter != NULL) {
+    GSList *remove_iter = iter;
+    iter = g_slist_next(iter);
+    
+    g_free(remove_iter->data);
+    events_requests = g_slist_remove_link(events_requests, remove_iter);
+  }
+  g_assert(g_slist_length(events_requests) == 0);
+}
+
+
 /* save will save the traceset to a file
  * Not implemented yet FIXME
  */
@@ -1330,7 +1410,6 @@ void zoom(GtkWidget * widget, double size)
     else
     {
       /* Center the image on the current time */
-      g_critical("update is HERE");
       new_time_window.start_time = 
         ltt_time_sub(current_time, ltt_time_div(new_time_window.time_width, 2.0));
       /* If on borders, don't fall off */
@@ -1478,14 +1557,14 @@ on_close_activate                      (GtkMenuItem     *menuitem,
  */
 
 void
-on_close_tab_activate                  (GtkMenuItem     *menuitem,
+on_close_tab_activate                  (GtkWidget       *widget,
                                         gpointer         user_data)
 {
   gint page_num;
   GtkWidget * notebook;
   GtkWidget * page;
-  MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem);
-  notebook = lookup_widget((GtkWidget*)menuitem, "MNotebook");
+  MainWindow * mw_data = get_window_data_struct(widget);
+  notebook = lookup_widget(widget, "MNotebook");
   if(notebook == NULL){
     g_printf("Notebook does not exist\n");
     return;
@@ -1497,6 +1576,22 @@ on_close_tab_activate                  (GtkMenuItem     *menuitem,
 
 }
 
+void
+on_close_tab_X_clicked                 (GtkWidget       *widget,
+                                        gpointer         user_data)
+{
+  gint page_num;
+  GtkWidget *notebook = lookup_widget(widget, "MNotebook");
+  if(notebook == NULL){
+    g_printf("Notebook does not exist\n");
+    return;
+  }
+  if((page_num = gtk_notebook_page_num(GTK_NOTEBOOK(notebook), widget)) != -1)
+    gtk_notebook_remove_page(GTK_NOTEBOOK(notebook), page_num);
+
+}
+
 
 void
 on_add_trace_activate                  (GtkMenuItem     *menuitem,
@@ -1870,6 +1965,28 @@ on_button_remove_trace_clicked         (GtkButton       *button,
   remove_trace((GtkWidget*)button, user_data);
 }
 
+void
+on_button_redraw_clicked               (GtkButton       *button,
+                                        gpointer         user_data)
+{
+  redraw((GtkWidget*)button, user_data);
+}
+
+void
+on_button_continue_processing_clicked  (GtkButton       *button,
+                                        gpointer         user_data)
+{
+  continue_processing((GtkWidget*)button, user_data);
+}
+
+void
+on_button_stop_processing_clicked      (GtkButton       *button,
+                                        gpointer         user_data)
+{
+  stop_processing((GtkWidget*)button, user_data);
+}
+
+
 
 void
 on_button_save_clicked                 (GtkButton       *button,
@@ -2502,6 +2619,7 @@ void construct_main_window(MainWindow * parent)
     g_printf("Notebook does not exist\n");
     return;
   }
+  gtk_notebook_popup_enable (GTK_NOTEBOOK(notebook));
   //for now there is no name field in LttvTraceset structure
   //Use "Traceset" as the label for the default tab
   if(parent) {
@@ -2645,10 +2763,41 @@ Tab* create_tab(MainWindow * mw, Tab *copy_tab,
   tab->multi_vpaned = (GtkMultiVPaned*)gtk_multi_vpaned_new();
   gtk_widget_show((GtkWidget*)tab->multi_vpaned);
   tab->mw   = mw;
+  
+  /*{
+    // Display a label with a X
+    GtkWidget *w_hbox = gtk_hbox_new(FALSE, 4);
+    GtkWidget *w_label = gtk_label_new (label);
+    GtkWidget *pixmap = create_pixmap(GTK_WIDGET(notebook), "close.png");
+    GtkWidget *w_button = gtk_button_new ();
+    gtk_container_add(GTK_CONTAINER(w_button), pixmap);
+    //GtkWidget *w_button = gtk_button_new_with_label("x");
+
+    gtk_button_set_relief(GTK_BUTTON(w_button), GTK_RELIEF_NONE);
+    
+    gtk_box_pack_start(GTK_BOX(w_hbox), w_label, TRUE, TRUE, 0);
+    gtk_box_pack_end(GTK_BOX(w_hbox), w_button, FALSE,
+                       FALSE, 0);
+
+    g_signal_connect_swapped (w_button, "clicked",
+                      G_CALLBACK (on_close_tab_X_clicked),
+                      tab->multi_vpaned);
+
+    gtk_widget_set_state(w_button, GTK_STATE_ACTIVE);
+
+    gtk_widget_show (w_label);
+    gtk_widget_show (pixmap);
+    gtk_widget_show (w_button);
+    gtk_widget_show (w_hbox);
+
+    tab->label = w_hbox;
+  }*/
+
 
   tab->label = gtk_label_new (label);
   gtk_widget_show (tab->label);
 
+
   /* Start with empty events requests list */
   tab->events_requests = NULL;
   tab->events_request_pending = FALSE;
This page took 0.0515 seconds and 4 git commands to generate.