*
*/
-#include <lttvwindow/common.h>
#include <ltt/ltt.h>
#include <lttv/lttv.h>
+#include <lttv/state.h>
+#include <lttv/stats.h>
+#include <lttv/tracecontext.h>
+#include <lttvwindow/common.h>
#include <lttvwindow/mainwindow.h>
#include <lttvwindow/viewer.h>
-#include <lttv/tracecontext.h>
#include <lttvwindow/toolbar.h>
#include <lttvwindow/menu.h>
-#include <lttv/state.h>
-#include <lttv/stats.h>
+#include <lttvwindow/callbacks.h> // for execute_time_requests
/**
tmp = (LttvHooks*)*(value.v_pointer);
if(tmp == NULL) return 1;
+
lttv_hooks_call(tmp,traceset);
-
+
return 0;
}
lttv_hooks_call(tmp, NULL);
}
+void set_time_window_adjustment(MainWindow * main_win, const TimeWindow* new_time_window)
+{
+ gtk_multi_vpaned_set_adjust(main_win->current_tab->multi_vpaned, new_time_window, FALSE);
+}
-/**
- * Function to show each viewer in the current tab.
- * It will be called by main window after it called process_traceset
- * @param main_win the main window the viewer belongs to.
- */
-
-void show_viewer(MainWindow *main_win)
+void set_time_window(MainWindow * main_win, const TimeWindow *time_window)
{
LttvAttributeValue value;
LttvHooks * tmp;
+
+ TimeWindowNotifyData time_window_notify_data;
+ TimeWindow old_time_window = main_win->current_tab->time_window;
+ time_window_notify_data.old_time_window = &old_time_window;
+ main_win->current_tab->time_window = *time_window;
+ time_window_notify_data.new_time_window =
+ &(main_win->current_tab->time_window);
+
g_assert(lttv_iattribute_find_by_path(main_win->current_tab->attributes,
- "hooks/showviewer", LTTV_POINTER, &value));
+ "hooks/updatetimewindow", LTTV_POINTER, &value));
tmp = (LttvHooks*)*(value.v_pointer);
if(tmp == NULL) return;
- lttv_hooks_call(tmp, NULL);
-}
-
+ lttv_hooks_call(tmp, &time_window_notify_data);
+}
/**
* API parts
* @param main_win the main window the viewer belongs to.
*/
-void lttvwindow_unregister_filter_notify(LttvHook hook, gpointer hook_data,
- MainWindow * main_win)
+void lttvwindow_unregister_filter_notify(MainWindow * main_win,
+ LttvHook hook,
+ gpointer hook_data)
{
LttvAttributeValue value;
LttvHooks * tmp;
lttv_hooks_remove_data(tmp, hook, hook_data);
}
-
/**
* Function to register a hook function for a viewer to set/update its
* current time.
* @param main_win the main window the viewer belongs to.
*/
-void lttvwindow_register_show(MainWindow *main_win,
+void lttvwindow_register_show_notify(MainWindow *main_win,
LttvHook hook, gpointer hook_data)
{
LttvAttributeValue value;
* @param main_win the main window the viewer belongs to.
*/
-void lttvwindow_unregister_show(MainWindow * main_win,
+void lttvwindow_unregister_show_notify(MainWindow * main_win,
LttvHook hook, gpointer hook_data)
{
LttvAttributeValue value;
* @param info the message which will be shown in the status bar.
*/
-void lttvwindow_report_status(MainWindow *main_win, char *info)
+void lttvwindow_report_status(MainWindow *main_win, const char *info)
{
//FIXME
g_warning("update_status not implemented in viewer.c");
*/
void lttvwindow_report_time_window(MainWindow *main_win,
- TimeWindow *time_window)
+ const TimeWindow *time_window)
{
- LttvAttributeValue value;
- LttvHooks * tmp;
-
- TimeWindowNotifyData time_window_notify_data;
- TimeWindow old_time_window = main_win->current_tab->time_window;
- time_window_notify_data.old_time_window = &old_time_window;
- main_win->current_tab->time_window = *time_window;
- time_window_notify_data.new_time_window =
- &(main_win->current_tab->time_window);
-
- gtk_multi_vpaned_set_scroll_value(main_win->current_tab->multi_vpaned,
- ltt_time_to_double(time_window->start_time)
- * NANOSECONDS_PER_SECOND );
- g_assert(lttv_iattribute_find_by_path(main_win->current_tab->attributes,
- "hooks/updatetimewindow", LTTV_POINTER, &value));
- tmp = (LttvHooks*)*(value.v_pointer);
- if(tmp == NULL) return;
- lttv_hooks_call(tmp, &time_window_notify_data);
+ set_time_window(main_win, time_window);
+ set_time_window_adjustment(main_win, time_window);
}
+
/**
* Function to set the current time/event of the current tab.
* It will be called by a viewer's signal handle associated with
* @param time a pointer where time is stored.
*/
-void lttvwindow_report_current_time(MainWindow *main_win, LttTime *time)
+void lttvwindow_report_current_time(MainWindow *main_win,
+ const LttTime *time)
{
LttvAttributeValue value;
LttvHooks * tmp;
tmp = (LttvHooks*)*(value.v_pointer);
if(tmp == NULL)return;
- lttv_hooks_call(tmp, time);
+ lttv_hooks_call(tmp, &main_win->current_tab->current_time);
}
/**
* It will be called by a viewer's signal handle associated with
* the grab_focus signal
* @param main_win the main window the viewer belongs to.
+ * @param top_widget the top widget containing all the other widgets of the
+ * viewer.
+ */
+
+void lttvwindow_report_focus(MainWindow *main_win, GtkWidget *top_widget)
+{
+ gtk_multi_vpaned_set_focus((GtkWidget*)main_win->current_tab->multi_vpaned,
+ gtk_widget_get_parent(top_widget));
+}
+
+
+/**
+ * Function to request data in a specific time interval to the main window.
+ * The main window will use this time interval and the others present
+ * to get the data from the process trace.
+ * @param main_win the main window the viewer belongs to.
* @param paned a pointer to a pane where the viewer is contained.
*/
-void lttvwindow_report_focus(MainWindow *main_win, gpointer paned)
+void lttvwindow_time_interval_request(MainWindow *main_win,
+ TimeWindow time_requested, guint num_events,
+ LttvHook after_process_traceset,
+ gpointer after_process_traceset_data)
{
- gtk_multi_vpaned_set_focus((GtkWidget*)main_win->current_tab->multi_vpaned,paned);
+ TimeRequest time_request;
+
+ time_request.time_window = time_requested;
+ time_request.num_events = num_events;
+ time_request.after_hook = after_process_traceset;
+ time_request.after_hook_data = after_process_traceset_data;
+
+ g_array_append_val(main_win->current_tab->time_requests, time_request);
+
+ if(!main_win->current_tab->time_request_pending)
+ {
+ /* Redraw has +20 priority. We want a prio higher than that, so +19 */
+ g_idle_add_full((G_PRIORITY_HIGH_IDLE + 19),
+ (GSourceFunc)execute_time_requests,
+ main_win,
+ NULL);
+ main_win->current_tab->time_request_pending = TRUE;
+ }
}
}
-/**
- * Function to get the traceset from the current tab.
- * It will be called by the constructor of the viewer and also be
- * called by a hook funtion of the viewer to update its traceset.
- * @param main_win the main window the viewer belongs to.
- * @param traceset a pointer to a traceset.
- */
-const LttvTraceset *lttvwindow_get_traceset(MainWindow *main_win)
-{
- return main_win->current_tab->traceset_info->traceset;
-}
-
/**
* Function to get the filter of the current tab.
* It will be called by the constructor of the viewer and also be