Remove warnings reintroduced by the timebar patch
[lttv.git] / lttv / modules / gui / lttvwindow / lttvwindow / callbacks.c
index 5ce1f9251bb6f34b9d02c3805ffc3fad1b5e24d1..d2e397f3b2df6598a3fbfbe234255ceae0c81ebf 100644 (file)
 #include <lttv/iattribute.h>
 #include <lttv/stats.h>
 #include <lttv/filter.h>
+#include <lttv/sync/sync_chain_lttv.h>
 #include <lttvwindow/mainwindow.h>
 #include <lttvwindow/mainwindow-private.h>
 #include <lttvwindow/menu.h>
+#include <lttvwindow/timebar.h>
 #include <lttvwindow/toolbar.h>
 #include <lttvwindow/lttvwindow.h>
 #include <lttvwindow/lttvwindowtraces.h>
@@ -79,6 +81,13 @@ LttvPluginTab *create_new_tab(GtkWidget* widget, gpointer user_data);
 
 static gboolean lttvwindow_process_pending_requests(Tab *tab);
 
+static void on_timebar_starttime_changed(Timebar *timebar,
+                               gpointer user_data);
+static void on_timebar_endtime_changed(Timebar *timebar,
+                               gpointer user_data);
+static void on_timebar_currenttime_changed(Timebar *timebar,
+                               gpointer user_data);
+
 enum {
   CHECKBOX_COLUMN,
   NAME_COLUMN,
@@ -91,262 +100,7 @@ enum
   N_COLUMNS
 };
 
-/* Pasting routines */
-
-static void MEventBox1a_receive(GtkClipboard *clipboard,
-                          const gchar *text,
-                          gpointer data)
-{
-  if(text == NULL) return;
-  Tab *tab = (Tab *)data;
-  gchar buffer[CLIP_BUF];
-  gchar *ptr = buffer, *ptr_ssec, *ptr_snsec, *ptr_esec, *ptr_ensec;
-
-  strncpy(buffer, text, CLIP_BUF);
-  /* start */
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_ssec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-  ptr++;
-
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_snsec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-
-  /* end */ 
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_esec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-  ptr++;
-
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_ensec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry1),
-                            (double)strtoul(ptr_ssec, NULL, 10));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry2),
-                            (double)strtoul(ptr_snsec, NULL, 10));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry3),
-                            (double)strtoul(ptr_esec, NULL, 10));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry4),
-                            (double)strtoul(ptr_ensec, NULL, 10));
-}
-
-static gboolean on_MEventBox1a_paste(GtkWidget *widget, GdkEventButton *event,
-                                gpointer data)
-{
-  Tab *tab = (Tab*)data;
-
-  GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(),
-                                                     GDK_SELECTION_PRIMARY);
-  gtk_clipboard_request_text(clip,
-                             (GtkClipboardTextReceivedFunc)MEventBox1a_receive,
-                             (gpointer)tab);
-  return 0;
-}
-
-
-/* Start */
-static void MEventBox1b_receive(GtkClipboard *clipboard,
-                          const gchar *text,
-                          gpointer data)
-{
-  if(text == NULL) return;
-  Tab *tab = (Tab *)data;
-  gchar buffer[CLIP_BUF];
-  gchar *ptr = buffer, *ptr_sec, *ptr_nsec;
-
-  strncpy(buffer, text, CLIP_BUF);
-  
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_sec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-  ptr++;
-
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_nsec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry1),
-                            (double)strtoul(ptr_sec, NULL, 10));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry2),
-                            (double)strtoul(ptr_nsec, NULL, 10));
-}
-
-/* Start */
-static gboolean on_MEventBox1b_paste(GtkWidget *widget, GdkEventButton *event,
-                                gpointer data)
-{
-  Tab *tab = (Tab*)data;
-
-  GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(),
-                                                     GDK_SELECTION_PRIMARY);
-  gtk_clipboard_request_text(clip,
-                             (GtkClipboardTextReceivedFunc)MEventBox1b_receive,
-                             (gpointer)tab);
-  return 0;
-}
-
-/* End */
-static void MEventBox3b_receive(GtkClipboard *clipboard,
-                          const gchar *text,
-                          gpointer data)
-{
-  if(text == NULL) return;
-  Tab *tab = (Tab *)data;
-  gchar buffer[CLIP_BUF];
-  gchar *ptr = buffer, *ptr_sec, *ptr_nsec;
-
-  strncpy(buffer, text, CLIP_BUF);
-  
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_sec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-  ptr++;
-
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_nsec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry3),
-                            (double)strtoul(ptr_sec, NULL, 10));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry4),
-                            (double)strtoul(ptr_nsec, NULL, 10));
-}
-
-/* End */
-static gboolean on_MEventBox3b_paste(GtkWidget *widget, GdkEventButton *event,
-                                gpointer data)
-{
-  Tab *tab = (Tab*)data;
-
-  GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(),
-                                                     GDK_SELECTION_PRIMARY);
-  gtk_clipboard_request_text(clip,
-                             (GtkClipboardTextReceivedFunc)MEventBox3b_receive,
-                             (gpointer)tab);
-  return 0;
-}
-
-/* Current */
-static void MEventBox5b_receive(GtkClipboard *clipboard,
-                          const gchar *text,
-                          gpointer data)
-{
-  if(text == NULL) return;
-  Tab *tab = (Tab *)data;
-  gchar buffer[CLIP_BUF];
-  gchar *ptr = buffer, *ptr_sec, *ptr_nsec;
-
-  strncpy(buffer, text, CLIP_BUF);
-  
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_sec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-  ptr++;
-
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_nsec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry5),
-                            (double)strtoul(ptr_sec, NULL, 10));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry6),
-                            (double)strtoul(ptr_nsec, NULL, 10));
-}
-
-/* Current */
-static gboolean on_MEventBox5b_paste(GtkWidget *widget, GdkEventButton *event,
-                                gpointer data)
-{
-  Tab *tab = (Tab*)data;
-
-  GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(),
-                                                     GDK_SELECTION_PRIMARY);
-  gtk_clipboard_request_text(clip,
-                             (GtkClipboardTextReceivedFunc)MEventBox5b_receive,
-                             (gpointer)tab);
-  return 0;
-}
-
-/* Interval */
-static void MEventBox8_receive(GtkClipboard *clipboard,
-                          const gchar *text,
-                          gpointer data)
-{
-  if(text == NULL) return;
-  Tab *tab = (Tab *)data;
-  gchar buffer[CLIP_BUF];
-  gchar *ptr = buffer, *ptr_sec, *ptr_nsec;
 
-  strncpy(buffer, text, CLIP_BUF);
-  
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_sec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-  ptr++;
-
-  while(!isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                       /* remove leading junk */
-  ptr_nsec = ptr;
-  while(isdigit(*ptr) && ptr < buffer+CLIP_BUF-1) ptr++;
-                                                 /* read all the first number */
-  *ptr = '\0';
-
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry7),
-                            (double)strtoul(ptr_sec, NULL, 10));
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry8),
-                            (double)strtoul(ptr_nsec, NULL, 10));
-}
-
-/* Interval */
-static gboolean on_MEventBox8_paste(GtkWidget *widget, GdkEventButton *event,
-                                gpointer data)
-{
-  Tab *tab = (Tab*)data;
-
-  GtkClipboard *clip = gtk_clipboard_get_for_display(gdk_display_get_default(),
-                                                     GDK_SELECTION_PRIMARY);
-  gtk_clipboard_request_text(clip,
-                             (GtkClipboardTextReceivedFunc)MEventBox8_receive,
-                             (gpointer)tab);
-  return 0;
-}
 
 #if 0
 static void on_top_notify(GObject    *gobject,
@@ -417,10 +171,8 @@ insert_viewer_wrap(GtkWidget *menuitem, gpointer user_data)
 void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor)
 {
   GtkWidget * viewer_container;
-  MainWindow * mw_data = get_window_data_struct(widget);
   GtkWidget * notebook = lookup_widget(widget, "MNotebook");
   GtkWidget * viewer;
-  TimeInterval * time_interval;
   GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
                       gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
   LttvPluginTab *ptab;
@@ -435,7 +187,7 @@ void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor)
 
   viewer_container = tab->viewer_container;
 
-  viewer = (GtkWidget*)constructor(ptab);
+  viewer = (GtkWidget*)constructor(&ptab->parent);
   if(viewer)
   {
     //gtk_multivpaned_widget_add(GTK_MULTIVPANED(multivpaned), viewer); 
@@ -465,13 +217,66 @@ void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor)
 
 int SetTraceset(Tab * tab, LttvTraceset *traceset)
 {
+  guint i;
+  TimeInterval time_span;
+  TimeWindow new_time_window;
+  LttTime new_current_time;
   LttvTracesetContext *tsc =
-        LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
+    LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
 
-  sync_traceset(tsc);
-  TimeInterval time_span = tsc->time_span;
-  TimeWindow new_time_window = tab->time_window;
-  LttTime new_current_time = tab->current_time;
+  // Perform time synchronization on the traces
+  if (syncTraceset(tsc))
+  {
+    /* There is some time-dependant information that was calculated during
+     * context initialization. Destroy the old contexts and initialize new
+     * ones.
+     * Modified from lttvwindow_add_trace()
+    */
+    // Keep a reference to the traces so they are not freed
+    for(i = 0; i < lttv_traceset_number(traceset); i++)
+    {
+      LttvTrace *trace = lttv_traceset_get(traceset, i);
+      lttv_trace_ref(trace);
+    }
+
+    // Remove state update hooks
+    lttv_state_remove_event_hooks(
+      (LttvTracesetState*)tab->traceset_info->traceset_context);
+
+    lttv_context_fini(LTTV_TRACESET_CONTEXT(
+        tab->traceset_info->traceset_context));
+    g_object_unref(tab->traceset_info->traceset_context);
+
+    for(i = 0; i < lttv_traceset_number(traceset); i++)
+    {
+      LttvTrace *trace = lttv_traceset_get(traceset, i);
+      lttvwindowtraces_remove_trace(trace);
+      lttvwindowtraces_add_trace(trace);
+    }
+
+    // Create new context
+    tab->traceset_info->traceset_context =
+      g_object_new(LTTV_TRACESET_STATS_TYPE, NULL);
+    lttv_context_init(LTTV_TRACESET_CONTEXT(tab->traceset_info->
+        traceset_context), traceset);
+
+    // Add state update hooks
+    lttv_state_add_event_hooks(
+      (LttvTracesetState*)tab->traceset_info->traceset_context);
+
+    // Remove local reference to the traces
+    for(i=0; i<lttv_traceset_number(traceset); i++)
+    {
+      LttvTrace *trace = lttv_traceset_get(traceset, i);
+      lttv_trace_unref(trace);
+    }
+
+    tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
+  }
+
+  time_span = tsc->time_span;
+  new_time_window = tab->time_window;
+  new_current_time = tab->current_time;
 
   /* Set the tab's time window and current time if
    * out of bounds */
@@ -760,7 +565,6 @@ gint viewer_container_position(GtkWidget *container, GtkWidget *child)
 
 void move_down_viewer(GtkWidget * widget, gpointer user_data)
 {
-  MainWindow * mw = get_window_data_struct(widget);
   GtkWidget * notebook = lookup_widget(widget, "MNotebook");
 
   GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
@@ -794,7 +598,6 @@ void move_down_viewer(GtkWidget * widget, gpointer user_data)
 
 void move_up_viewer(GtkWidget * widget, gpointer user_data)
 {
-  MainWindow * mw = get_window_data_struct(widget);
   GtkWidget * notebook = lookup_widget(widget, "MNotebook");
 
   GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
@@ -835,7 +638,6 @@ void move_up_viewer(GtkWidget * widget, gpointer user_data)
 
 void delete_viewer(GtkWidget * widget, gpointer user_data)
 {
-  MainWindow * mw = get_window_data_struct(widget);
   GtkWidget * notebook = lookup_widget(widget, "MNotebook");
 
   GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
@@ -929,7 +731,6 @@ void open_traceset(GtkWidget * widget, gpointer user_data)
 
 gboolean lttvwindow_process_pending_requests(Tab *tab)
 {
-  GtkWidget* widget;
   LttvTracesetContext *tsc;
   LttvTracefileContext *tfc;
   GSList *list_in = NULL;
@@ -1791,25 +1592,29 @@ void add_trace(GtkWidget * widget, gpointer user_data)
     tab = ptab->tab;
   }
 
-  //GtkDirSelection * file_selector = (GtkDirSelection *)gtk_dir_selection_new("Select a trace");
-  GtkFileSelection * file_selector = (GtkFileSelection *)gtk_file_selection_new("Select a trace");
-  gtk_widget_hide( (file_selector)->file_list->parent) ;
-  gtk_file_selection_hide_fileop_buttons(file_selector);
-  gtk_window_set_transient_for(GTK_WINDOW(file_selector),
-      GTK_WINDOW(mw_data->mwindow));
-  
+  /* File open dialog management */
+  GtkFileChooser * file_chooser = 
+         GTK_FILE_CHOOSER(
+                 gtk_file_chooser_dialog_new ("Select a trace",
+                                         GTK_WINDOW(mw_data->mwindow),
+                                         GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                         GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                                         NULL));
+
+  gtk_file_chooser_set_show_hidden (file_chooser, TRUE);
   if(remember_trace_dir[0] != '\0')
-    gtk_file_selection_set_filename(file_selector, remember_trace_dir);
-  
-  id = gtk_dialog_run(GTK_DIALOG(file_selector));
+         gtk_file_chooser_set_filename(file_chooser, remember_trace_dir);
+
+  id = gtk_dialog_run(GTK_DIALOG(file_chooser));
+
   switch(id){
     case GTK_RESPONSE_ACCEPT:
     case GTK_RESPONSE_OK:
-      dir = gtk_file_selection_get_filename (file_selector);
+      dir = gtk_file_chooser_get_filename (file_chooser);
       strncpy(remember_trace_dir, dir, PATH_MAX);
       strncat(remember_trace_dir, "/", PATH_MAX);
       if(!dir || strlen(dir) == 0){
-       gtk_widget_destroy((GtkWidget*)file_selector);
        break;
       }
       get_absolute_pathname(dir, abs_path);
@@ -1839,7 +1644,6 @@ void add_trace(GtkWidget * widget, gpointer user_data)
         lttvwindow_add_trace(tab, trace_v);
       }
 
-      gtk_widget_destroy((GtkWidget*)file_selector);
       
       //update current tab
       //update_traceset(mw_data);
@@ -1855,9 +1659,10 @@ void add_trace(GtkWidget * widget, gpointer user_data)
     case GTK_RESPONSE_REJECT:
     case GTK_RESPONSE_CANCEL:
     default:
-      gtk_widget_destroy((GtkWidget*)file_selector);
-      break;
+           break;
   }
+  gtk_widget_destroy((GtkWidget*)file_chooser);
+
 }
 
 /* remove_trace removes a trace from the current traceset if all viewers in 
@@ -1899,7 +1704,7 @@ void remove_trace(GtkWidget *widget, gpointer user_data)
   for(i = 0; i < nb_trace; i++){
     trace_v = lttv_traceset_get(tab->traceset_info->traceset, i);
     trace = lttv_trace(trace_v);
-    name[i] = g_quark_to_string(ltt_trace_name(trace));
+    name[i] = (char *) g_quark_to_string(ltt_trace_name(trace));
   }
 
   remove_trace_name = get_remove_trace(mw_data, name, nb_trace);
@@ -2217,7 +2022,6 @@ void zoom(GtkWidget * widget, double size)
   TimeInterval time_span;
   TimeWindow new_time_window;
   LttTime    current_time, time_delta;
-  MainWindow * mw_data = get_window_data_struct(widget);
   LttvTracesetContext *tsc;
   GtkWidget * notebook = lookup_widget(widget, "MNotebook");
 
@@ -2420,8 +2224,6 @@ on_close_tab_activate                  (GtkWidget       *widget,
 {
   gint page_num;
   GtkWidget * notebook;
-  GtkWidget * page;
-  MainWindow * mw_data = get_window_data_struct(widget);
   notebook = lookup_widget(widget, "MNotebook");
   if(notebook == NULL){
     g_info("Notebook does not exist\n");
@@ -2908,7 +2710,6 @@ void
 on_unload_module_activate              (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
-  GError *error = NULL;
   MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem);
 
   LttvLibrary *library = NULL;
@@ -3038,7 +2839,6 @@ on_remove_library_search_path_activate     (GtkMenuItem     *menuitem,
   {
     GPtrArray *name;
     guint nb,i;
-    gchar *lib_name;
     name = g_ptr_array_new();
     nb = lttv_library_path_number();
     /* ask for the library name */
@@ -3349,8 +3149,6 @@ on_MWindow_configure                   (GtkWidget         *widget,
                                         GdkEventConfigure *event,
                                         gpointer           user_data)
 {
-  MainWindow * mw_data = get_window_data_struct((GtkWidget*)widget);
-       
        // MD : removed time width modification upon resizing of the main window.
        // The viewers will redraw themselves completely, without time interval
        // modification.
@@ -3398,7 +3196,6 @@ void time_change_manager               (Tab *tab,
   TimeInterval time_span = tsc->time_span;
   LttTime start_time = new_time_window.start_time;
   LttTime end_time = new_time_window.end_time;
-  LttTime time_width = new_time_window.time_width;
 
   g_assert(ltt_time_compare(start_time, end_time) < 0);
   
@@ -3445,432 +3242,23 @@ void time_change_manager               (Tab *tab,
                 ltt_time_sub(start_time, time_span.start_time)) /* value */);
 
   /* set the time bar. */
-  /* start seconds */
-  gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry1),
-                            (double)time_span.start_time.tv_sec,
-                            (double)time_span.end_time.tv_sec);
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry1),
-                            (double)start_time.tv_sec);
-
-  /* start nanoseconds */
-  if(start_time.tv_sec == time_span.start_time.tv_sec) {
-    /* can be both beginning and end at the same time. */
-    if(start_time.tv_sec == time_span.end_time.tv_sec) {
-      /* If we are at the end, max nsec to end..  -1 (not zero length) */
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
-                                (double)time_span.start_time.tv_nsec,
-                                (double)time_span.end_time.tv_nsec-1);
-    } else {
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
-                                (double)time_span.start_time.tv_nsec,
-                                (double)NANOSECONDS_PER_SECOND-1);
-    }
-  } else if(start_time.tv_sec == time_span.end_time.tv_sec) {
-      /* If we are at the end, max nsec to end..  -1 (not zero length) */
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
-                                0.0,
-                                (double)time_span.end_time.tv_nsec-1);
-  } else /* anywhere else */
-    gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry2),
-                              0.0,
-                              (double)NANOSECONDS_PER_SECOND-1);
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry2),
-                            (double)start_time.tv_nsec);
-
-  /* end seconds */
-  gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry3),
-                            (double)time_span.start_time.tv_sec,
-                            (double)time_span.end_time.tv_sec);
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry3),
-                            (double)end_time.tv_sec);
-
-  /* end nanoseconds */
-  if(end_time.tv_sec == time_span.start_time.tv_sec) {
-    /* can be both beginning and end at the same time. */
-    if(end_time.tv_sec == time_span.end_time.tv_sec) {
-      /* If we are at the end, max nsec to end.. */
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4),
-                                (double)time_span.start_time.tv_nsec+1,
-                                (double)time_span.end_time.tv_nsec);
-    } else {
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4),
-                                (double)time_span.start_time.tv_nsec+1,
-                                (double)NANOSECONDS_PER_SECOND-1);
-    }
-  }
-  else if(end_time.tv_sec == time_span.end_time.tv_sec) {
-    /* If we are at the end, max nsec to end.. */
-    gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4),
-                              0.0,
-                              (double)time_span.end_time.tv_nsec);
-  }
-  else /* anywhere else */
-    gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry4),
-                              0.0,
-                              (double)NANOSECONDS_PER_SECOND-1);
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry4),
-                            (double)end_time.tv_nsec);
-
-  /* width seconds */
-  if(time_width.tv_nsec == 0) {
-    gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry7),
-                              (double)1,
-                              (double)upper.tv_sec);
-  } else {
-    gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry7),
-                              (double)0,
-                              (double)upper.tv_sec);
-  }
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry7),
-                            (double)time_width.tv_sec);
-
-  /* width nanoseconds */
-  if(time_width.tv_sec == upper.tv_sec) {
-    if(time_width.tv_sec == 0) {
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry8),
-                                (double)1,
-                                (double)upper.tv_nsec);
-    } else {
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry8),
-                                (double)0,
-                                (double)upper.tv_nsec);
-    }
-  }
-  else if(time_width.tv_sec == 0) {
-    gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry8),
-                              1.0,
-                              (double)upper.tv_nsec);
-  }
-  else /* anywhere else */
-    gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry8),
-                              0.0,
-                              (double)NANOSECONDS_PER_SECOND-1);
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry8),
-                            (double)time_width.tv_nsec);
-
-  /* call viewer hooks for new time window */
-  set_time_window(tab, &new_time_window);
-
-  tab->time_manager_lock = FALSE;
-}
-
-
-/* value changed for frame start s
- *
- * Check time span : if ns is out of range, clip it the nearest good value.
- */
-void
-on_MEntry1_value_changed               (GtkSpinButton *spinbutton,
-                                        gpointer user_data)
-{
-  Tab *tab =(Tab *)user_data;
-  LttvTracesetContext * tsc = 
-    LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
-  gint value = gtk_spin_button_get_value_as_int(spinbutton);
-
-  TimeWindow new_time_window = tab->time_window;
-  LttTime end_time = new_time_window.end_time;
-
-  new_time_window.start_time.tv_sec = value;
-
-  /* start nanoseconds */
-  if(new_time_window.start_time.tv_sec == time_span.start_time.tv_sec) {
-    if(new_time_window.start_time.tv_sec == time_span.end_time.tv_sec) {
-      if(new_time_window.start_time.tv_nsec > time_span.end_time.tv_nsec)
-        new_time_window.start_time.tv_nsec = time_span.end_time.tv_nsec-1;
-      if(new_time_window.start_time.tv_nsec < time_span.start_time.tv_nsec)
-        new_time_window.start_time.tv_nsec = time_span.start_time.tv_nsec;
-    } else {
-      if(new_time_window.start_time.tv_nsec < time_span.start_time.tv_nsec)
-        new_time_window.start_time.tv_nsec = time_span.start_time.tv_nsec;
-    }
-  }
-  else if(new_time_window.start_time.tv_sec == time_span.end_time.tv_sec) {
-    if(new_time_window.start_time.tv_nsec > time_span.end_time.tv_nsec)
-      new_time_window.start_time.tv_nsec = time_span.end_time.tv_nsec-1;
-  }
-
-  if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
-    /* Then, we must push back end time : keep the same time width
-     * if possible, else end traceset time */
-    end_time = LTT_TIME_MIN(ltt_time_add(new_time_window.start_time,
-                                         new_time_window.time_width),
-                            time_span.end_time);
-  }
-
-  /* Fix the time width to fit start time and end time */
-  new_time_window.time_width = ltt_time_sub(end_time,
-                                            new_time_window.start_time);
-  new_time_window.time_width_double =
-              ltt_time_to_double(new_time_window.time_width);
-
-  new_time_window.end_time = end_time;
-
-  time_change_manager(tab, new_time_window);
-
-}
-
-void
-on_MEntry2_value_changed               (GtkSpinButton *spinbutton,
-                                        gpointer user_data)
-{
-  Tab *tab =(Tab *)user_data;
-  LttvTracesetContext * tsc = 
-    LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
-  gint value = gtk_spin_button_get_value_as_int(spinbutton);
 
-  TimeWindow new_time_window = tab->time_window;
-  LttTime end_time = new_time_window.end_time;
-
-  new_time_window.start_time.tv_nsec = value;
-
-  if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
-    /* Then, we must push back end time : keep the same time width
-     * if possible, else end traceset time */
-    end_time = LTT_TIME_MIN(ltt_time_add(new_time_window.start_time,
-                                         new_time_window.time_width),
-                            time_span.end_time);
-  }
-
-  /* Fix the time width to fit start time and end time */
-  new_time_window.time_width = ltt_time_sub(end_time,
-                                            new_time_window.start_time);
-  new_time_window.time_width_double =
-              ltt_time_to_double(new_time_window.time_width);
-
-  new_time_window.end_time = end_time;
-
-  time_change_manager(tab, new_time_window);
-
-}
-
-void
-on_MEntry3_value_changed               (GtkSpinButton *spinbutton,
-                                        gpointer user_data)
-{
-  Tab *tab =(Tab *)user_data;
-  LttvTracesetContext * tsc = 
-    LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
-  gint value = gtk_spin_button_get_value_as_int(spinbutton);
-
-  TimeWindow new_time_window = tab->time_window;
-  LttTime end_time = new_time_window.end_time;
-
-  end_time.tv_sec = value;
-
-  /* end nanoseconds */
-  if(end_time.tv_sec == time_span.start_time.tv_sec) {
-    if(end_time.tv_sec == time_span.end_time.tv_sec) {
-      if(end_time.tv_nsec > time_span.end_time.tv_nsec)
-        end_time.tv_nsec = time_span.end_time.tv_nsec;
-      if(end_time.tv_nsec < time_span.start_time.tv_nsec)
-        end_time.tv_nsec = time_span.start_time.tv_nsec+1;
-    } else {
-      if(end_time.tv_nsec < time_span.start_time.tv_nsec)
-        end_time.tv_nsec = time_span.start_time.tv_nsec+1;
-    }
-  }
-  else if(end_time.tv_sec == time_span.end_time.tv_sec) {
-    if(end_time.tv_nsec > time_span.end_time.tv_nsec)
-      end_time.tv_nsec = time_span.end_time.tv_nsec;
-  }
-
-  if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
-    /* Then, we must push front start time : keep the same time width
-     * if possible, else end traceset time */
-    new_time_window.start_time = LTT_TIME_MAX(
-                                  ltt_time_sub(end_time,
-                                               new_time_window.time_width),
-                                  time_span.start_time);
-  }
-
-  /* Fix the time width to fit start time and end time */
-  new_time_window.time_width = ltt_time_sub(end_time,
-                                            new_time_window.start_time);
-  new_time_window.time_width_double =
-              ltt_time_to_double(new_time_window.time_width);
-
-  new_time_window.end_time = end_time;
-  
-  time_change_manager(tab, new_time_window);
-
-}
-
-void
-on_MEntry4_value_changed               (GtkSpinButton *spinbutton,
-                                        gpointer user_data)
-{
-  Tab *tab =(Tab *)user_data;
-  LttvTracesetContext * tsc = 
-    LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
-  gint value = gtk_spin_button_get_value_as_int(spinbutton);
-
-  TimeWindow new_time_window = tab->time_window;
-  LttTime end_time = new_time_window.end_time;
 
-  end_time.tv_nsec = value;
+  timebar_set_minmax_time(TIMEBAR(tab->MTimebar),
+                         &time_span.start_time,
+                         &time_span.end_time );
+  timebar_set_start_time(TIMEBAR(tab->MTimebar),&start_time);
+  timebar_set_end_time(TIMEBAR(tab->MTimebar),&end_time);
 
-  if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
-    /* Then, we must push front start time : keep the same time width
-     * if possible, else end traceset time */
-    new_time_window.start_time = LTT_TIME_MAX(
-                                ltt_time_sub(end_time,
-                                             new_time_window.time_width),
-                                time_span.start_time);
-  }
 
-  /* Fix the time width to fit start time and end time */
-  new_time_window.time_width = ltt_time_sub(end_time,
-                                            new_time_window.start_time);
-  new_time_window.time_width_double =
-              ltt_time_to_double(new_time_window.time_width);
-  new_time_window.end_time = end_time;
 
-  time_change_manager(tab, new_time_window);
-
-}
-
-/* value changed for time frame interval s
- *
- * Check time span : if ns is out of range, clip it the nearest good value.
- */
-void
-on_MEntry7_value_changed               (GtkSpinButton *spinbutton,
-                                        gpointer user_data)
-{
-  Tab *tab =(Tab *)user_data;
-  LttvTracesetContext * tsc = 
-    LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
-  gint value = gtk_spin_button_get_value_as_int(spinbutton);
-  LttTime    current_time, time_delta;
-  TimeWindow new_time_window =  tab->time_window;
-  current_time = tab->current_time;
-  
-  time_delta = ltt_time_sub(time_span.end_time,time_span.start_time);
-  new_time_window.time_width.tv_sec = value;
-  new_time_window.time_width_double = 
-                 ltt_time_to_double(new_time_window.time_width);
-  if(ltt_time_compare(new_time_window.time_width,time_delta) > 0)
-  { /* Case where zoom out is bigger than trace length */
-    new_time_window.start_time = time_span.start_time;
-    new_time_window.time_width = time_delta;
-    new_time_window.time_width_double = ltt_time_to_double(time_delta);
-    new_time_window.end_time = ltt_time_add(new_time_window.start_time,
-                                          new_time_window.time_width) ;
-  }
-  else
-  {
-    /* Center the image on the current time */
-    new_time_window.start_time = 
-      ltt_time_sub(current_time,
-          ltt_time_from_double(new_time_window.time_width_double/2.0));
-    new_time_window.end_time = ltt_time_add(new_time_window.start_time,
-                                          new_time_window.time_width) ;
-    /* If on borders, don't fall off */
-    if(ltt_time_compare(new_time_window.start_time, time_span.start_time) <0
-     || ltt_time_compare(new_time_window.start_time, time_span.end_time) >0)
-    {
-      new_time_window.start_time = time_span.start_time;
-      new_time_window.end_time = ltt_time_add(new_time_window.start_time,
-                                          new_time_window.time_width) ;
-    }
-    else 
-    {
-      if(ltt_time_compare(new_time_window.end_time,
-                          time_span.end_time) > 0
-       || ltt_time_compare(new_time_window.end_time,
-                          time_span.start_time) < 0)
-      {
-        new_time_window.start_time = 
-                ltt_time_sub(time_span.end_time, new_time_window.time_width);
-
-        new_time_window.end_time = ltt_time_add(new_time_window.start_time,
-                                                new_time_window.time_width) ;
-      }
-    }
-    
-  }
+  /* call viewer hooks for new time window */
+  set_time_window(tab, &new_time_window);
 
-  if(ltt_time_compare(new_time_window.time_width, ltt_time_zero) == 0) {
-    g_warning("Zoom more than 1 ns impossible");
-  } else {
-   time_change_manager(tab, new_time_window);
-  }
+  tab->time_manager_lock = FALSE;
 }
 
-void
-on_MEntry8_value_changed               (GtkSpinButton *spinbutton,
-                                        gpointer user_data)
-{
-  Tab *tab =(Tab *)user_data;
-  LttvTracesetContext * tsc = 
-    LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
-  gint value = gtk_spin_button_get_value_as_int(spinbutton);
-  LttTime    current_time, time_delta;
-  TimeWindow new_time_window =  tab->time_window;
-  current_time = tab->current_time;
-  
-  time_delta = ltt_time_sub(time_span.end_time,time_span.start_time);
-  new_time_window.time_width.tv_nsec = value;
-  new_time_window.time_width_double = 
-                 ltt_time_to_double(new_time_window.time_width);
-  if(ltt_time_compare(new_time_window.time_width,time_delta) > 0)
-  { /* Case where zoom out is bigger than trace length */
-    new_time_window.start_time = time_span.start_time;
-    new_time_window.time_width = time_delta;
-    new_time_window.time_width_double = ltt_time_to_double(time_delta);
-    new_time_window.end_time = ltt_time_add(new_time_window.start_time,
-                                          new_time_window.time_width) ;
-  }
-  else
-  {
-    /* Center the image on the current time */
-    new_time_window.start_time = 
-      ltt_time_sub(current_time,
-          ltt_time_from_double(new_time_window.time_width_double/2.0));
-    new_time_window.end_time = ltt_time_add(new_time_window.start_time,
-                                          new_time_window.time_width) ;
-    /* If on borders, don't fall off */
-    if(ltt_time_compare(new_time_window.start_time, time_span.start_time) <0
-     || ltt_time_compare(new_time_window.start_time, time_span.end_time) >0)
-    {
-      new_time_window.start_time = time_span.start_time;
-      new_time_window.end_time = ltt_time_add(new_time_window.start_time,
-                                          new_time_window.time_width) ;
-    }
-    else 
-    {
-      if(ltt_time_compare(new_time_window.end_time,
-                          time_span.end_time) > 0
-       || ltt_time_compare(new_time_window.end_time,
-                          time_span.start_time) < 0)
-      {
-        new_time_window.start_time = 
-                ltt_time_sub(time_span.end_time, new_time_window.time_width);
-
-        new_time_window.end_time = ltt_time_add(new_time_window.start_time,
-                                                new_time_window.time_width) ;
-      }
-    }
-    
-  }
 
-  if(ltt_time_compare(new_time_window.time_width, ltt_time_zero) == 0) {
-    g_warning("Zoom more than 1 ns impossible");
-  } else {
-   time_change_manager(tab, new_time_window);
-  }
-}
 
 
 
@@ -3882,42 +3270,7 @@ void current_time_change_manager       (Tab *tab,
 
   tab->current_time_manager_lock = TRUE;
 
-  LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
-
-  /* current seconds */
-  gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry5),
-                            (double)time_span.start_time.tv_sec,
-                            (double)time_span.end_time.tv_sec);
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry5),
-                            (double)new_current_time.tv_sec);
-
-
-  /* start nanoseconds */
-  if(new_current_time.tv_sec == time_span.start_time.tv_sec) {
-    /* can be both beginning and end at the same time. */
-    if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
-      /* If we are at the end, max nsec to end..  */
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
-                                (double)time_span.start_time.tv_nsec,
-                                (double)time_span.end_time.tv_nsec);
-    } else {
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
-                                (double)time_span.start_time.tv_nsec,
-                                (double)NANOSECONDS_PER_SECOND-1);
-    }
-  } else if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
-      /* If we are at the end, max nsec to end..  */
-      gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
-                                0.0,
-                                (double)time_span.end_time.tv_nsec);
-  } else /* anywhere else */
-    gtk_spin_button_set_range(GTK_SPIN_BUTTON(tab->MEntry6),
-                              0.0,
-                              (double)NANOSECONDS_PER_SECOND-1);
-
-  gtk_spin_button_set_value(GTK_SPIN_BUTTON(tab->MEntry6),
-                            (double)new_current_time.tv_nsec);
+  timebar_set_current_time(TIMEBAR(tab->MTimebar), &new_current_time);
 
   set_current_time(tab, &new_current_time);
 
@@ -3929,7 +3282,6 @@ void current_position_change_manager(Tab *tab,
 {
   LttvTracesetContext *tsc =
     LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
   int retval;
 
   retval= lttv_process_traceset_seek_position(tsc, pos);
@@ -3944,50 +3296,87 @@ void current_position_change_manager(Tab *tab,
 }
 
 
-void
-on_MEntry5_value_changed               (GtkSpinButton *spinbutton,
-                                        gpointer user_data)
+static void on_timebar_starttime_changed(Timebar *timebar,
+                               gpointer user_data)
 {
-  Tab *tab = (Tab*)user_data;
-  LttvTracesetContext * tsc = 
-    LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
-  TimeInterval time_span = tsc->time_span;
-  gint value = gtk_spin_button_get_value_as_int(spinbutton);
-  LttTime new_current_time = tab->current_time;
-  new_current_time.tv_sec = value;
-
-  /* current nanoseconds */
-  if(new_current_time.tv_sec == time_span.start_time.tv_sec) {
-    if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
-      if(new_current_time.tv_nsec > time_span.end_time.tv_nsec)
-        new_current_time.tv_nsec = time_span.end_time.tv_nsec;
-      if(new_current_time.tv_nsec < time_span.start_time.tv_nsec)
-        new_current_time.tv_nsec = time_span.start_time.tv_nsec;
-    } else {
-      if(new_current_time.tv_nsec < time_span.start_time.tv_nsec)
-        new_current_time.tv_nsec = time_span.start_time.tv_nsec;
-    }
-  }
-  else if(new_current_time.tv_sec == time_span.end_time.tv_sec) {
-    if(new_current_time.tv_nsec > time_span.end_time.tv_nsec)
-      new_current_time.tv_nsec = time_span.end_time.tv_nsec;
-  }
+       Tab *tab = (Tab *)user_data;
+       LttvTracesetContext * tsc =
+               LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
+       TimeInterval time_span = tsc->time_span;
+
+       TimeWindow new_time_window = tab->time_window;
+       new_time_window.start_time = timebar_get_start_time(timebar);
+
+       LttTime end_time = new_time_window.end_time;
+
+       /* TODO ybrosseau 2010-12-02: This if should have been checked 
+          by the timebar already */
+       if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
+               /* Then, we must push back end time : keep the same time width
+                * if possible, else end traceset time */
+               end_time = LTT_TIME_MIN(ltt_time_add(new_time_window.start_time,
+                                                   new_time_window.time_width),
+                                       time_span.end_time);
+       }
+
+       /* Fix the time width to fit start time and end time */
+       new_time_window.time_width = ltt_time_sub(end_time,
+                                               new_time_window.start_time);
+       
+       new_time_window.time_width_double =
+               ltt_time_to_double(new_time_window.time_width);
+       
+       new_time_window.end_time = end_time;
+
+       /* Notify the time_manager */
+       time_change_manager(tab, new_time_window);
 
-  current_time_change_manager(tab, new_current_time);
 }
 
-void
-on_MEntry6_value_changed               (GtkSpinButton *spinbutton,
-                                        gpointer user_data)
+static void on_timebar_endtime_changed(Timebar *timebar,
+                               gpointer user_data)
 {
-  Tab *tab = (Tab*)user_data;
-  gint value = gtk_spin_button_get_value_as_int(spinbutton);
-  LttTime new_current_time = tab->current_time;
-  new_current_time.tv_nsec = value;
+       Tab *tab = (Tab *)user_data;
+       LttvTracesetContext * tsc = 
+               LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
+       TimeInterval time_span = tsc->time_span;
+
+       TimeWindow new_time_window = tab->time_window;
+
+       LttTime end_time = timebar_get_end_time(timebar);
+
+       /* TODO ybrosseau 2010-12-02: This if should have been 
+          checked by the timebar already */
+       if(ltt_time_compare(new_time_window.start_time, end_time) >= 0) {
+               /* Then, we must push front start time : keep the same time 
+                  width if possible, else end traceset time */
+               new_time_window.start_time = LTT_TIME_MAX(
+                       ltt_time_sub(end_time,
+                               new_time_window.time_width),
+                       time_span.start_time);
+       }
+
+       /* Fix the time width to fit start time and end time */
+       new_time_window.time_width = ltt_time_sub(end_time,
+                                               new_time_window.start_time);
+       
+       new_time_window.time_width_double =
+               ltt_time_to_double(new_time_window.time_width);
+       
+       new_time_window.end_time = end_time;
 
-  current_time_change_manager(tab, new_current_time);
+       /* Notify the time_manager */
+       time_change_manager(tab, new_time_window);  
+}
+static void on_timebar_currenttime_changed(Timebar *timebar,
+                               gpointer user_data)
+{
+       Tab *tab = (Tab *)user_data;
+       
+       LttTime new_current_time = timebar_get_current_time(timebar);
+       
+       current_time_change_manager(tab, new_current_time);
 }
-
 
 void scroll_value_changed_cb(GtkWidget *scrollbar,
                              gpointer user_data)
@@ -4426,8 +3815,6 @@ void tab_destructor(LttvPluginTab * ptab)
   LttvTrace * trace;
   Tab *tab = ptab->tab;
 
-  gtk_object_destroy(GTK_OBJECT(tab->tooltips));
-  
   if(tab->attributes)
     g_object_unref(tab->attributes);
 
@@ -4571,180 +3958,8 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab,
 //  }
 
   /* Create the timebar */
-  {
-    tab->MTimebar = gtk_hbox_new(FALSE, 2);
-    gtk_widget_show(tab->MTimebar);
-    tab->tooltips = gtk_tooltips_new();
-
-    tab->MEventBox1a = gtk_event_box_new();
-    gtk_widget_show(tab->MEventBox1a);
-    gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox1a, 
-        "Paste Start and End Times Here", "");
-    tab->MText1a = gtk_label_new("Time Frame ");
-    gtk_widget_show(tab->MText1a);
-    gtk_container_add(GTK_CONTAINER(tab->MEventBox1a), tab->MText1a);
-    tab->MEventBox1b = gtk_event_box_new();
-    gtk_widget_show(tab->MEventBox1b);
-    gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox1b, 
-        "Paste Start Time Here", "");
-    tab->MText1b = gtk_label_new("start: ");
-    gtk_widget_show(tab->MText1b);
-    gtk_container_add(GTK_CONTAINER(tab->MEventBox1b), tab->MText1b);
-    tab->MText2 = gtk_label_new("s");
-    gtk_widget_show(tab->MText2);
-    tab->MText3a = gtk_label_new("ns");
-    gtk_widget_show(tab->MText3a);
-
-    tab->MEventBox3b = gtk_event_box_new();
-    gtk_widget_show(tab->MEventBox3b);
-    gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox3b, 
-        "Paste End Time Here", "");
-    tab->MText3b = gtk_label_new("end:");
-    gtk_widget_show(tab->MText3b);
-    gtk_container_add(GTK_CONTAINER(tab->MEventBox3b), tab->MText3b);
-    tab->MText4 = gtk_label_new("s");
-    gtk_widget_show(tab->MText4);
-    tab->MText5a = gtk_label_new("ns");
-    gtk_widget_show(tab->MText5a);
-
-    tab->MEventBox8 = gtk_event_box_new();
-    gtk_widget_show(tab->MEventBox8);
-    gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox8, 
-        "Paste Time Interval here", "");
-    tab->MText8 = gtk_label_new("Time Interval:");
-    gtk_widget_show(tab->MText8);
-    gtk_container_add(GTK_CONTAINER(tab->MEventBox8), tab->MText8);
-    tab->MText9 = gtk_label_new("s");
-    gtk_widget_show(tab->MText9);
-    tab->MText10 = gtk_label_new("ns");
-    gtk_widget_show(tab->MText10);
-
-    tab->MEventBox5b = gtk_event_box_new();
-    gtk_widget_show(tab->MEventBox5b);
-    gtk_tooltips_set_tip(tab->tooltips, tab->MEventBox5b, 
-        "Paste Current Time Here", "");
-    tab->MText5b = gtk_label_new("Current Time:");
-    gtk_widget_show(tab->MText5b);
-    gtk_container_add(GTK_CONTAINER(tab->MEventBox5b), tab->MText5b);
-    tab->MText6 = gtk_label_new("s");
-    gtk_widget_show(tab->MText6);
-    tab->MText7 = gtk_label_new("ns");
-    gtk_widget_show(tab->MText7);
-
-    tab->MEntry1 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0);
-    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry1),0);
-    gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry1),TRUE);
-    gtk_widget_show(tab->MEntry1);
-    tab->MEntry2 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0);
-    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry2),0);
-    gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry2),TRUE);
-    gtk_widget_show(tab->MEntry2);
-    tab->MEntry3 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0);
-    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry3),0);
-    gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry3),TRUE);
-    gtk_widget_show(tab->MEntry3);
-    tab->MEntry4 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0);
-    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry4),0);
-    gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry4),TRUE);
-    gtk_widget_show(tab->MEntry4);
-    tab->MEntry5 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0);
-    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry5),0);
-    gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry5),TRUE);
-    gtk_widget_show(tab->MEntry5);
-    tab->MEntry6 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0);
-    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry6),0);
-    gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry6),TRUE);
-    gtk_widget_show(tab->MEntry6);
-    tab->MEntry7 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0);
-    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry7),0);
-    gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry7),TRUE);
-    gtk_widget_show(tab->MEntry7);
-    tab->MEntry8 = gtk_spin_button_new_with_range(0.0, 1.0, 1.0);
-    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(tab->MEntry8),0);
-    gtk_spin_button_set_snap_to_ticks(GTK_SPIN_BUTTON(tab->MEntry8),TRUE);
-    gtk_widget_show(tab->MEntry8);
-    
-    GtkWidget *temp_widget;
-    
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEventBox1a, FALSE,
-                         FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEventBox1b, FALSE,
-                         FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry1, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText2, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry2, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText3a, FALSE, FALSE, 0);
-    temp_widget = gtk_vseparator_new();
-    gtk_widget_show(temp_widget);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), temp_widget, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEventBox3b, FALSE,
-                         FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry3, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText4, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry4, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText5a, FALSE, FALSE, 0);
-    temp_widget = gtk_vseparator_new();
-    gtk_widget_show(temp_widget);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), temp_widget, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEventBox8, FALSE,
-                         FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry7, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText9, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MEntry8, FALSE, FALSE, 0);
-    gtk_box_pack_start (GTK_BOX (tab->MTimebar), tab->MText10, FALSE, FALSE, 0);
-
-    temp_widget = gtk_vseparator_new();
-    gtk_widget_show(temp_widget);
-    gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MText7, FALSE, FALSE, 0);
-    gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MEntry6, FALSE, FALSE, 0);
-    gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MText6, FALSE, FALSE, 0);
-    gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MEntry5, FALSE, FALSE, 0);
-    gtk_box_pack_end (GTK_BOX (tab->MTimebar), tab->MEventBox5b, FALSE,
-                         FALSE, 0);
-    gtk_box_pack_end (GTK_BOX (tab->MTimebar), temp_widget, FALSE, FALSE, 0);
-    
-
-    //GtkWidget *test = gtk_button_new_with_label("drop");
-    //gtk_button_set_relief(GTK_BUTTON(test), GTK_RELIEF_NONE);
-    //gtk_widget_show(test);
-    //gtk_box_pack_end(GTK_BOX (tab->MTimebar), test, FALSE, FALSE, 0);
-    //gtk_widget_add_events(tab->MText1, GDK_ALL_EVENTS_MASK);//GDK_BUTTON_PRESS_MASK);
-    /*GtkWidget *event_box = gtk_event_box_new();
-    gtk_widget_show(event_box);
-    gtk_tooltips_set_tip(tooltips, event_box, 
-        "Paste Current Time Here", "");
-    gtk_box_pack_end(GTK_BOX (tab->MTimebar), event_box, FALSE, FALSE, 0);
-    GtkWidget *test = gtk_label_new("drop");
-    gtk_container_add(GTK_CONTAINER(event_box), test);
-    gtk_widget_show(test);
-    g_signal_connect (G_OBJECT(event_box),
-                      "button-press-event",
-                      G_CALLBACK (on_MText1_paste),
-                      (gpointer)tab);
-*/
-
-    g_signal_connect (G_OBJECT(tab->MEventBox1a),
-                      "button-press-event",
-                      G_CALLBACK (on_MEventBox1a_paste),
-                      (gpointer)tab);
-
-    g_signal_connect (G_OBJECT(tab->MEventBox1b),
-                      "button-press-event",
-                      G_CALLBACK (on_MEventBox1b_paste),
-                      (gpointer)tab);
-    g_signal_connect (G_OBJECT(tab->MEventBox3b),
-                      "button-press-event",
-                      G_CALLBACK (on_MEventBox3b_paste),
-                      (gpointer)tab);
-    g_signal_connect (G_OBJECT(tab->MEventBox5b),
-                      "button-press-event",
-                      G_CALLBACK (on_MEventBox5b_paste),
-                      (gpointer)tab);
-    g_signal_connect (G_OBJECT(tab->MEventBox8),
-                      "button-press-event",
-                      G_CALLBACK (on_MEventBox8_paste),
-                      (gpointer)tab);
-  }
+  
+  tab->MTimebar = timebar_new(); 
 
   gtk_box_pack_end(GTK_BOX(tab->vbox),
                    tab->scrollbar,
@@ -4797,8 +4012,10 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab,
 
   gtk_widget_show(tab->label);
   gtk_widget_show(tab->scrollbar);
+  gtk_widget_show(tab->MTimebar);
   gtk_widget_show(tab->viewer_container);
   gtk_widget_show(tab->vbox);
+
   //gtk_widget_show(tab->multivpaned);
 
 
@@ -4812,30 +4029,14 @@ void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab,
   g_signal_connect(G_OBJECT(tab->scrollbar), "value-changed",
       G_CALLBACK(scroll_value_changed_cb), tab);
 
-  g_signal_connect ((gpointer) tab->MEntry1, "value-changed",
-                    G_CALLBACK (on_MEntry1_value_changed),
-                    tab);
-  g_signal_connect ((gpointer) tab->MEntry2, "value-changed",
-                    G_CALLBACK (on_MEntry2_value_changed),
-                    tab);
-  g_signal_connect ((gpointer) tab->MEntry3, "value-changed",
-                    G_CALLBACK (on_MEntry3_value_changed),
-                    tab);
-  g_signal_connect ((gpointer) tab->MEntry4, "value-changed",
-                    G_CALLBACK (on_MEntry4_value_changed),
-                    tab);
-  g_signal_connect ((gpointer) tab->MEntry5, "value-changed",
-                    G_CALLBACK (on_MEntry5_value_changed),
-                    tab);
-  g_signal_connect ((gpointer) tab->MEntry6, "value-changed",
-                    G_CALLBACK (on_MEntry6_value_changed),
-                    tab);
-  g_signal_connect ((gpointer) tab->MEntry7, "value-changed",
-                    G_CALLBACK (on_MEntry7_value_changed),
-                    tab);
-  g_signal_connect ((gpointer) tab->MEntry8, "value-changed",
-                    G_CALLBACK (on_MEntry8_value_changed),
-                    tab);
+
+  /* Timebar signal handler */
+  g_signal_connect(G_OBJECT(tab->MTimebar), "start-time-changed",
+                 G_CALLBACK(on_timebar_starttime_changed), tab);
+  g_signal_connect(G_OBJECT(tab->MTimebar), "end-time-changed",
+                 G_CALLBACK(on_timebar_endtime_changed), tab);  
+  g_signal_connect(G_OBJECT(tab->MTimebar), "current-time-changed",
+                 G_CALLBACK(on_timebar_currenttime_changed), tab);                 
 
   //g_signal_connect(G_OBJECT(tab->scrollbar), "changed",
   //    G_CALLBACK(scroll_value_changed_cb), tab);
This page took 0.035724 seconds and 4 git commands to generate.