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

109 lines
3.2 KiB
Prolog

;=Procedura SELECTING_ITEM==============================================================
FUNCTION selecting_item , $ ; @METAGS selecting_item
;-Input--------
menu , $
title , $
x_pos_pix , $
y_pos_pix
;--Opzioni di compilazione--
COMPILE_OPT STRICTARR
;--------------
; **************************************************************************************
; * La funzione attiva e gestisce un widget (con la routine di gestione di seguito *
; * riportata) che permette all'utente di scegliere tra una serie di voci in un menu *
; * restituendo semplicemente l'indice della voce scelta. *
; * Il widget viene cancellato al momento della scelta. *
; * *
; * menu --> array di stringhe: ogni elemento e` una voce di scelta *
; * title --> titolo della finestra. Se 'undefined' il titolo viene impostato *
; * come : "MAIN MENU" *
; * x_pos_pix --> posizione X in pixel dell'angolo superiore sinistro del widget. *
; * Se incognito viene fissato a 0. *
; * y_pos_pix --> posizione Y in pixel dell'angolo superiore sinistro del widget. *
; * Se incognito viene fissato a 0. *
; * *
; **************************************************************************************
COMMON scelta_eseguita , choice
; Verifica degli input
test_menu = SIZE(menu)
test_title = SIZE(title)
IF (test_menu[test_menu[0] + 1] NE 7) THEN $
BEGIN
message = ['Le voci di scelta del menu` devono essere delle stringhe']
ok = DIALOG_MESSAGE( message )
RETURN , -1
ENDIF
IF (test_title[test_title[0] + 1] NE 7) THEN $
BEGIN
title = 'MAIN_MENU'
ENDIF
; Definizione dati ausiliari
num_menu_items = N_ELEMENTS(menu)
; Definizione della posizione dei widget
IF (N_ELEMENTS(x_pos_pix) EQ 0) THEN $
BEGIN
x_pos_pix = 0
ENDIF
IF (N_ELEMENTS(y_pos_pix) EQ 0) THEN $
BEGIN
y_pos_pix = 0
ENDIF
; Definizione widget principale del menu
IF (num_menu_items LE 30) THEN $
BEGIN
base = WIDGET_BASE( /Column , /Base_Align_Center , Title = title , $
Xoffset = x_pos_pix , Yoffset = y_pos_pix )
ENDIF $
ELSE BEGIN
base = WIDGET_BASE( /Column , /Base_Align_Center , Title = title , $
Y_Scroll_Size = 950 , Xoffset = x_pos_pix )
ENDELSE
buttons_list = CW_BGROUP( base , menu , /Column )
WIDGET_CONTROL, base, /Realize
choice = -1
quit_widget = 0
WHILE (quit_widget EQ 0) DO $
BEGIN
evento = WIDGET_EVENT( base , Bad_Id = base_destroyed )
IF (base_destroyed EQ 0) THEN $
BEGIN
choice = evento.value
WIDGET_CONTROL , base , /Destroy
ENDIF $
ELSE BEGIN
quit_widget = 1
ENDELSE
END ; While
RETURN , choice
END ; selecting_item
;=======================================================================================