*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
#include "callbacks.h"
#include "interface.h"
#include "support.h"
-#include <ltt/trace.h>
-#include <ltt/time.h>
-#include <ltt/event.h>
+#include <lttv/time.h>
#include <lttv/lttv.h>
#include <lttv/module.h>
#include <lttv/iattribute.h>
+#include <lttv/traceset.h>
+#include <lttv/state.h>
+#ifdef BABEL_CLEANUP
#include <lttv/stats.h>
-#include <lttv/filter.h>
#include <lttv/sync/sync_chain_lttv.h>
+#endif /* BABEL_CLEANUP */
+#include <lttv/filter.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>
#include <lttvwindow/lttv_plugin_tab.h>
+#include <babeltrace/babeltrace.h>
+#include <babeltrace/ctf/events.h>
+#include <babeltrace/ctf/iterator.h>
+
static LttTime lttvwindow_default_time_width = { 1, 0 };
#define CLIP_BUF 256 // size of clipboard buffer
void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab,
GtkNotebook * notebook, char * label);
+int update_traceset(Tab *tab, LttvTraceset *traceset);
+
static void insert_viewer(GtkWidget* widget, lttvwindow_viewer_constructor constructor);
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,
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,
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;
viewer_container = tab->viewer_container;
- viewer = (GtkWidget*)constructor(ptab);
+ viewer = (GtkWidget*)constructor(&ptab->parent);
if(viewer)
{
//gtk_multivpaned_widget_add(GTK_MULTIVPANED(multivpaned), viewer);
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);
+#ifdef BABEL_CLEANUP
// Perform time synchronization on the traces
if (syncTraceset(tsc))
{
tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
}
+#endif /*BABEL_CLEANUP*/
- time_span = tsc->time_span;
+ time_span = lttv_traceset_get_time_span_real(traceset);
+
+ tab->traceset_info->traceset = traceset;
+
new_time_window = tab->time_window;
- new_current_time = tab->current_time;
-
+ new_current_time = tab->current_time;
+
/* Set the tab's time window and current time if
* out of bounds */
if(ltt_time_compare(tab->time_window.start_time, time_span.start_time) < 0
new_time_window.end_time = ltt_time_add(new_time_window.start_time,
new_time_window.time_width) ;
}
+ lttv_state_add_event_hooks(traceset);
-
-
-#if 0
- /* Set scrollbar */
- GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar));
- LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time);
+ //TODO ybrosseau 2012-08-03 Temporarly compute checkpoints right at the adding
+ // of the traceset
+ //Compute the traceset state checkpoint
+ {
+
+ EventsRequest *events_request = g_new(EventsRequest, 1);
+
+ LttvHooks *hook_adder = lttv_hooks_new();
+ lttv_hooks_add(hook_adder, lttv_state_save_hook_add_event_hooks, NULL,
+ LTTV_PRIO_DEFAULT);
+ LttvHooks *hook_remover = lttv_hooks_new();
+ lttv_hooks_add(hook_remover, lttv_state_save_hook_remove_event_hooks,
+ NULL, LTTV_PRIO_DEFAULT);
- g_object_set(G_OBJECT(adjustment),
- "lower",
- 0.0, /* lower */
- "upper",
- ltt_time_to_double(upper)
- * NANOSECONDS_PER_SECOND, /* upper */
- "step_increment",
- ltt_time_to_double(tab->time_window.time_width)
- / SCROLL_STEP_PER_PAGE
- * NANOSECONDS_PER_SECOND, /* step increment */
- "page_increment",
- ltt_time_to_double(tab->time_window.time_width)
- * NANOSECONDS_PER_SECOND, /* page increment */
- "page_size",
- ltt_time_to_double(tab->time_window.time_width)
- * NANOSECONDS_PER_SECOND, /* page size */
- NULL);
- gtk_adjustment_changed(adjustment);
-
- g_object_set(G_OBJECT(adjustment),
- "value",
- ltt_time_to_double(
- ltt_time_sub(tab->time_window.start_time, time_span.start_time))
- * NANOSECONDS_PER_SECOND, /* value */
- NULL);
- gtk_adjustment_value_changed(adjustment);
-
- /* set the time bar. The value callbacks will change their nsec themself */
- /* 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);
-
- /* 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);
-
- /* 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);
-#endif //0
+ // Fill the events request
+ events_request->owner = NULL;
+ events_request->viewer_data = NULL;
+ events_request->servicing = FALSE;
+ events_request->start_time = ltt_time_zero;
+ events_request->start_position = NULL;
+ events_request->stop_flag = FALSE;
+ events_request->end_time = ltt_time_infinite;
+ events_request->num_events = G_MAXUINT;
+ events_request->end_position = NULL;
+ events_request->trace = 1; //fixed /* FIXME */
+ events_request->before_chunk_traceset = NULL;
+ events_request->before_chunk_trace = NULL;
+ events_request->before_chunk_tracefile = NULL;
+ events_request->event = NULL;
+ events_request->after_chunk_tracefile = NULL;
+ events_request->after_chunk_trace = NULL;
+ events_request->after_chunk_traceset = NULL;
+ events_request->before_request = hook_adder;
+ events_request->after_request = hook_remover;
+
+ lttvwindow_events_request(tab, events_request);
+ }
/* Finally, call the update hooks of the viewers */
- LttvHooks * tmp;
- LttvAttributeValue value;
- gint retval = 0;
-
- retval= lttv_iattribute_find_by_path(tab->attributes,
- "hooks/updatetraceset", LTTV_POINTER, &value);
- g_assert(retval);
-
- tmp = (LttvHooks*)*(value.v_pointer);
- if(tmp == NULL)
- retval = 1;
- else
- lttv_hooks_call(tmp,traceset);
+ gint retval = update_traceset(tab, traceset);
time_change_manager(tab, new_time_window);
current_time_change_manager(tab, new_current_time);
return retval;
+
}
/**
* @param tab viewer's tab
*/
-void update_traceset(Tab *tab)
+int update_traceset(Tab *tab, LttvTraceset *traceset)
{
LttvAttributeValue value;
LttvHooks * tmp;
gboolean retval;
retval= lttv_iattribute_find_by_path(tab->attributes,
- "hooks/updatetraceset", LTTV_POINTER, &value);
+ "hooks/updatetraceset",
+ LTTV_POINTER,
+ &value);
g_assert(retval);
tmp = (LttvHooks*)*(value.v_pointer);
- if(tmp == NULL) return;
- lttv_hooks_call(tmp, NULL);
+ if(tmp == NULL) {
+ retval = 1;
+ } else {
+ lttv_hooks_call(tmp, traceset);
+ }
+ return retval;
}
+/**
+ Call hooks register to get update on traceset time span changes
+*/
+int notify_time_span_changed(Tab *tab)
+{
+ LttvAttributeValue value;
+ LttvHooks * tmp;
+ gboolean retval;
+
+ retval= lttv_iattribute_find_by_path(tab->attributes,
+ "hooks/updatetimespan",
+ LTTV_POINTER,
+ &value);
+ g_assert(retval);
+ tmp = (LttvHooks*)*(value.v_pointer);
+ if(tmp == NULL) {
+ retval = 1;
+ } else {
+ lttv_hooks_call(tmp, NULL);
+ }
+ return retval;
+}
/* get_label function is used to get user input, it displays an input
* box, which allows user to input a string
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),
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),
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),
g_object_set_data(G_OBJECT(tab->viewer_container), "focused_viewer", NULL);
}
-
+#if UNFINISHED_FEATURE
+/* TODO ybrosseau 2012-03-15: Function is half implemented. Should be removed */
/* open_traceset will open a traceset saved in a file
* Right now, it is not finished yet, (not working)
* FIXME
}
}
-
+#endif
/* lttvwindow_process_pending_requests
*
* Process requests for parts of the trace from viewers.
gboolean lttvwindow_process_pending_requests(Tab *tab)
{
- GtkWidget* widget;
- LttvTracesetContext *tsc;
- LttvTracefileContext *tfc;
+
+ LttvTraceset *ts;
+
GSList *list_in = NULL;
LttTime end_time;
guint end_nb_events;
guint count;
- LttvTracesetContextPosition *end_position;
+ LttvTracesetPosition *end_position;
if(lttvwindow_preempt_count > 0) return TRUE;
/* There is no events requests pending : we should never have been called! */
g_assert(g_slist_length(list_out) != 0);
- tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
+ ts = tab->traceset_info->traceset;
//set the cursor to be X shape, indicating that the computer is busy in doing its job
#if 0
/* Preliminary check for no trace in traceset */
/* Unregister the routine if empty, empty list_out too */
- if(lttv_traceset_number(tsc->ts) == 0) {
+ if(lttv_traceset_number(ts) == 0) {
/* - For each req in list_out */
GSList *iter = list_out;
/* - Call end request for req */
if(events_request->servicing == TRUE)
- lttv_hooks_call(events_request->after_request, (gpointer)tsc);
+ lttv_hooks_call(events_request->after_request, (gpointer)ts);
/* - remove req from list_out */
/* Destroy the request */
remove = TRUE;
free_data = TRUE;
-
+ //TODO ybrosseau: This if is always true
/* Go to next */
if(remove)
{
guint iter_trace=0;
for(iter_trace=0;
- iter_trace<lttv_traceset_number(tsc->ts);
+ iter_trace<lttv_traceset_number(ts);
iter_trace++) {
- LttvTrace *trace_v = lttv_traceset_get(tsc->ts, iter_trace);
+ LttvTrace *trace_v = lttv_traceset_get(ts, iter_trace);
if(lttvwindowtraces_lock(trace_v) != 0) {
g_critical("Foreground processing : Unable to get trace lock");
}
/* 0.2 Seek tracefiles positions to context position */
+#ifdef BABEL_CLEANUP
//g_assert(lttv_process_traceset_seek_position(tsc, sync_position) == 0);
lttv_process_traceset_synchronize_tracefiles(tsc);
-
+#endif
/* Events processing algorithm implementation */
/* Warning : the gtk_events_pending takes a LOT of cpu time. So what we do
if(event_request_lpos->start_position != NULL
&& event_request_list_out->start_position != NULL)
{
- comp = lttv_traceset_context_pos_pos_compare
+ //TODO ybrosseau: this compare is in fact an equal, so the behavior might not be right.
+ comp = lttv_traceset_position_time_compare
(event_request_lpos->start_position,
event_request_list_out->start_position);
} else {
if(event_request_lpos != NULL
&& event_request_lpos->start_position != NULL) {
- lpos_start_time = lttv_traceset_context_position_get_time(
+ lpos_start_time = lttv_traceset_position_get_time(
event_request_lpos->start_position);
}
/* 1.2 Seek */
{
- tfc = lttv_traceset_context_get_current_tfc(tsc);
+
g_assert(g_slist_length(list_in)>0);
EventsRequest *events_request = g_slist_nth_data(list_in, 0);
+#ifdef DEBUG
guint seek_count;
+#endif
/* 1.2.1 If first request in list_in is a time request */
if(events_request->start_position == NULL) {
/* - If first req in list_in start time != current time */
- if(tfc == NULL || ltt_time_compare(events_request->start_time,
- tfc->timestamp) != 0)
+ //TODO ybrosseau: if commented out, since it was only affecting the g_debug
+ //if(tfc == NULL || ltt_time_compare(events_request->start_time,
+ // tfc->timestamp) != 0)
/* - Seek to that time */
g_debug("SEEK TIME : %lu, %lu", events_request->start_time.tv_sec,
events_request->start_time.tv_nsec);
- //lttv_process_traceset_seek_time(tsc, events_request->start_time);
- lttv_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc),
+ lttv_state_traceset_seek_time_closest(ts,
events_request->start_time);
/* Process the traceset with only state hooks */
+#ifdef DEBUG
seek_count =
- lttv_process_traceset_middle(tsc,
+#endif //DEBUG
+ lttv_process_traceset_middle(ts,
events_request->start_time,
G_MAXUINT, NULL);
#ifdef DEBUG
} else {
LttTime pos_time;
- LttvTracefileContext *tfc =
- lttv_traceset_context_get_current_tfc(tsc);
+ //LttvTracefileContext *tfc =
+ // lttv_traceset_context_get_current_tfc(tsc);
/* Else, the first request in list_in is a position request */
/* If first req in list_in pos != current pos */
g_assert(events_request->start_position != NULL);
g_debug("SEEK POS time : %lu, %lu",
- lttv_traceset_context_position_get_time(
+ lttv_traceset_position_get_time(
events_request->start_position).tv_sec,
- lttv_traceset_context_position_get_time(
+ lttv_traceset_position_get_time(
events_request->start_position).tv_nsec);
- if(tfc) {
- g_debug("SEEK POS context time : %lu, %lu",
- tfc->timestamp.tv_sec,
- tfc->timestamp.tv_nsec);
+ /*if(tfc) {*/ if(0) {
+ /* g_debug("SEEK POS context time : %lu, %lu",
+ tfc->timestamp.tv_sec,
+ tfc->timestamp.tv_nsec); */
} else {
g_debug("SEEK POS context time : %lu, %lu",
ltt_time_infinite.tv_sec,
ltt_time_infinite.tv_nsec);
}
g_assert(events_request->start_position != NULL);
- if(lttv_traceset_context_ctx_pos_compare(tsc,
- events_request->start_position) != 0) {
+ //TODO ybrosseau: for now, always seek
+ if(/*lttv_traceset_context_ctx_pos_compare(tsc,
+ events_request->start_position) != 0*/1) {
/* 1.2.2.1 Seek to that position */
g_debug("SEEK POSITION");
//lttv_process_traceset_seek_position(tsc, events_request->start_position);
- pos_time = lttv_traceset_context_position_get_time(
+ pos_time = lttv_traceset_position_get_time(
events_request->start_position);
- lttv_state_traceset_seek_time_closest(LTTV_TRACESET_STATE(tsc),
+ lttv_state_traceset_seek_time_closest(ts,
pos_time);
+ //lttv_traceset_seek_to_position( events_request->start_position);
/* Process the traceset with only state hooks */
+#ifdef DEBUG
seek_count =
- lttv_process_traceset_middle(tsc,
+#endif
+ lttv_process_traceset_middle(ts,
ltt_time_infinite,
G_MAXUINT,
events_request->start_position);
- g_assert(lttv_traceset_context_ctx_pos_compare(tsc,
- events_request->start_position) == 0);
+
+ //g_assert(lttv_traceset_context_ctx_pos_compare(tsc,
+ // events_request->start_position) == 0);
}
/* 1.3 Add hooks and call before request for all list_in members */
{
GSList *iter = NULL;
-
for(iter=list_in;iter!=NULL;iter=g_slist_next(iter)) {
EventsRequest *events_request = (EventsRequest*)iter->data;
/* 1.3.1 If !servicing */
/* - begin request hooks called
* - servicing = TRUE
*/
- lttv_hooks_call(events_request->before_request, (gpointer)tsc);
+ lttv_hooks_call(events_request->before_request, (gpointer)ts);
events_request->servicing = TRUE;
}
/* 1.3.2 call before chunk
* 1.3.3 events hooks added
*/
- if(events_request->trace == -1)
- lttv_process_traceset_begin(tsc,
+ //TODO ybrosseau 2012-07-10: || TRUE added since we only support
+ // traceset wide requests
+ if(events_request->trace == -1 || TRUE) {
+
+ lttv_process_traceset_begin(ts,
events_request->before_chunk_traceset,
events_request->before_chunk_trace,
- events_request->before_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
- else {
- guint nb_trace = lttv_traceset_number(tsc->ts);
+ events_request->event
+ );
+ } else {
+ guint nb_trace = lttv_traceset_number(ts);
g_assert((guint)events_request->trace < nb_trace &&
events_request->trace > -1);
- LttvTraceContext *tc = tsc->traces[events_request->trace];
+ LttvTrace *trace = lttv_traceset_get(ts, events_request->trace);
- lttv_hooks_call(events_request->before_chunk_traceset, tsc);
+ lttv_hooks_call(events_request->before_chunk_traceset, ts);
- lttv_trace_context_add_hooks(tc,
- events_request->before_chunk_trace,
- events_request->before_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
+ lttv_trace_add_hooks(trace, events_request->before_chunk_trace,
+ events_request->event);
}
}
}
/* - Call before chunk
* - events hooks added
*/
- if(events_request->trace == -1)
- lttv_process_traceset_begin(tsc,
+ //TODO ybrosseau 2012-07-10: || TRUE added since we only support
+ // traceset wide requests
+ if(events_request->trace == -1 || TRUE)
+ lttv_process_traceset_begin(ts,
events_request->before_chunk_traceset,
events_request->before_chunk_trace,
- events_request->before_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
+ events_request->event
+ );
else {
- guint nb_trace = lttv_traceset_number(tsc->ts);
+ guint nb_trace = lttv_traceset_number(ts);
g_assert((guint)events_request->trace < nb_trace &&
events_request->trace > -1);
- LttvTraceContext *tc = tsc->traces[events_request->trace];
+ LttvTrace *trace = lttv_traceset_get(ts, events_request->trace);
- lttv_hooks_call(events_request->before_chunk_traceset, tsc);
+ lttv_hooks_call(events_request->before_chunk_traceset, ts);
- lttv_trace_context_add_hooks(tc,
+ lttv_trace_add_hooks(trace,
events_request->before_chunk_trace,
- events_request->before_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
+ events_request->event
+ );
}
iter = g_slist_next(iter);
}
{
- tfc = lttv_traceset_context_get_current_tfc(tsc);
+
/* 2.1 For each req of list_out */
GSList *iter = list_out;
/* if req.start time == current context time
* or req.start position == current position*/
- if( ltt_time_compare(events_request->start_time,
+ /* if( ltt_time_compare(events_request->start_time,
tfc->timestamp) == 0
||
(events_request->start_position != NULL
lttv_traceset_context_ctx_pos_compare(tsc,
events_request->start_position) == 0)
) {
+ */
+ if(lttv_traceset_position_compare_current(ts, events_request->start_position) == 0) {
+
/* - Add to list_in, remove from list_out */
list_in = g_slist_append(list_in, events_request);
remove = TRUE;
/* - begin request hooks called
* - servicing = TRUE
*/
- lttv_hooks_call(events_request->before_request, (gpointer)tsc);
+ lttv_hooks_call(events_request->before_request, (gpointer)ts);
events_request->servicing = TRUE;
}
/* call before chunk
* events hooks added
*/
- if(events_request->trace == -1)
- lttv_process_traceset_begin(tsc,
+ //TODO ybrosseau 2012-07-10: || TRUE added since we only support
+ // traceset wide requests
+ if(events_request->trace == -1 || TRUE)
+ lttv_process_traceset_begin(ts,
events_request->before_chunk_traceset,
events_request->before_chunk_trace,
- events_request->before_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
+ events_request->event
+ );
else {
- guint nb_trace = lttv_traceset_number(tsc->ts);
+ guint nb_trace = lttv_traceset_number(ts);
g_assert((guint)events_request->trace < nb_trace &&
events_request->trace > -1);
- LttvTraceContext *tc = tsc->traces[events_request->trace];
+ LttvTrace* trace = lttv_traceset_get(ts,events_request->trace);
- lttv_hooks_call(events_request->before_chunk_traceset, tsc);
+ lttv_hooks_call(events_request->before_chunk_traceset, ts);
- lttv_trace_context_add_hooks(tc,
- events_request->before_chunk_trace,
- events_request->before_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
+ lttv_trace_add_hooks(trace,
+ events_request->before_chunk_trace,
+
+ events_request->event);
+
}
EventsRequest *events_request = (EventsRequest*)iter->data;
if(events_request->end_position != NULL && end_position != NULL &&
- lttv_traceset_context_pos_pos_compare(events_request->end_position,
+ lttv_traceset_position_time_compare(events_request->end_position,
end_position) <0)
end_position = events_request->end_position;
}
EventsRequest *events_request = (EventsRequest*)iter->data;
if(events_request->end_position != NULL && end_position != NULL &&
- lttv_traceset_context_pos_pos_compare(events_request->end_position,
+ lttv_traceset_position_time_compare(events_request->end_position,
end_position) <0)
end_position = events_request->end_position;
}
{
/* 4. Call process traceset middle */
- g_debug("Calling process traceset middle with %p, %lu sec %lu nsec, %u nb ev, %p end pos", tsc, end_time.tv_sec, end_time.tv_nsec, end_nb_events, end_position);
- count = lttv_process_traceset_middle(tsc, end_time, end_nb_events, end_position);
+ g_debug("Calling process traceset middle with %p, %lu sec %lu nsec, %u nb ev, %p end pos", ts, end_time.tv_sec, end_time.tv_nsec, end_nb_events, end_position);
+ count = lttv_process_traceset_middle(ts, end_time, end_nb_events, end_position);
+#ifdef BABEL_CLEANUP
tfc = lttv_traceset_context_get_current_tfc(tsc);
if(tfc != NULL)
g_debug("Context time after middle : %lu, %lu", tfc->timestamp.tv_sec,
tfc->timestamp.tv_nsec);
else
g_debug("End of trace reached after middle.");
-
+#endif
}
+
{
/* 5. After process traceset middle */
- tfc = lttv_traceset_context_get_current_tfc(tsc);
- /* - if current context time > traceset.end time */
- if(tfc == NULL || ltt_time_compare(tfc->timestamp,
- tsc->time_span.end_time) > 0) {
+ /* - if the iterator is not valid anymore (got to the end) */
+ if(bt_ctf_iter_read_event(ts->iter) == NULL) {
/* - For each req in list_in */
GSList *iter = list_in;
/* - Remove events hooks for req
* - Call end chunk for req
*/
-
- if(events_request->trace == -1)
- lttv_process_traceset_end(tsc,
+ //TODO ybrosseau 2012-07-10: || TRUE added since we only support
+ // traceset wide requests
+ if(events_request->trace == -1 || TRUE)
+ lttv_process_traceset_end(ts,
events_request->after_chunk_traceset,
events_request->after_chunk_trace,
- events_request->after_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
+
+ events_request->event);
else {
- guint nb_trace = lttv_traceset_number(tsc->ts);
+ guint nb_trace = lttv_traceset_number(ts);
g_assert(events_request->trace < nb_trace &&
events_request->trace > -1);
- LttvTraceContext *tc = tsc->traces[events_request->trace];
+ LttvTrace *trace = lttv_traceset_get(ts,events_request->trace);
- lttv_trace_context_remove_hooks(tc,
+ lttv_trace_remove_hooks(trace,
events_request->after_chunk_trace,
- events_request->after_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
- lttv_hooks_call(events_request->after_chunk_traceset, tsc);
+
+ events_request->event);
+
+ lttv_hooks_call(events_request->after_chunk_traceset, ts);
}
/* - Call end request for req */
- lttv_hooks_call(events_request->after_request, (gpointer)tsc);
+ lttv_hooks_call(events_request->after_request, (gpointer)ts);
/* - remove req from list_in */
/* Destroy the request */
/* - Remove events hooks for req
* - Call end chunk for req
*/
- if(events_request->trace == -1)
- lttv_process_traceset_end(tsc,
+ //TODO ybrosseau 2012-07-10: || TRUE added since we only support
+ // traceset wide requests
+ if(events_request->trace == -1 || TRUE) {
+ lttv_process_traceset_end(ts,
events_request->after_chunk_traceset,
events_request->after_chunk_trace,
- events_request->after_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
-
- else {
- guint nb_trace = lttv_traceset_number(tsc->ts);
+ events_request->event);
+ } else {
+ guint nb_trace = lttv_traceset_number(ts);
g_assert(events_request->trace < nb_trace &&
events_request->trace > -1);
- LttvTraceContext *tc = tsc->traces[events_request->trace];
+ LttvTrace *trace = lttv_traceset_get(ts, events_request->trace);
- lttv_trace_context_remove_hooks(tc,
+ lttv_trace_remove_hooks(trace,
events_request->after_chunk_trace,
- events_request->after_chunk_tracefile,
- events_request->event,
- events_request->event_by_id_channel);
- lttv_hooks_call(events_request->after_chunk_traceset, tsc);
+ events_request->event);
+
+
+ lttv_hooks_call(events_request->after_chunk_traceset, ts);
}
/* - req.num -= count */
g_assert(events_request->num_events >= count);
events_request->num_events -= count;
- g_assert(tfc != NULL);
+ //g_assert(tfc != NULL);
/* - if req.num == 0
* or
* current context time >= req.end time
||
events_request->stop_flag == TRUE
||
- ltt_time_compare(tfc->timestamp,
+ ltt_time_compare(lttv_traceset_get_current_time(ts),
events_request->end_time) >= 0
||
(events_request->end_position != NULL
&&
- lttv_traceset_context_ctx_pos_compare(tsc,
+ lttv_traceset_position_compare_current(ts,
events_request->end_position) == 0)
) {
g_assert(events_request->servicing == TRUE);
/* - Call end request for req
* - remove req from list_in */
- lttv_hooks_call(events_request->after_request, (gpointer)tsc);
+ lttv_hooks_call(events_request->after_request, (gpointer)ts);
/* - remove req from list_in */
/* Destroy the request */
remove = TRUE;
/* 1.1. Use current postition as start position */
if(events_request->start_position != NULL)
- lttv_traceset_context_position_destroy(events_request->start_position);
- events_request->start_position = lttv_traceset_context_position_new(tsc);
- lttv_traceset_context_position_save(tsc, events_request->start_position);
+ lttv_traceset_destroy_position(events_request->start_position);
+ events_request->start_position = lttv_traceset_create_current_position(ts);
+
/* 1.2. Remove start time */
events_request->start_time = ltt_time_infinite;
}
/* C Unlock Traces */
{
+#ifdef BABEL_CLEANUP
lttv_process_traceset_get_sync_data(tsc);
+#endif
//lttv_traceset_context_position_save(tsc, sync_position);
guint iter_trace;
for(iter_trace=0;
- iter_trace<lttv_traceset_number(tsc->ts);
+ iter_trace<lttv_traceset_number(ts);
iter_trace++) {
- LttvTrace *trace_v = lttv_traceset_get(tsc->ts, iter_trace);
+ LttvTrace *trace_v = lttv_traceset_get(ts, iter_trace);
lttvwindowtraces_unlock(trace_v);
}
NULL);
return FALSE;
*/
+
+
}
#undef list_out
+#ifdef BABEL_CLEANUP
+/**
+ Manage the periodic update of a live trace
+*/
+static gboolean
+live_trace_update_handler(Tab *tab)
+{
+
+ unsigned int updated_count;
+ LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
+ TimeInterval initial_time_span = tsc->time_span;
+ TimeInterval updated_time_span;
+
+ updated_count = lttv_process_traceset_update(tsc);
+
+ /* TODO ybrosseau 2011-01-12: Add trace resynchronization */
+
+ /* Get the changed period bounds */
+ updated_time_span = tsc->time_span;
+ if(ltt_time_compare(updated_time_span.start_time,
+ initial_time_span.start_time) != 0) {
+ /* The initial time should not change on a live update */
+ g_assert(FALSE);
+ }
+ /* Notify viewers (only on updates) */
+ if(ltt_time_compare(updated_time_span.end_time,
+ initial_time_span.end_time) != 0) {
+
+ notify_time_span_changed(tab);
+ /* TODO ybrosseau 2011-01-12: Change the timebar to register
+ to the time_span hook */
+ timebar_set_minmax_time(TIMEBAR(tab->MTimebar),
+ &updated_time_span.start_time,
+ &updated_time_span.end_time );
+
+ /* To update the min max */
+ time_change_manager(tab, tab->time_window);
+ }
+
+ /* Timer will be recalled as long as there is files to update */
+ return (updated_count > 0);
+}
+#endif /* BABEL_CLEANUP */
+#ifdef BABEL_CLEANUP
static void lttvwindow_add_trace(Tab *tab, LttvTrace *trace_v)
{
+
LttvTraceset *traceset = tab->traceset_info->traceset;
guint i;
guint num_traces = lttv_traceset_number(traceset);
//FIXME
//add_trace_into_traceset_selector(GTK_MULTIVPANED(tab->multivpaned), lttv_trace(trace_v));
-}
+
+ if (lttv_trace(trace_v)->is_live) {
+ /* Add timer for live update */
+ /* TODO ybrosseau 2011-01-12: Parametrize the hardcoded 1 seconds */
+ g_timeout_add_seconds (1,
+ (GSourceFunc) live_trace_update_handler,
+ tab);
+ }
+
+}
+#endif /* BABEL_CLEANUP */
/* add_trace adds a trace into the current traceset. It first displays a
* directory selection dialogue to let user choose a trace, then recreates
* tracset_context, and redraws all the viewer of the current tab
void add_trace(GtkWidget * widget, gpointer user_data)
{
- LttTrace *trace;
- LttvTrace * trace_v;
- LttvTraceset * traceset;
- const char * dir;
+
+ LttvTraceset * traceset = NULL;
+ const char * path;
char abs_path[PATH_MAX];
gint id;
MainWindow * mw_data = get_window_data_struct(widget);
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));
-
+ /* Create a new traceset*/
+ traceset = tab->traceset_info->traceset;
+ if(traceset == NULL) {
+ traceset = lttv_traceset_new();
+ }
+ /* File open dialog management */
+#ifdef BABEL_CLEANUP
+ GtkWidget *extra_live_button;
+#endif //babel_cleanup
+ 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));
+#ifdef BABEL_CLEANUP
+ /* Button to indicate the opening of a live trace */
+ extra_live_button = gtk_check_button_new_with_mnemonic ("Trace is live (currently being writen)");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (extra_live_button), FALSE);
+ gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (file_chooser), extra_live_button);
+#endif //babel_cleanup
+ 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));
- switch(id){
- case GTK_RESPONSE_ACCEPT:
- case GTK_RESPONSE_OK:
- dir = gtk_file_selection_get_filename (file_selector);
- 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);
- trace_v = lttvwindowtraces_get_trace_by_name(abs_path);
- if(trace_v == NULL) {
- trace = ltt_trace_open(abs_path);
- if(trace == NULL) {
- g_warning("cannot open trace %s", abs_path);
-
- GtkWidget *dialogue =
- gtk_message_dialog_new(
- GTK_WINDOW(gtk_widget_get_toplevel(widget)),
- GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- "Cannot open trace : maybe you should enter in the trace "
- "directory to select it ?");
- gtk_dialog_run(GTK_DIALOG(dialogue));
- gtk_widget_destroy(dialogue);
-
- } 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);
- }
+ gtk_file_chooser_set_filename(file_chooser, remember_trace_dir);
- gtk_widget_destroy((GtkWidget*)file_selector);
-
- //update current tab
- //update_traceset(mw_data);
+ gboolean closeFileChooserDialog = TRUE;
- /* Call the updatetraceset hooks */
+ do
+ {
+ id = gtk_dialog_run(GTK_DIALOG(file_chooser));
+ switch(id){
+ case GTK_RESPONSE_ACCEPT:
+ case GTK_RESPONSE_OK:
+ path = gtk_file_chooser_get_filename (file_chooser);
+
+ strncpy(remember_trace_dir, path, PATH_MAX);
+ strncat(remember_trace_dir, "/", PATH_MAX);
+ if(!path || strlen(path) == 0){
+ break;
+ }
+ get_absolute_pathname(path, abs_path);
+
+ if(lttv_traceset_add_path(traceset,abs_path) != 0 ){ /*failure*/
- traceset = tab->traceset_info->traceset;
- SetTraceset(tab, traceset);
- // in expose now call_pending_read_hooks(mw_data);
+ g_warning("cannot open trace %s", abs_path);
+ strncpy(remember_trace_dir, "\0", PATH_MAX);
+ GtkWidget *dialogue =
+ gtk_message_dialog_new(
+ GTK_WINDOW(gtk_widget_get_toplevel(widget)),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ "Cannot open trace : maybe you should enter in the directory "
+ "to select it ?");
+ gtk_dialog_run(GTK_DIALOG(dialogue));
+ gtk_widget_destroy(dialogue);
+ closeFileChooserDialog = FALSE;
+ }
+ else{
+ closeFileChooserDialog = TRUE;
+ SetTraceset(tab, traceset);
+ }
+ break;
+ //update current tab
+ //update_traceset(mw_data);
+
+ // in expose now call_pending_read_hooks(mw_data);
+
+ //lttvwindow_report_current_time(mw_data,&(tab->current_time));
- //lttvwindow_report_current_time(mw_data,&(tab->current_time));
- break;
- case GTK_RESPONSE_REJECT:
- case GTK_RESPONSE_CANCEL:
- default:
- gtk_widget_destroy((GtkWidget*)file_selector);
- break;
- }
+ case GTK_RESPONSE_REJECT:
+ case GTK_RESPONSE_CANCEL:
+ default:
+ closeFileChooserDialog = TRUE;
+ break;
+ }
+ }while(!closeFileChooserDialog);
+
+ gtk_widget_destroy((GtkWidget*)file_chooser);
+
}
/* remove_trace removes a trace from the current traceset if all viewers in
void remove_trace(GtkWidget *widget, gpointer user_data)
{
+#ifdef BABEL_CLEANUP
LttTrace *trace;
LttvTrace * trace_v;
LttvTraceset * traceset;
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);
SetTraceset(tab, (gpointer)traceset);
}
g_free(name);
+#endif /* BABEL_CLEANUP */
}
#if 0
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;
+ LttvTraceset *ts;
GtkWidget * notebook = lookup_widget(widget, "MNotebook");
GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
if(size == 1) return;
- tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
- time_span = tsc->time_span;
+ ts = lttvwindow_get_traceset(tab);
+ time_span = lttv_traceset_get_time_span_real(ts);
new_time_window = tab->time_window;
current_time = tab->current_time;
gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
Tab *copy_tab;
- if(!page) {
+ if(!page || TRUE ) {
copy_tab = NULL;
} else {
LttvPluginTab *ptab;
on_open_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
+#ifdef UNFINISHED_FEATURE
open_traceset((GtkWidget*)menuitem, user_data);
+#endif
}
{
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");
on_unload_module_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
- GError *error = NULL;
MainWindow * mw_data = get_window_data_struct((GtkWidget*)menuitem);
LttvLibrary *library = NULL;
{
GPtrArray *name;
guint nb,i;
- gchar *lib_name;
name = g_ptr_array_new();
nb = lttv_library_path_number();
/* ask for the library name */
on_content_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
+ char* filename = NULL,
+ *path;
+ GdkScreen *screen;
+ const char* relativePath = "doc/user/user_guide/html/index.html";
+ filename = g_build_filename (g_get_current_dir(), relativePath, NULL);
+ path = g_strdup_printf ("ghelp://%s", filename);
+
+ screen = gdk_screen_get_default();
+ gtk_show_uri (screen, path, gtk_get_current_event_time(), NULL);
+
+ g_free(filename);
+ g_free(path);
g_info("Content\n");
}
-static void
-on_about_close_activate (GtkButton *button,
- gpointer user_data)
-{
- GtkWidget *about_widget = GTK_WIDGET(user_data);
-
- gtk_widget_destroy(about_widget);
-}
-
void
on_about_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
MainWindow *main_window = get_window_data_struct(GTK_WIDGET(menuitem));
- GtkWidget *window_widget = main_window->mwindow;
- GtkWidget *about_widget = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- GtkWindow *about_window = GTK_WINDOW(about_widget);
- gint window_width, window_height;
-
- gtk_window_set_title(about_window, "About Linux Trace Toolkit");
-
- gtk_window_set_resizable(about_window, FALSE);
- gtk_window_set_transient_for(about_window, GTK_WINDOW(window_widget));
- gtk_window_set_destroy_with_parent(about_window, TRUE);
- gtk_window_set_modal(about_window, FALSE);
-
- /* Put the about window at the center of the screen */
- gtk_window_get_size(about_window, &window_width, &window_height);
- gtk_window_move (about_window,
- (gdk_screen_width() - window_width)/2,
- (gdk_screen_height() - window_height)/2);
-
- GtkWidget *vbox = gtk_vbox_new(FALSE, 1);
- gtk_container_add(GTK_CONTAINER(about_widget), vbox);
-
-
- /* Text to show */
- GtkWidget *label1 = gtk_label_new("");
- gtk_misc_set_padding(GTK_MISC(label1), 10, 20);
- gtk_label_set_markup(GTK_LABEL(label1), "\
-<big>Linux Trace Toolkit " VERSION "</big>");
- gtk_label_set_justify(GTK_LABEL(label1), GTK_JUSTIFY_CENTER);
+ gchar * authors[] = { "Yannick Brosseau",
+ "Francis Deslauriers",
+ "Mathieu Desnoyer",
+ "Michel Dagenais",
+ "Benoit Des Ligneris",
+ "Eric Clement",
+ "Xang-Xiu Yang",
+ "Tom Zanussi",
+ NULL };
+
+ static const gchar *comments = "Trace visualiser for LTTng 2.x data\
+\nInspired from the original Linux Trace Toolkit Visualizer made by Karim Yaghmour";
- GtkWidget *label2 = gtk_label_new("");
- gtk_misc_set_padding(GTK_MISC(label2), 10, 20);
- gtk_label_set_markup(GTK_LABEL(label2), "\
-Contributors :\n\
-\n\
-Michel Dagenais (New trace format, lttv main)\n\
-Mathieu Desnoyers (Kernel Tracer, Directory structure, build with automake/conf,\n\
- lttv gui, control flow view, gui cooperative trace reading\n\
- scheduler with interruptible foreground and background\n\
- computation, detailed event list (rewrite), trace reading\n\
- library (rewrite))\n\
-Benoit Des Ligneris, Eric Clement (Cluster adaptation, work in progress)\n\
-Xang-Xiu Yang (new trace reading library and converter, lttv gui, \n\
- detailed event list and statistics view)\n\
-Tom Zanussi (RelayFS)\n\
-\n\
-Inspired from the original Linux Trace Toolkit Visualizer made by\n\
-Karim Yaghmour");
-
- GtkWidget *label3 = gtk_label_new("");
- gtk_label_set_markup(GTK_LABEL(label3), "\
-Linux Trace Toolkit Viewer, Copyright (C) 2004, 2005, 2006\n\
- Michel Dagenais\n\
- Mathieu Desnoyers\n\
- Xang-Xiu Yang\n\
-Linux Trace Toolkit comes with ABSOLUTELY NO WARRANTY.\n\
-This is free software, and you are welcome to redistribute it\n\
-under certain conditions. See COPYING for details.");
- gtk_misc_set_padding(GTK_MISC(label3), 10, 20);
-
- gtk_box_pack_start_defaults(GTK_BOX(vbox), label1);
- gtk_box_pack_start_defaults(GTK_BOX(vbox), label2);
- gtk_box_pack_start_defaults(GTK_BOX(vbox), label3);
-
- GtkWidget *hbox = gtk_hbox_new(TRUE, 0);
- gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
- GtkWidget *close_button = gtk_button_new_with_mnemonic("_Close");
- gtk_box_pack_end(GTK_BOX(hbox), close_button, FALSE, FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(close_button), 20);
-
- g_signal_connect(G_OBJECT(close_button), "clicked",
- G_CALLBACK(on_about_close_activate),
- (gpointer)about_widget);
-
- gtk_widget_show_all(about_widget);
+ static const gchar *copyright = "Copyright \xc2\xa9 2004-2013";
+
+ gtk_show_about_dialog((GtkWindow *)main_window->mwindow,
+ "authors", authors,
+ "comments", comments,
+ "version", VERSION,
+ "program-name", "LTTV",
+ "license", "GPLv2, see COPYING file for details",
+ "website", "http://lttng.org/lttv/",
+ "copyright", copyright,
+ NULL);
}
on_button_new_clicked (GtkButton *button,
gpointer user_data)
{
+#ifdef BABEL_CLEANUP
create_new_window((GtkWidget*)button, user_data, TRUE);
+#else
+ GtkWidget *dialogue =
+ gtk_message_dialog_new(
+ GTK_WINDOW(gtk_widget_get_toplevel((GtkWidget *)button)),
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ "Opening multiple windows is disabled.");
+ gtk_dialog_run(GTK_DIALOG(dialogue));
+ gtk_widget_destroy(dialogue);
+#endif
}
void
on_button_open_clicked (GtkButton *button,
gpointer user_data)
{
+#ifdef UNFINISHED_FEATURE
open_traceset((GtkWidget*)button, user_data);
+#endif
}
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.
void time_change_manager (Tab *tab,
TimeWindow new_time_window)
-{
+{
+
/* Only one source of time change */
if(tab->time_manager_lock == TRUE) return;
tab->time_manager_lock = TRUE;
+ TimeInterval time_span;
+
+ LttvTraceset *ts = tab->traceset_info->traceset;
+
+ time_span = lttv_traceset_get_time_span_real(ts);
- LttvTracesetContext *tsc = LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
- 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);
/* Set scrollbar */
GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar));
- LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time);
+ LttTime upper = ltt_time_sub(time_span.end_time, time_span.start_time);
+
#if 0
gtk_range_set_increments(GTK_RANGE(tab->scrollbar),
ltt_time_to_double(new_time_window.time_width)
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;
+ 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);
- 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;
-
- 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);
-
-}
+ /* call viewer hooks for new time window */
+ set_time_window(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;
+ tab->time_manager_lock = FALSE;
- 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) ;
- }
- }
-
- }
-
- 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);
- }
}
-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);
- }
-}
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);
tab->current_time_manager_lock = FALSE;
}
-void current_position_change_manager(Tab *tab,
- LttvTracesetContextPosition *pos)
+void current_position_change_manager(Tab *tab, LttvTracesetPosition *pos)
{
- 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);
- g_assert_cmpint(retval, ==, 0);
- LttTime new_time = lttv_traceset_context_position_get_time(pos);
+ lttv_traceset_seek_to_position( pos);
+
+ LttTime new_time = lttv_traceset_position_get_time(pos);
/* Put the context in a state coherent position */
- lttv_state_traceset_seek_time_closest((LttvTracesetState*)tsc, ltt_time_zero);
-
+
+ lttv_state_traceset_seek_time_closest(tab->traceset_info->traceset, ltt_time_zero);
+
current_time_change_manager(tab, new_time);
set_current_position(tab, pos);
}
-
-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;
+ LttvTraceset * ts =tab->traceset_info->traceset;
+ TimeInterval time_span = lttv_traceset_get_time_span_real(ts);
+
+ 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;
+ LttvTraceset * ts =tab->traceset_info->traceset;
+ TimeInterval time_span = lttv_traceset_get_time_span_real(ts);
+
+ 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)
gdouble value = gtk_adjustment_get_value(adjust);
// gdouble upper, lower, ratio, page_size;
gdouble page_size;
- LttvTracesetContext * tsc =
- LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context);
- TimeInterval time_span = tsc->time_span;
+
+ LttvTraceset * ts = tab->traceset_info->traceset;
+ TimeInterval time_span = lttv_traceset_get_time_span_real(ts);
time = ltt_time_add(ltt_time_from_double(value),
time_span.start_time);
time_change_manager(tab, new_time_window);
+
#if 0
//time_window = tab->time_window;
/* call viewer hooks for new time window */
set_time_window(tab, &time_window);
#endif //0
+
}
LttvIAttribute *attributes =
LTTV_IATTRIBUTE(g_object_new(LTTV_ATTRIBUTE_TYPE, NULL));
LttvAttributeValue value;
- Tab *new_tab;
-
+
new_m_window = g_new(MainWindow, 1);
// Add the object's information to the module's array
"Tab_Plugin",
ptab,
(GDestroyNotify)tab_destructor);
- new_tab = ptab->tab;
} else {
LttvPluginTab *ptab = g_object_new(LTTV_TYPE_PLUGIN_TAB, NULL);
init_tab(ptab->tab, new_m_window, NULL, notebook, "Traceset");
"Tab_Plugin",
ptab,
(GDestroyNotify)tab_destructor);
- new_tab = ptab->tab;
}
/* Insert default viewers */
void tab_destructor(LttvPluginTab * ptab)
{
+#ifdef BABEL_CLEANUP
int i, nb, ref_count;
LttvTrace * trace;
Tab *tab = ptab->tab;
- gtk_object_destroy(GTK_OBJECT(tab->tooltips));
-
if(tab->attributes)
g_object_unref(tab->attributes);
g_free(tab->traceset_info);
//g_free(tab);
g_object_unref(ptab);
+#endif /* BABEL_CLEANUP */
}
void init_tab(Tab *tab, MainWindow * mw, Tab *copy_tab,
GtkNotebook * notebook, char * label)
{
+
GList * list;
//Tab * tab;
//LttvFilter *filter = NULL;
/* Copy the previous tab's filter */
/* We can clone the filter, as we copy the trace set also */
/* The filter must always be in sync with the trace set */
+
+#ifdef BABEL_CLEANUP
tab->filter = lttv_filter_clone(copy_tab->filter);
+#endif /* BABEL_CLEANUP */
} else {
tab->traceset_info->traceset = lttv_traceset_new();
+
tab->filter = NULL;
}
#ifdef DEBUG
0, 4);
fflush(stdout);
#endif //DEBUG
-
+//
tab->time_manager_lock = FALSE;
tab->current_time_manager_lock = FALSE;
-
+#ifdef BABEL_CLEANUP
//FIXME copy not implemented in lower level
tab->traceset_info->traceset_context =
g_object_new(LTTV_TRACESET_STATS_TYPE, NULL);
- g_assert(tab->traceset_info->traceset_context != NULL);
- lttv_context_init(
- LTTV_TRACESET_CONTEXT(tab->traceset_info->traceset_context),
- tab->traceset_info->traceset);
//add state update hooks
+#endif //BABEL_CLEANUP
lttv_state_add_event_hooks(
- (LttvTracesetState*)tab->traceset_info->traceset_context);
-
+ tab->traceset_info->traceset);
+
//determine the current_time and time_window of the tab
#if 0
if(copy_tab != NULL){
// }
/* 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,
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);
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);
lttvwindow_report_time_window(tab, time_window);
lttvwindow_report_current_time(tab, ltt_time_zero);
}
-
+
LttvTraceset *traceset = tab->traceset_info->traceset;
SetTraceset(tab, traceset);
}
__EXPORT void create_main_window_with_trace_list(GSList *traces)
{
+
GSList *iter = NULL;
/* Create window */
ptab = (LttvPluginTab *)g_object_get_data(G_OBJECT(page), "Tab_Plugin");
tab = ptab->tab;
}
-
+
+ LttvTraceset * traceset = lttv_traceset_new();
for(iter=traces; iter!=NULL; iter=g_slist_next(iter)) {
gchar *path = (gchar*)iter->data;
/* Add trace */
gchar abs_path[PATH_MAX];
- LttvTrace *trace_v;
- LttTrace *trace;
+
get_absolute_pathname(path, abs_path);
- trace_v = lttvwindowtraces_get_trace_by_name(abs_path);
- if(trace_v == NULL) {
- trace = ltt_trace_open(abs_path);
- if(trace == NULL) {
- g_warning("cannot open trace %s", abs_path);
+
+ if(lttv_traceset_add_path(traceset,abs_path) != 0 ){ /*failure*/
+
+ g_warning("cannot open trace %s", abs_path);
GtkWidget *dialogue =
gtk_message_dialog_new(
"to select it ?");
gtk_dialog_run(GTK_DIALOG(dialogue));
gtk_widget_destroy(dialogue);
- } 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);
}
- }
-
- LttvTraceset *traceset;
-
- traceset = tab->traceset_info->traceset;
- SetTraceset(tab, traceset);
+ else{
+ SetTraceset(tab, traceset);
+ }
+ }
}