PRO sliding_selection , $ ; @METAGS sliding_selection_interval ;-Input----------------- min_selection , $ max_selection , $ min_interval , $ min_step = min_step , $ ; facoltativo max_step = max_step , $ ; facoltativo titolo_menu , $ start_label , $ stop_label , $ interval_label , $ x_offset = x_offset , $ ; facoltativo y_offset = y_offset , $ ; facoltativo int_type = int_type , $ ; facoltativo (float = 0, integer = 1) ;----------------------- ;-Input/Output---------- start_selection , $ stop_selection , $ ;----------------------- ;-Output---------------- confirmation ;----------------------- IF (N_ELEMENTS(x_offset) EQ 0) THEN $ BEGIN x_offset = 0 ENDIF IF (N_ELEMENTS(y_offset) EQ 0) THEN $ BEGIN y_offset = 0 ENDIF IF (N_ELEMENTS(max_step) EQ 0) THEN $ BEGIN max_step = 0.0001 * (max_selection - min_selection) ENDIF min_step = (N_ELEMENTS(min_step) EQ 0) ? max_step : min_step print, '------ modifica AM ------' print, 'min_step ', min_step print, 'max_step ', max_step print, '------ modifica AM ------' IF (N_ELEMENTS(int_type) EQ 0) THEN $ BEGIN int_type = 0 ENDIF IF (int_type EQ 1) THEN $ BEGIN total_interval_gap = 1 start_selection = FIX(start_selection) stop_selection = FIX(stop_selection) ENDIF $ ELSE BEGIN total_interval_gap = 0 ENDELSE ; Verifica compatibilità minimo step - minimo intervallo ; ....... local_start = start_selection local_stop = stop_selection confirmation = 0 base_id = WIDGET_BASE( /Column , /Base_Align_Center , Title = titolo_menu , $ Xoffset = x_offset , Yoffset = y_offset ) start_slider_box_id = WIDGET_BASE( base_id , /Row ) stop_slider_box_id = WIDGET_BASE( base_id , /Row ) button_box_id = WIDGET_BASE( base_id , /Row , /Base_Align_Center ) IF (int_type) THEN $ BEGIN start_text_id = CW_FIELD( start_slider_box_id , /Long , $ Title = start_label , Value = start_selection , $ /Return_Events , Font = 'Lucida Console' ) ENDIF $ ELSE BEGIN start_text_id = CW_FIELD( start_slider_box_id , /Floating , $ Title = start_label , Value = start_selection , $ /Return_Events , Font = 'Lucida Console' ) ENDELSE start_slider_id = CW_FSLIDER( start_slider_box_id , /Drag , /Suppress_Value , XSize = 200 , $ Maximum = max_selection , Minimum = min_selection , $ Value = start_selection , Scroll = max_step) IF (int_type) THEN $ BEGIN stop_text_id = CW_FIELD( stop_slider_box_id , /Long , $ Title = stop_label , Value = stop_selection , $ /Return_Events , Font = 'Lucida Console' ) ENDIF $ ELSE BEGIN stop_text_id = CW_FIELD( stop_slider_box_id , /Floating , $ Title = stop_label , Value = stop_selection , $ /Return_Events , Font = 'Lucida Console' ) ENDELSE stop_slider_id = CW_FSLIDER( stop_slider_box_id , /Drag , /Suppress_Value , XSize = 200 , $ Maximum = max_selection , Minimum = min_selection , $ Value = stop_selection , Scroll = max_step) interval_text_id = CW_FIELD( button_box_id , /Float , Title = interval_label , $ Value = (stop_selection - start_selection + total_interval_gap) , $ /Return_Events , Font = 'Lucida Console' ) confirm_button_id = WIDGET_BUTTON( button_box_id , $ Value = 'Confirm' ) exit_button_id = WIDGET_BUTTON( button_box_id , $ Value = 'Exit' ) WIDGET_CONTROL , base_id , /Realize ; ; Lancio della gestione dei widget exit_main_widget = 0 WHILE (exit_main_widget EQ 0) DO $ BEGIN evento = WIDGET_EVENT( base_id , Bad_Id = base_destroyed ) IF (base_destroyed EQ 0) THEN $ BEGIN CASE (evento.id) OF start_slider_id : $ BEGIN WIDGET_CONTROL , start_slider_id , Get_Value = current_value num_quanti = ROUND(current_value / min_step) current_value = num_quanti * min_step IF (current_value GT (max_selection - min_interval)) THEN $ BEGIN current_value = (max_selection - min_interval) WIDGET_CONTROL , start_slider_id , Set_Value = current_value ENDIF local_start = current_value WIDGET_CONTROL , start_text_id , Set_Value = current_value IF (local_start GT (local_stop - min_interval)) THEN $ BEGIN local_stop = (local_start + min_interval) WIDGET_CONTROL , stop_text_id , Set_Value = local_stop WIDGET_CONTROL , stop_slider_id , Set_Value = local_stop ENDIF WIDGET_CONTROL , interval_text_id , Set_Value = (local_stop - local_start + total_interval_gap) END stop_slider_id : $ BEGIN WIDGET_CONTROL , stop_slider_id , Get_Value = current_value num_quanti = ROUND(current_value / min_step) current_value = num_quanti * min_step IF (current_value LT (min_selection + min_interval)) THEN $ BEGIN current_value = (min_selection + min_interval) WIDGET_CONTROL , stop_slider_id , Set_Value = current_value ENDIF local_stop = current_value WIDGET_CONTROL , stop_text_id , Set_Value = current_value IF (local_stop LT (local_start + min_interval)) THEN $ BEGIN local_start = (local_stop - min_interval) WIDGET_CONTROL , start_text_id , Set_Value = local_start WIDGET_CONTROL , start_slider_id , Set_Value = local_start ENDIF WIDGET_CONTROL , interval_text_id , Set_Value = (local_stop - local_start + total_interval_gap) END start_text_id : $ BEGIN WIDGET_CONTROL , start_text_id , Get_Value = current_value num_quanti = ROUND(current_value / min_step) current_value = num_quanti * min_step IF (current_value LT min_selection) THEN $ BEGIN current_value = min_selection WIDGET_CONTROL , start_text_id , Set_Value = current_value ENDIF IF (current_value GT (max_selection - min_interval)) THEN $ BEGIN current_value = (max_selection - min_interval) WIDGET_CONTROL , start_text_id , Set_Value = current_value ENDIF local_start = current_value WIDGET_CONTROL , start_slider_id , Set_Value = current_value IF (local_start GT (local_stop - min_interval)) THEN $ BEGIN local_stop = (local_start + min_interval) WIDGET_CONTROL , stop_text_id , Set_Value = local_stop WIDGET_CONTROL , stop_slider_id , Set_Value = local_stop ENDIF WIDGET_CONTROL , interval_text_id , Set_Value = (local_stop - local_start + total_interval_gap) END stop_text_id : $ BEGIN WIDGET_CONTROL , stop_text_id , Get_Value = current_value num_quanti = ROUND(current_value / min_step) current_value = num_quanti * min_step local_stop = current_value IF (current_value GT max_selection) THEN $ BEGIN local_stop = max_selection WIDGET_CONTROL , stop_text_id , Set_Value = local_stop ENDIF IF (local_stop LT (min_selection + min_interval)) THEN $ BEGIN local_stop = (min_selection + min_interval) WIDGET_CONTROL , stop_text_id , Set_Value = local_stop ENDIF WIDGET_CONTROL , stop_slider_id , Set_Value = local_stop IF (local_stop LT (local_start + min_interval)) THEN $ BEGIN local_start = (local_stop - min_interval) WIDGET_CONTROL , start_text_id , Set_Value = local_start WIDGET_CONTROL , start_slider_id , Set_Value = local_start ENDIF WIDGET_CONTROL , interval_text_id , Set_Value = (local_stop - local_start + total_interval_gap) END interval_text_id : $ BEGIN WIDGET_CONTROL , interval_text_id , Get_Value = current_interval current_interval = ( (current_interval < (max_selection - min_selection)) > min_interval ) local_stop = ( (local_start + current_interval - total_interval_gap) < max_selection ) local_start = local_stop - current_interval + total_interval_gap WIDGET_CONTROL , start_text_id , Set_Value = local_start WIDGET_CONTROL , start_slider_id , Set_Value = local_start WIDGET_CONTROL , stop_text_id , Set_Value = local_stop WIDGET_CONTROL , stop_slider_id , Set_Value = local_stop END confirm_button_id : $ BEGIN start_selection = local_start stop_selection = local_stop confirmation = 1 WIDGET_CONTROL , base_id , /Destroy END exit_button_id : $ BEGIN WIDGET_CONTROL , base_id , /Destroy END ENDCASE ENDIF $ ELSE BEGIN exit_main_widget = 1 ENDELSE END ; While END ; sliding_selection_interval