109 lines
3.2 KiB
Prolog
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
|
|
;=======================================================================================
|