SXXXXXXX_RadarDataReader/_src_idl/pcrdv_E/PRO/sliding_selection.pro
VALLONGOL 5de2650675 add
2025-11-12 13:43:30 +01:00

288 lines
9.6 KiB
Prolog

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