c85f674c |
1 | /* This file is part of the Linux Trace Toolkit Graphic User Interface |
5a5b35c5 |
2 | * Copyright (C) 2003-2004 Xiangxiu Yang, Mathieu Desnoyers |
3bc00fde |
3 | * |
4 | * This program is free software; you can redistribute it and/or modify |
5 | * it under the terms of the GNU General Public License Version 2 as |
6 | * published by the Free Software Foundation; |
7 | * |
8 | * This program is distributed in the hope that it will be useful, |
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 | * GNU General Public License for more details. |
12 | * |
13 | * You should have received a copy of the GNU General Public License |
14 | * along with this program; if not, write to the Free Software |
15 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
16 | * MA 02111-1307, USA. |
17 | */ |
18 | |
f95bc830 |
19 | /* |
911b7a3c |
20 | This file is what every viewer plugin writer should refer to. |
21 | |
5a5b35c5 |
22 | |
23 | Module Related API |
911b7a3c |
24 | |
c85f674c |
25 | A viewer plugin is, before anything, a plugin. As a dynamically loadable |
26 | module, it thus has an init and a destroy function called whenever it is |
27 | loaded/initialized and unloaded/destroyed. A graphical module depends on |
28 | lttvwindow for construction of its viewer instances. In order to achieve this, |
29 | it must register its constructor function to the main window along with |
30 | button description or text menu entry description. A module keeps a list of |
31 | every viewer that currently sits in memory so it can destroy them before the |
32 | module gets unloaded/destroyed. |
5a5b35c5 |
33 | |
34 | |
35 | Viewer Instance Related API |
911b7a3c |
36 | |
37 | The lifetime of a viewer is as follows. The viewer constructor function is |
38 | called each time an instance view is created (one subwindow of this viewer |
5a5b35c5 |
39 | type is created by the user either by clicking on the menu item or the button |
40 | corresponding to the viewer). Thereafter, the viewer gets hooks called for |
911b7a3c |
41 | different purposes by the window containing it. These hooks are detailed |
5a5b35c5 |
42 | below. It also has to deal with GTK Events. Finally, it can be destructed by |
43 | having its top level widget unreferenced by the main window or by any |
44 | GTK Event causing a "destroy-event" signal on the its top widget. Another |
45 | possible way for it do be destroyed is if the module gets unloaded. The module |
46 | unload function will have to emit a "destroy" signal on each top level widget |
47 | of all instances of its viewers. |
48 | |
49 | |
c85f674c |
50 | Notices from Main Window |
5a5b35c5 |
51 | |
52 | time_window : This is the time interval visible on the viewer's tab. Every |
53 | viewer that cares about being synchronised by respect to the |
54 | time with other viewers should register to this notification. |
55 | They should redraw all or part of their display when this occurs. |
56 | |
57 | traceset : This notification is called whenever a trace is added/removed |
58 | from the traceset. As it affects all the data displayed by the |
59 | viewer, it sould redraw itself totally. |
911b7a3c |
60 | |
5a5b35c5 |
61 | filter : FIXME : describe.. |
911b7a3c |
62 | |
5a5b35c5 |
63 | current_time: Being able to zoom nearer a specific time or highlight a specific |
64 | time on every viewer in synchronicity implies that the viewer |
65 | has to shown a visual sign over the drawing or select an event |
66 | when it receives this notice. It should also inform the main |
67 | window with the appropriate report API function when a user |
68 | selects a specific time as being the current time. |
69 | |
70 | dividor : This notice links the positions of the horizontal dividors |
71 | between the graphic display zone of every viewer and their Y axis, |
72 | typically showing processes, cpus, ... |
73 | |
74 | |
75 | FIXME : Add background computation explanation here |
911b7a3c |
76 | background_init: prepare for background computation (comes after show_end). |
77 | process_trace for background: done in small chunks in gtk_idle, hooks called. |
78 | background_end: remove the hooks and perhaps update the window. |
79 | |
5a5b35c5 |
80 | |
81 | Reporting Changes to the Main Window |
82 | |
83 | In most cases, the enclosing window knows about updates such as described in the |
84 | Notification section higher. There are a few cases, however, where updates are |
85 | caused by actions known by a view instance. For example, clicking in a view may |
86 | update the current time; all viewers within the same window must be told about |
87 | the new current time to change the currently highlighted time point. A viewer |
88 | reports such events by calling lttvwindow_report_current_time on its lttvwindow. |
c85f674c |
89 | The lttvwindow will consequently call current_time_notify for each of its |
90 | contained viewers. |
5a5b35c5 |
91 | |
92 | |
93 | Available report methods are : |
94 | |
95 | lttvwindow_report_status : reports the text of the status bar. |
96 | lttvwindow_report_time_window : reports the new time window. |
97 | lttvwindow_report_current_time : reports the new current time. |
98 | lttvwindow_report_dividor : reports the new horizontal dividor's position. |
99 | lttvwindow_report_focus : One on the widgets in the viewer has the keyboard's |
100 | focus from GTK. |
101 | |
5a5b35c5 |
102 | |
c85f674c |
103 | |
104 | Requesting Events to Main Window |
105 | |
106 | Events can be requested by passing a EventsRequest structure to the main window. |
107 | They will be delivered later when the next g_idle functions will be called. |
108 | Event delivery is done by calling the middle hook for this event ID, or the |
109 | main middle hooks. |
110 | |
111 | EventsRequest consists in |
112 | - a start timestamp or position |
113 | - a end timestamp and/or position and/or number of events to read |
114 | - hook lists to call for traceset/trace/tracefile begin and end, and for each |
115 | event (middle). |
116 | |
117 | The main window will deliver events for every EventRequests it has pending |
118 | through an algorithm that guarantee that all events requested, and only them, |
119 | will be delivered to the viewer between the call of the tracefile_begin hooks |
120 | and the call of the tracefile_end hooks. |
121 | |
5a5b35c5 |
122 | |
123 | |
124 | |
125 | GTK Events |
126 | |
c85f674c |
127 | Events and Signals |
128 | |
129 | GTK is quite different from the other graphical toolkits around there. The main |
130 | difference resides in that there are many X Windows inside one GtkWindow, |
131 | instead of just one. That means that X events are delivered by the glib main |
132 | loop directly to the widget corresponding to the GdkWindow affected by the X |
133 | event. |
134 | |
135 | Event delivery to a widget emits a signal on this widget. Signal emission and |
136 | propagation is described there : |
137 | |
138 | http://www.gtk.org/tutorial/sec-signalemissionandpropagation.html |
139 | |
140 | For further information on the GTK main loop (now a wrapper over glib main loop) |
141 | see : |
142 | |
143 | http://developer.gnome.org/doc/API/2.0/gtk/gtk-General.html |
144 | http://developer.gnome.org/doc/API/2.0/glib/glib-The-Main-Event-Loop.html |
145 | |
146 | |
147 | For documentation on event handling in GTK/GDK, see : |
148 | |
149 | http://developer.gnome.org/doc/API/2.0/gdk/gdk-Events.html |
150 | http://developer.gnome.org/doc/API/2.0/gdk/gdk-Event-Structures.html |
151 | |
152 | |
153 | Signals can be connected to handlers, emitted, propagated, blocked, |
154 | stopped. See : |
155 | |
156 | http://developer.gnome.org/doc/API/2.0/gobject/gobject-Signals.html |
157 | |
158 | |
159 | |
5a5b35c5 |
160 | |
161 | The "expose_event" |
162 | |
163 | Provides the exposed region in the GdkEventExpose structure. |
164 | |
165 | There are two ways of dealing with exposures. The first one is to directly draw |
166 | on the screen and the second one is to draw in a pixmap buffer, and then to |
167 | update the screen when necessary. |
168 | |
169 | In the first case, the expose event will be responsible for registering hooks to |
170 | process_traceset and require time intervals to the main window. So, in this |
171 | scenario, if a part of the screen is damaged, the trace has to be read to |
172 | redraw the screen. |
173 | |
174 | In the second case, with a pixmap buffer, the expose handler is only responsible |
175 | of showing the pixmap buffer on the screen. If the pixmap buffer has never |
176 | been filled with a drawing, the expose handler may ask for it to be filled. |
177 | |
178 | It can add dotted lines and such visual effects to enhance the user's |
179 | experience. |
180 | |
181 | |
182 | FIXME : explain other important events |
183 | |
f95bc830 |
184 | */ |
185 | |
186 | |
187 | |
188 | |
36b40c74 |
189 | /*! \file viewer.h |
3bc00fde |
190 | * \brief API used by the graphical viewers to interact with their top window. |
191 | * |
5a5b35c5 |
192 | * Main window (lttvwindow module) is the place to contain and display viewers. |
193 | * Viewers (lttv plugins) interact with main window through this API. |
3bc00fde |
194 | * This header file should be included in each graphic module. |
3bc00fde |
195 | * |
196 | */ |
197 | |
198 | #include <gtk/gtk.h> |
199 | #include <ltt/ltt.h> |
200 | #include <lttv/hook.h> |
13f86ce2 |
201 | #include <lttvwindow/common.h> |
3bc00fde |
202 | #include <lttv/stats.h> |
224446ce |
203 | //FIXME (not ready yet) #include <lttv/filter.h> |
3bc00fde |
204 | |
5a5b35c5 |
205 | |
206 | /* Module Related API */ |
207 | |
208 | |
209 | /* constructor a the viewer */ |
210 | //FIXME explain LttvTracesetSelector and key |
211 | typedef GtkWidget * (*lttvwindow_viewer_constructor) |
212 | (MainWindow * main_window, LttvTracesetSelector * s, char *key); |
213 | |
214 | |
3bc00fde |
215 | /** |
216 | * Function to register a view constructor so that main window can generate |
217 | * a toolbar item for the viewer in order to generate a new instance easily. |
5a5b35c5 |
218 | * |
219 | * It should be called by init function of the module. |
220 | * |
221 | * @param pixmap Image shown on the toolbar item. |
3bc00fde |
222 | * @param tooltip tooltip of the toolbar item. |
223 | * @param view_constructor constructor of the viewer. |
224 | */ |
225 | |
5a5b35c5 |
226 | void lttvwindow_register_toolbar |
227 | (char ** pixmap, |
228 | char * tooltip, |
229 | lttvwindow_viewer_constructor view_constructor); |
3bc00fde |
230 | |
231 | |
232 | /** |
233 | * Function to unregister the viewer's constructor, release the space |
234 | * occupied by pixmap, tooltip and constructor of the viewer. |
5a5b35c5 |
235 | * |
3bc00fde |
236 | * It will be called when a module is unloaded. |
5a5b35c5 |
237 | * |
238 | * @param view_constructor constructor of the viewer. |
3bc00fde |
239 | */ |
240 | |
5a5b35c5 |
241 | void lttvwindow_unregister_toolbar |
242 | (lttvwindow_viewer_constructor view_constructor); |
3bc00fde |
243 | |
244 | |
245 | /** |
246 | * Function to register a view constructor so that main window can generate |
247 | * a menu item for the viewer in order to generate a new instance easily. |
5a5b35c5 |
248 | * |
3bc00fde |
249 | * It will be called by init function of the module. |
5a5b35c5 |
250 | * |
3bc00fde |
251 | * @param menu_path path of the menu item. |
252 | * @param menu_text text of the menu item. |
253 | * @param view_constructor constructor of the viewer. |
254 | */ |
255 | |
5a5b35c5 |
256 | void lttvwindow_register_menu(char *menu_path, |
257 | char *menu_text, |
258 | lttvwindow_viewer_constructor view_constructor); |
3bc00fde |
259 | |
260 | |
261 | /** |
262 | * Function to unregister the viewer's constructor, release the space |
263 | * occupied by menu_path, menu_text and constructor of the viewer. |
5a5b35c5 |
264 | * |
3bc00fde |
265 | * It will be called when a module is unloaded. |
5a5b35c5 |
266 | * |
267 | * @param view_constructor constructor of the viewer. |
3bc00fde |
268 | */ |
269 | |
224446ce |
270 | void lttvwindow_unregister_menu(lttvwindow_viewer_constructor view_constructor); |
3bc00fde |
271 | |
272 | |
5a5b35c5 |
273 | |
274 | /* Viewer Instance Related API */ |
275 | |
3bc00fde |
276 | /** |
5a5b35c5 |
277 | * Structure used as hook_data for the time_window_notify hook. |
3bc00fde |
278 | */ |
224446ce |
279 | typedef struct _TimeWindowNotifyData { |
280 | TimeWindow *new_time_window; |
281 | TimeWindow *old_time_window; |
282 | } TimeWindowNotifyData; |
283 | |
5a5b35c5 |
284 | |
285 | /** |
286 | * Function to register a hook function that will be called by the main window |
287 | * when the time interval needs to be updated. |
288 | * |
289 | * This register function is typically called by the constructor of the viewer. |
290 | * |
291 | * @param main_win the main window the viewer belongs to. |
292 | * @param hook hook that sould be called by the main window when the time |
293 | * interval changes. This hook function takes a |
294 | * TimeWindowNotifyData* as call_data. |
295 | * @param hook_data hook data associated with the hook function. It will |
296 | * be typically a pointer to the viewer's data structure. |
297 | */ |
298 | |
299 | void lttvwindow_register_time_window_notify(MainWindow *main_win, |
300 | LttvHook hook, |
301 | gpointer hook_data); |
3bc00fde |
302 | |
303 | |
304 | /** |
5a5b35c5 |
305 | * Function to unregister the time_window notification hook. |
306 | * |
48f6f981 |
307 | * This unregister function is typically called by the destructor of the viewer. |
5a5b35c5 |
308 | * |
3bc00fde |
309 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
310 | * @param hook hook that sould be called by the main window when the time |
311 | * interval changes. This hook function takes a |
312 | * TimeWindowNotifyData* as call_data. |
313 | * @param hook_data hook data associated with the hook function. It will |
314 | * be typically a pointer to the viewer's data structure. |
3bc00fde |
315 | */ |
316 | |
5a5b35c5 |
317 | void lttvwindow_unregister_time_window_notify(MainWindow *main_win, |
318 | LttvHook hook, |
319 | gpointer hook_data); |
3bc00fde |
320 | |
321 | |
322 | /** |
5a5b35c5 |
323 | * Function to register a hook function that will be called by the main window |
324 | * when the traceset is changed. That means that the viewer must redraw |
325 | * itself completely or check if it's affected by the particular change to the |
48f6f981 |
326 | * traceset. |
5a5b35c5 |
327 | * |
48f6f981 |
328 | * This register function is typically called by the constructor of the viewer. |
5a5b35c5 |
329 | * |
3bc00fde |
330 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
331 | * @param hook hook that should be called whenever a change to the traceset |
332 | * occurs. The call_data of this hook is a NULL pointer. |
333 | * @param hook_data hook data associated with the hook function. It will |
334 | * be typically a pointer to the viewer's data structure. |
3bc00fde |
335 | */ |
336 | |
5a5b35c5 |
337 | void lttvwindow_register_traceset_notify(MainWindow *main_win, |
338 | LttvHook hook, |
339 | gpointer hook_data); |
3bc00fde |
340 | |
341 | |
342 | /** |
5a5b35c5 |
343 | * Function to unregister the traceset_notify hook. |
344 | * |
3bc00fde |
345 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
346 | * @param hook hook that should be called whenever a change to the traceset |
347 | * occurs. The call_data of this hook is a NULL pointer. |
348 | * @param hook_data hook data associated with the hook function. It will |
349 | * be typically a pointer to the viewer's data structure. |
3bc00fde |
350 | */ |
351 | |
5a5b35c5 |
352 | void lttvwindow_unregister_traceset_notify(MainWindow *main_win, |
353 | LttvHook hook, |
354 | gpointer hook_data); |
3bc00fde |
355 | |
356 | |
357 | /** |
48f6f981 |
358 | * Function to register a hook function for a viewer to set/update its |
5a5b35c5 |
359 | * filter. |
360 | * |
361 | * FIXME : Add information about what a filter is as seen from a viewer and how |
362 | * to use it. |
363 | * |
48f6f981 |
364 | * This register function is typically called by the constructor of the viewer. |
5a5b35c5 |
365 | * |
3bc00fde |
366 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
367 | * @param hook hook function called by the main window when a filter change |
368 | * occurs. |
369 | * @param hook_data hook data associated with the hook function. It will |
370 | * be typically a pointer to the viewer's data structure. |
3bc00fde |
371 | */ |
372 | |
224446ce |
373 | void lttvwindow_register_filter_notify(MainWindow *main_win, |
5a5b35c5 |
374 | LttvHook hook, |
375 | gpointer hook_data); |
3bc00fde |
376 | |
377 | |
378 | /** |
48f6f981 |
379 | * Function to unregister a viewer's hook function which is used to |
380 | * set/update the filter of the viewer. |
5a5b35c5 |
381 | * |
48f6f981 |
382 | * This unregistration is called by the destructor of the viewer. |
5a5b35c5 |
383 | * |
48f6f981 |
384 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
385 | * @param hook hook function called by the main window when a filter change |
386 | * occurs. |
387 | * @param hook_data hook data associated with the hook function. It will |
388 | * be typically a pointer to the viewer's data structure. |
3bc00fde |
389 | */ |
390 | |
5a5b35c5 |
391 | void lttvwindow_unregister_filter_notify(MainWindow * main_win, |
392 | LttvHook hook, |
393 | gpointer hook_data); |
3bc00fde |
394 | |
395 | |
396 | /** |
48f6f981 |
397 | * Function to register a hook function for a viewer to set/update its |
398 | * current time. |
5a5b35c5 |
399 | * |
3bc00fde |
400 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
401 | * @param hook hook function of the viewer that updates the current time. The |
402 | * call_data is a LttTime* representing the new current time. |
403 | * @param hook_data hook data associated with the hook function. It will |
404 | * be typically a pointer to the viewer's data structure. |
3bc00fde |
405 | */ |
406 | |
224446ce |
407 | void lttvwindow_register_current_time_notify(MainWindow *main_win, |
5a5b35c5 |
408 | LttvHook hook, |
409 | gpointer hook_data); |
3bc00fde |
410 | |
411 | |
412 | /** |
413 | * Function to unregister a viewer's hook function which is used to |
48f6f981 |
414 | * set/update the current time of the viewer. |
3bc00fde |
415 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
416 | * @param hook hook function of the viewer that updates the current time. The |
417 | * call_data is a LttTime* representing the new current time. |
418 | * @param hook_data hook data associated with the hook function. It will |
419 | * be typically a pointer to the viewer's data structure. |
3bc00fde |
420 | */ |
421 | |
5a5b35c5 |
422 | void lttvwindow_unregister_current_time_notify(MainWindow *main_win, |
423 | LttvHook hook, |
424 | gpointer hook_data); |
3bc00fde |
425 | |
426 | |
224446ce |
427 | /** |
428 | * Function to register a hook function for a viewer to set/update the |
429 | * dividor of the hpane. It provides a way to make the horizontal |
430 | * dividors of all the viewers linked together. |
5a5b35c5 |
431 | * |
224446ce |
432 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
433 | * @param hook hook function of the viewer that will be called whenever a |
434 | * dividor changes in another viewer. The call_data of this hook |
435 | * is a gint*. The value of the integer is the new position of the |
436 | * hpane dividor. |
437 | * @param hook_data hook data associated with the hook function. It will |
438 | * be typically a pointer to the viewer's data structure. |
224446ce |
439 | */ |
3bc00fde |
440 | |
224446ce |
441 | void lttvwindow_register_dividor(MainWindow *main_win, |
5a5b35c5 |
442 | LttvHook hook, |
443 | gpointer hook_data); |
3bc00fde |
444 | |
445 | |
224446ce |
446 | /** |
447 | * Function to unregister a viewer's hook function which is used to |
448 | * set/update hpane's dividor of the viewer. |
5a5b35c5 |
449 | * |
224446ce |
450 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
451 | * @param hook hook function of the viewer that will be called whenever a |
452 | * dividor changes in another viewer. The call_data of this hook |
453 | * is a gint*. The value of the integer is the new position of the |
454 | * hpane dividor. |
455 | * @param hook_data hook data associated with the hook function. It will |
456 | * be typically a pointer to the viewer's data structure. |
224446ce |
457 | */ |
458 | |
459 | void lttvwindow_unregister_dividor(MainWindow *main_win, |
5a5b35c5 |
460 | LttvHook hook, |
461 | gpointer hook_data); |
3bc00fde |
462 | |
3bc00fde |
463 | |
464 | |
465 | /** |
5a5b35c5 |
466 | * This method reports the information to show on the status bar in the |
467 | * main window. |
468 | * |
3bc00fde |
469 | * @param main_win the main window the viewer belongs to. |
48f6f981 |
470 | * @param info the message which will be shown in the status bar. |
3bc00fde |
471 | */ |
472 | |
5a5b35c5 |
473 | void lttvwindow_report_status(MainWindow *main_win, const char *info); |
3bc00fde |
474 | |
475 | |
476 | /** |
5a5b35c5 |
477 | * Function to set the time interval of the current tab.a |
478 | * |
3bc00fde |
479 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
480 | * @param time_interval pointer to the time interval value. |
3bc00fde |
481 | */ |
482 | |
5a5b35c5 |
483 | void lttvwindow_report_time_window(MainWindow *main_win, |
484 | const TimeWindow *time_window); |
3bc00fde |
485 | |
486 | /** |
48f6f981 |
487 | * Function to set the current time/event of the current tab. |
488 | * It will be called by a viewer's signal handle associated with |
489 | * the button-release-event signal |
3bc00fde |
490 | * @param main_win the main window the viewer belongs to. |
48f6f981 |
491 | * @param time a pointer where time is stored. |
3bc00fde |
492 | */ |
493 | |
5a5b35c5 |
494 | void lttvwindow_report_current_time(MainWindow *main_win, |
495 | const LttTime *time); |
3bc00fde |
496 | |
497 | |
498 | /** |
48f6f981 |
499 | * Function to set the position of the hpane's dividor (viewer). |
5a5b35c5 |
500 | * It will typically be called by a viewer's signal handle associated |
501 | * with the motion_notify_event event/signal. |
502 | * |
3bc00fde |
503 | * @param main_win the main window the viewer belongs to. |
48f6f981 |
504 | * @param position position of the hpane's dividor. |
3bc00fde |
505 | */ |
506 | |
224446ce |
507 | void lttvwindow_report_dividor(MainWindow *main_win, gint position); |
3bc00fde |
508 | |
509 | /** |
5a5b35c5 |
510 | * Function to set the focused viewer of the tab. |
3bc00fde |
511 | * It will be called by a viewer's signal handle associated with |
5a5b35c5 |
512 | * the grab_focus signal of all widgets in the viewer. |
513 | * |
3bc00fde |
514 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
515 | * @param top_widget the top widget containing all the other widgets of the |
516 | * viewer. |
3bc00fde |
517 | */ |
5a5b35c5 |
518 | void lttvwindow_report_focus(MainWindow *main_win, |
519 | GtkWidget *top_widget); |
3bc00fde |
520 | |
a43d67ba |
521 | |
5a5b35c5 |
522 | |
523 | /* Structure sent to the time request hook */ |
c85f674c |
524 | /* Value considered as empty */ |
525 | typedef struct _EventsRequest { |
526 | LttTime start_time, /* Unset : { 0, 0 } */ |
527 | LttvTracesetContextPosition start_position, /* Unset : num_traces = 0 */ |
528 | LttTime end_time, /* Unset : { 0, 0 } */ |
529 | guint num_events, /* Unset : G_MAXUINT */ |
530 | LttvTracesetContextPosition end_position, /* Unset : num_traces = 0 */ |
531 | LttvHooksById *before_traceset, /* Unset : NULL */ |
532 | LttvHooksById *before_trace, /* Unset : NULL */ |
533 | LttvHooksById *before_tracefile, /* Unset : NULL */ |
534 | LttvHooksById *middle, /* Unset : NULL */ |
535 | LttvHooksById *after_tracefile, /* Unset : NULL */ |
536 | LttvHooksById *after_trace, /* Unset : NULL */ |
537 | LttvHooksById *after_traceset /* Unset : NULL */ |
538 | } EventsRequest; |
539 | |
5a5b35c5 |
540 | |
a43d67ba |
541 | /** |
5a5b35c5 |
542 | * Function to request data in a specific time interval to the main window. The |
543 | * time request servicing is differed until the glib idle functions are |
544 | * called. |
545 | * |
c85f674c |
546 | * The viewer has to provide hooks that should be associated with the event |
547 | * request. |
5a5b35c5 |
548 | * |
c85f674c |
549 | * Either start time or start position must be defined in a EventRequest |
550 | * structure for it to be valid. |
551 | * |
552 | * end_time, end_position and num_events can all be defined. The first one |
553 | * to occur will be used as end criterion. |
554 | * |
a43d67ba |
555 | * @param main_win the main window the viewer belongs to. |
c85f674c |
556 | * @param events_requested the structure of request from. |
a43d67ba |
557 | */ |
558 | |
c85f674c |
559 | void lttvwindow_events_request(MainWindow *main_win, |
560 | EventsRequest events_request); |
a43d67ba |
561 | |
3bc00fde |
562 | /** |
48f6f981 |
563 | * Function to get the life span of the traceset |
5a5b35c5 |
564 | * |
3bc00fde |
565 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
566 | * @return pointer to a time interval : the life span of the traceset. |
3bc00fde |
567 | */ |
568 | |
224446ce |
569 | const TimeInterval *lttvwindow_get_time_span(MainWindow *main_win); |
48f6f981 |
570 | |
571 | /** |
572 | * Function to get the current time window of the current tab. |
5a5b35c5 |
573 | * |
48f6f981 |
574 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
575 | * @return a pointer to the current tab's time interval. |
48f6f981 |
576 | */ |
577 | |
224446ce |
578 | const TimeWindow *lttvwindow_get_time_window(MainWindow *main_win); |
3bc00fde |
579 | |
580 | |
3bc00fde |
581 | /** |
5a5b35c5 |
582 | * Function to get the current time of the current tab. |
583 | * |
3bc00fde |
584 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
585 | * @return a pointer to the current tab's current time. |
48f6f981 |
586 | */ |
587 | |
224446ce |
588 | const LttTime *lttvwindow_get_current_time(MainWindow *main_win); |
48f6f981 |
589 | |
48f6f981 |
590 | |
591 | /** |
592 | * Function to get the filter of the current tab. |
593 | * @param main_win, the main window the viewer belongs to. |
594 | * @param filter, a pointer to a filter. |
3bc00fde |
595 | */ |
596 | |
224446ce |
597 | //FIXME |
598 | typedef void lttv_filter; |
599 | //FIXME |
600 | const lttv_filter *lttvwindow_get_filter(MainWindow *main_win); |
3bc00fde |
601 | |
602 | |
3bc00fde |
603 | /** |
604 | * Function to get the stats of the traceset |
5a5b35c5 |
605 | * It must be non const so the viewer can modify it. |
606 | * FIXME : a set/get pair of functions would be more appropriate here. |
224446ce |
607 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
608 | * @return A pointer to Traceset statistics. |
224446ce |
609 | */ |
610 | |
611 | LttvTracesetStats* lttvwindow_get_traceset_stats(MainWindow *main_win); |
612 | |
613 | /** |
614 | * Function to get the context of the traceset |
615 | * It must be non const so the viewer can add and remove hooks from it. |
3bc00fde |
616 | * @param main_win the main window the viewer belongs to. |
5a5b35c5 |
617 | * @return Context of the current tab. |
3bc00fde |
618 | */ |
619 | |
48f6f981 |
620 | |
224446ce |
621 | LttvTracesetContext* lttvwindow_get_traceset_context(MainWindow *main_win); |
48f6f981 |
622 | |
3bc00fde |
623 | |