288 lines
9.6 KiB
Prolog
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 |