X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Fgui%2Flttvwindow%2Flttvwindow%2Flttvwindow.c;h=aa42477282a62f4e02ea39d2b548958f76c151a3;hb=f31675494449c73316cab60617f51a85e67291c1;hp=84b053bd7929a9d0239ffefedcc9258bccac6e37;hpb=b052368a0d53ff62ed9110fbafdb857a2b034ca8;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c index 84b053bd..aa424772 100644 --- a/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c +++ b/ltt/branches/poly/lttv/modules/gui/lttvwindow/lttvwindow/lttvwindow.c @@ -76,6 +76,27 @@ 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. + */ + +void set_current_time(Tab *tab, const LttTime *current_time) +{ + LttvAttributeValue value; + LttvHooks * tmp; + + tab->current_time = *current_time; + + g_assert(lttv_iattribute_find_by_path(tab->attributes, + "hooks/updatecurrenttime", LTTV_POINTER, &value)); + tmp = (LttvHooks*)*(value.v_pointer); + if(tmp != NULL) lttv_hooks_call(tmp, &tab->current_time); +} + void add_toolbar_constructor(MainWindow *mw, LttvToolbarClosure *toolbar_c) { LttvIAttribute *attributes = mw->attributes; @@ -207,6 +228,7 @@ void remove_menu_constructor(MainWindow *mw, lttvwindow_viewer_constructor viewe * * It should be called by init function of the module. * + * @param name name of the viewer * @param menu_path path of the menu item. * @param menu_text text of the menu item. * @param pixmap Image shown on the toolbar item. @@ -215,7 +237,8 @@ void remove_menu_constructor(MainWindow *mw, lttvwindow_viewer_constructor viewe */ void lttvwindow_register_constructor - (char * menu_path, + (char * name, + char * menu_path, char * menu_text, char ** pixmap, char * tooltip, @@ -228,6 +251,8 @@ void lttvwindow_register_constructor LttvMenuClosure menu_c; LttvAttributeValue value; + if(view_constructor == NULL) return; + if(pixmap != NULL) { g_assert(lttv_iattribute_find_by_path(attributes_global, "viewers/toolbar", LTTV_POINTER, &value)); @@ -260,6 +285,19 @@ void lttvwindow_register_constructor (gpointer)add_menu_constructor, &menu_c); } + { + LttvAttribute *attribute; + g_assert(attribute = + LTTV_ATTRIBUTE(lttv_iattribute_find_subdir( + LTTV_IATTRIBUTE(attributes_global), + LTTV_VIEWER_CONSTRUCTORS))); + + g_assert(lttv_iattribute_find_by_path(LTTV_IATTRIBUTE(attribute), + name, LTTV_POINTER, &value)); + + *(value.v_pointer) = view_constructor; + + } } @@ -303,6 +341,29 @@ void lttvwindow_unregister_constructor view_constructor); lttv_menus_remove(menu, view_constructor); } + + { + LttvAttribute *attribute; + g_assert(attribute = + LTTV_ATTRIBUTE(lttv_iattribute_find_subdir( + LTTV_IATTRIBUTE(attributes_global), + LTTV_VIEWER_CONSTRUCTORS))); + + guint num = lttv_iattribute_get_number(LTTV_IATTRIBUTE(attribute)); + guint i; + LttvAttributeName name; + LttvAttributeValue value; + LttvAttributeType type; + + for(i=0;itraceset_info->traceset_context); TimeInterval time_span = tsc->time_span; GtkAdjustment *adjustment = gtk_range_get_adjustment(GTK_RANGE(tab->scrollbar)); - g_object_set(G_OBJECT(adjustment), "lower", - ltt_time_to_double(time_span.start_time) - * NANOSECONDS_PER_SECOND, /* lower */ + 0.0, /* lower */ "upper", - ltt_time_to_double(time_span.end_time) + ltt_time_to_double( + ltt_time_sub(time_span.end_time, time_span.start_time)) * NANOSECONDS_PER_SECOND, /* upper */ "step_increment", ltt_time_to_double(time_window->time_width) @@ -717,8 +781,11 @@ void lttvwindow_report_time_window(Tab *tab, /* Note : the set value will call set_time_window if scrollbar value changed */ gtk_adjustment_set_value(adjustment, - ltt_time_to_double(time_window->start_time) - * NANOSECONDS_PER_SECOND); + ltt_time_to_double( + ltt_time_sub(time_window->start_time, + time_span.start_time)) + * NANOSECONDS_PER_SECOND); +#endif //0 } @@ -731,17 +798,12 @@ void lttvwindow_report_time_window(Tab *tab, */ void lttvwindow_report_current_time(Tab *tab, - const LttTime *time) + LttTime time) { LttvAttributeValue value; LttvHooks * tmp; - tab->current_time = *time; - g_assert(lttv_iattribute_find_by_path(tab->attributes, - "hooks/updatecurrenttime", LTTV_POINTER, &value)); - tmp = (LttvHooks*)*(value.v_pointer); - - if(tmp == NULL)return; - lttv_hooks_call(tmp, &tab->current_time); + + current_time_change_manager(tab, time); } /** @@ -763,23 +825,6 @@ void lttvwindow_report_dividor(Tab *tab, gint position) lttv_hooks_call(tmp, &position); } -/** - * Function to set the focused pane (viewer). - * It will be called by a viewer's signal handle associated with - * the grab_focus signal - * @param tab viewer's tab - * @param top_widget the top widget containing all the other widgets of the - * viewer. - */ - -void lttvwindow_report_focus(Tab *tab, GtkWidget *top_widget) -{ - //FIXME - //gtk_multi_vpaned_set_focus(tab->multivpaned, - // GTK_PANED(gtk_widget_get_parent(top_widget))); -} - - /** * Function to request data in a specific time interval to the main window. The * event request servicing is differed until the glib idle functions are @@ -835,18 +880,23 @@ gint find_viewer (const EventsRequest *a, gconstpointer b) void lttvwindow_events_request_remove_all(Tab *tab, gconstpointer viewer) { - GSList *element; + GSList *element = tab->events_requests; while((element = - g_slist_find_custom(tab->events_requests, viewer, + g_slist_find_custom(element, viewer, (GCompareFunc)find_viewer)) != NULL) { EventsRequest *events_request = (EventsRequest *)element->data; - if(events_request->servicing == TRUE) { - lttv_hooks_call(events_request->after_request, NULL); - } + // Modified so a viewer being destroyed won't have its after_request + // called. Not so important anyway. Note that a viewer that call this + // remove_all function will not get its after_request called. + //if(events_request->servicing == TRUE) { + // lttv_hooks_call(events_request->after_request, NULL); + //} g_free(events_request); tab->events_requests = g_slist_remove_link(tab->events_requests, element); + element = g_slist_next(element); + if(element == NULL) break; /* end of list */ } if(g_slist_length(tab->events_requests) == 0) { tab->events_request_pending = FALSE; @@ -866,7 +916,7 @@ void lttvwindow_events_request_remove_all(Tab *tab, * @return time window. */ -TimeWindow lttvwindow_get_time_window(Tab *tab) +__inline TimeWindow lttvwindow_get_time_window(Tab *tab) { return tab->time_window;