;=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 ;=======================================================================================