+/* 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;
+
+ 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);
+ }
+}
+
+