typically showing processes, cpus, ...
-FIXME : Add background computation explanation here
-background_init: prepare for background computation (comes after show_end).
-process_trace for background: done in small chunks in gtk_idle, hooks called.
-background_end: remove the hooks and perhaps update the window.
-
-
Reporting Changes to the Main Window
In most cases, the enclosing window knows about updates such as described
Available report methods are :
-lttvwindow_report_status : reports the text of the status bar.
lttvwindow_report_time_window : reports the new time window.
lttvwindow_report_current_time : reports the new current time.
lttvwindow_report_dividor : reports the new horizontal dividor's position.
-lttvwindow_report_focus : One on the widgets in the viewer has the keyboard's
- focus from GTK.
+lttvwindow_report_filter : reports the new filter object
from its lists, calling the process_traceset_end for this request (it
removes hooks from the context and calls the after hooks).
-It no stop_flag is rose, the end timestamp, end position or number
+It no stop_flag is risen, the end timestamp, end position or number
of events to read has to be reached to determine the end of the
request. Otherwise, the end of traceset does determine it.
*/
-#ifndef VIEWER_H
-#define VIEWER_H
+#ifndef LTTVWINDOW_H
+#define LTTVWINDOW_H
/*! \file lttvwindow.h
* \brief API used by the graphical viewers to interact with their top window.
#include <lttv/hook.h>
#include <lttv/tracecontext.h>
#include <lttv/stats.h>
+#include <lttv/filter.h>
#include <lttvwindow/mainwindow.h>
-#include <lttvwindow/lttvfilter.h>
-//FIXME (not ready yet) #include <lttv/filter.h>
/* Module Related API */
+/* GQuark containing constructors of viewers in global attributes */
+extern GQuark LTTV_VIEWER_CONSTRUCTORS;
/* constructor a the viewer */
-//FIXME explain LttvTracesetSelector and key
-typedef GtkWidget * (*lttvwindow_viewer_constructor)
- (Tab *tab, LttvTracesetSelector * s, char *key);
+typedef GtkWidget* (*lttvwindow_viewer_constructor)(Tab *tab);
/**
* window.
*
* It should be called by init function of the module.
- *
+ *
+ * @param name name of the viewer : mainly used as tag for constructor
* @param menu_path path of the menu item. NULL : no menu entry.
* @param menu_text text of the menu item.
* @param pixmap Image shown on the toolbar item. NULL : no button.
*/
void lttvwindow_register_constructor
- (char * menu_path,
+ (char * name,
+ char * menu_path,
char * menu_text,
char ** pixmap,
char * tooltip,
gpointer hook_data);
+/**
+ * Function to get the current filter of the main window : useful at viewer
+ * instanciation.
+ *
+ * @param tab the tab the viewer belongs to.
+ *
+ * returns : the current filter.
+ */
+
+
+LttvFilter *lttvwindow_get_filter(Tab *tab);
+
/**
* Function to register a hook function for a viewer to set/update its
* current time.
LttvHook hook,
gpointer hook_data);
+/**
+ * Function to register a hook function for a viewer to set/update its
+ * current position.
+ *
+ * @param tab the tab the viewer belongs to.
+ * @param hook hook function of the viewer that updates the current time. The
+ * call_data is a LttTime* representing the new current time.
+ * @param hook_data hook data associated with the hook function. It will
+ * be typically a pointer to the viewer's data structure.
+ */
+
+void lttvwindow_register_current_position_notify(Tab *tab,
+ LttvHook hook,
+ gpointer hook_data);
+
+
+/**
+ * Function to unregister a viewer's hook function which is used to
+ * set/update the current position of the viewer.
+ * @param tab the tab the viewer belongs to.
+ * @param hook hook function of the viewer that updates the current time. The
+ * call_data is a LttTime* representing the new current time.
+ * @param hook_data hook data associated with the hook function. It will
+ * be typically a pointer to the viewer's data structure.
+ */
+
+void lttvwindow_unregister_current_position_notify(Tab *tab,
+ LttvHook hook,
+ gpointer hook_data);
+
+
/**
* Function to register a hook function for a viewer to set/update the
* Function to set the time interval of the current tab.a
*
* @param tab the tab the viewer belongs to.
- * @param time_interval pointer to the time interval value.
+ * @param time_interval new time window.
*/
void lttvwindow_report_time_window(Tab *tab,
- const TimeWindow *time_window);
+ TimeWindow time_window);
/**
- * Function to set the current time/event of the current tab.
+ * Function to set the current time of the current tab.
* It will be called by a viewer's signal handle associated with
* the button-release-event signal
* @param tab the tab the viewer belongs to.
- * @param time a pointer where time is stored.
+ * @param time current time.
*/
void lttvwindow_report_current_time(Tab *tab,
- const LttTime *time);
+ LttTime time);
+
+
+/**
+ * Function to set the current event of the current tab.
+ * It will be called by a viewer's signal handle associated with
+ * the button-release-event signal
+ * @param tab the tab the viewer belongs to.
+ * @param pos the current position.
+ */
+void lttvwindow_report_current_position(Tab *tab,
+ LttvTracesetContextPosition *pos);
/**
* Function to set the position of the hpane's dividor (viewer).
void lttvwindow_report_dividor(Tab *tab, gint position);
-/**
- * Function to set the focused viewer of the tab.
- * It will be called by a viewer's signal handle associated with
- * the grab_focus signal of all widgets in the viewer.
- *
- * @param tab the tab the viewer belongs to.
- * @param top_widget the top widget containing all the other widgets of the
- * viewer.
- */
-void lttvwindow_report_focus(Tab *tab,
- GtkWidget *top_widget);
-
/* Structure sent to the events request hook */
- /* Value considered as empty */
+ /* Value considered as empty*/
typedef struct _EventsRequest {
gpointer owner; /* Owner of the request */
gpointer viewer_data; /* Unset : NULL */
- gboolean servicing; /* service in progress: TRUE */
- LttTime start_time;/* Unset : { G_MAXUINT, G_MAXUINT }*/
+ gboolean servicing; /* service in progress: TRUE*/
+ LttTime start_time; /* Unset : ltt_time_infinite*/
LttvTracesetContextPosition *start_position; /* Unset : NULL */
gboolean stop_flag; /* Continue:TRUE Stop:FALSE */
- LttTime end_time;/* Unset : { G_MAXUINT, G_MAXUINT } */
+ LttTime end_time; /* Unset : ltt_time_infinite*/
guint num_events; /* Unset : G_MAXUINT */
LttvTracesetContextPosition *end_position; /* Unset : NULL */
+ gint trace; /* unset : -1 */
+ GArray *hooks; /* Unset : NULL */
LttvHooks *before_chunk_traceset; /* Unset : NULL */
LttvHooks *before_chunk_trace; /* Unset : NULL */
LttvHooks *before_chunk_tracefile;/* Unset : NULL */
} EventsRequest;
/* Maximum number of events to proceed at once in a chunk */
-#define CHUNK_NUM_EVENTS 200
+#define CHUNK_NUM_EVENTS 6000
/**
/**
- * Function to get the current time window of the current tab.
+ * Function to see if there are events request pending.
+ *
+ * It tells if events requests are pending. Useful for checks in some events,
+ * i.e. detailed event list scrolling.
*
* @param tab the tab the viewer belongs to.
- * @return the current tab's time interval.
+ * @param viewer a pointer to the viewer data structure
+ * @return : TRUE is events requests are pending, else FALSE.
+ */
+
+gboolean lttvwindow_events_request_pending(Tab *tab);
+
+
+
+
+/**
+ * Function to get the current time interval shown on the current tab.
+ * It will be called by a viewer's hook function to update the
+ * shown time interval of the viewer and also be called by the constructor
+ * of the viewer.
+ * @param tab viewer's tab
+ * @return time window.
*/
TimeWindow lttvwindow_get_time_window(Tab *tab);
* @param filter, a pointer to a filter.
*/
-//FIXME
-typedef void lttv_filter;
-//FIXME
-const lttv_filter *lttvwindow_get_filter(Tab *tab);
+//LttvFilter *lttvwindow_get_filter(Tab *tab);
+
+/**
+ * Function to set the filter of the current tab.
+ * It should be called by the filter GUI to tell the
+ * main window to update the filter tab's lttv_filter.
+ *
+ * Notice : the lttv_filter object will be owned by the
+ * main window after the return of this function.
+ * Do NOT desallocate it.
+ *
+ * @param main_win, the main window the viewer belongs to.
+ * @param filter, a pointer to a filter.
+ */
+
+void lttvwindow_report_filter(Tab *tab, LttvFilter *filter);
+
/**
LttvTracesetContext* lttvwindow_get_traceset_context(Tab *tab);
-#endif //VIEWER_H
+/* set_time_window
+ *
+ * It updates the time window of the tab, then calls the updatetimewindow
+ * hooks of each viewer.
+ *
+ * This is called whenever the scrollbar value changes.
+ *
+ * This is mostly an internal function.
+ */
+
+void set_time_window(Tab *tab, const TimeWindow *time_window);
+
+
+/* set_current_time
+ *
+ * It updates the current time of the tab, then calls the updatetimewindow
+ * hooks of each viewer.
+ *
+ * This is called whenever the current time value changes.
+ *
+ * This is mostly an internal function.
+ */
+
+void set_current_time(Tab *tab, const LttTime *current_time);
+
+void events_request_free(EventsRequest *events_request);
+
+GtkWidget *main_window_get_widget(Tab *tab);
+
+#endif //LTTVWINDOW_H