243 lines
7.2 KiB
Prolog
243 lines
7.2 KiB
Prolog
|
|
;=Procedura : SELECT_FILE================================================================
|
|
|
|
FUNCTION select_file , $ ; @METAGS select_file
|
|
|
|
;-Input---------------------------
|
|
start_path , $
|
|
filtro , $
|
|
window_title , $
|
|
x_pos = x_pos , $
|
|
y_pos = y_pos , $
|
|
font = font , $
|
|
xsize = xsize , $
|
|
save = save , $
|
|
filename = filename , $
|
|
recent_folder = recent_folder , $
|
|
warn = warn , $
|
|
multiple = multiple
|
|
;---------------------------------
|
|
|
|
|
|
; **************************************************************************************
|
|
; * La funzione permette di selezionare un file o una directory partendo da *
|
|
; * "start_path" ed applicando un filtro "filtro" sul tipo di file da cercare. *
|
|
; * Il file viene restituito con l'intero path. Se non viene selezionato niente, la *
|
|
; * funzione restituisce la stringa 'Empty'. *
|
|
; * E' possibile impostare una scelta multipla utilizzando la keyword /Multiple. In *
|
|
; * questo caso il risultato sarà un array di stringhe. *
|
|
; * Il filtro deve essere un array di stringhe. Se i filtri devono essere multipli *
|
|
; * (or tra filtri) vanno riportati come elemento unico separati da una virgola: *
|
|
; * Es.: ['All Files' , '.jpeg' , '.txt , .text'] *
|
|
; * Quando non viene specificato nessun filtro, questo sara` impostato a "All files". *
|
|
; **************************************************************************************
|
|
|
|
|
|
;--Opzioni di compilazione--
|
|
COMPILE_OPT STRICTARR
|
|
|
|
file_selected = 'Empty'
|
|
|
|
; Verifica e definizione path
|
|
; di partenza
|
|
IF (N_ELEMENTS(start_path) EQ 0) THEN $
|
|
BEGIN
|
|
start_path = '.\'
|
|
ENDIF $
|
|
ELSE BEGIN
|
|
test = SIZE(start_path)
|
|
IF (test[test[0] + 1] NE 7) THEN $
|
|
BEGIN
|
|
start_path = '.\'
|
|
ENDIF $
|
|
ELSE BEGIN
|
|
start_path = start_path[0]
|
|
ENDELSE
|
|
ENDELSE
|
|
|
|
; Definizione dei filtri
|
|
IF (N_ELEMENTS(filtro) EQ 0) THEN $
|
|
BEGIN
|
|
filtro = ['All Files']
|
|
ENDIF
|
|
|
|
|
|
; Verifica titolo
|
|
IF (N_ELEMENTS(window_title) EQ 0) THEN $
|
|
BEGIN
|
|
window_title = 'Searching file...'
|
|
ENDIF
|
|
|
|
; Verifica posizione
|
|
IF (N_ELEMENTS(x_pos) EQ 0) THEN $
|
|
BEGIN
|
|
x_pos = 0
|
|
ENDIF
|
|
IF (N_ELEMENTS(y_pos) EQ 0) THEN $
|
|
BEGIN
|
|
y_pos = 0
|
|
ENDIF
|
|
|
|
; Verifica nome file
|
|
IF (N_ELEMENTS(filename) EQ 0) THEN $
|
|
BEGIN
|
|
filename = ''
|
|
ENDIF
|
|
|
|
; Verifica save
|
|
IF (N_ELEMENTS(save) EQ 0) THEN $
|
|
BEGIN
|
|
save = 0
|
|
ENDIF
|
|
|
|
; Verifica warn
|
|
IF (N_ELEMENTS(warn) EQ 0) THEN $
|
|
BEGIN
|
|
warn = 0
|
|
ENDIF
|
|
|
|
; Verifica multiple
|
|
IF (N_ELEMENTS(multiple) EQ 0) THEN $
|
|
BEGIN
|
|
multiple = 0
|
|
ENDIF
|
|
|
|
quit_select_file = 0
|
|
WHILE (quit_select_file EQ 0) DO $
|
|
BEGIN
|
|
|
|
base_id = WIDGET_BASE( /Column , /Base_Align_Left , Title = window_title , $
|
|
XOffset = x_pos , YOffset = y_pos )
|
|
|
|
IF (N_ELEMENTS(recent_folder) GT 0) THEN $
|
|
BEGIN
|
|
|
|
font_present = FIX(N_ELEMENTS(font) GT 0)
|
|
|
|
IF (N_ELEMENTS(recent_folder) NE 0) THEN $
|
|
BEGIN
|
|
xsize = MAX(STRLEN(recent_folder))
|
|
ENDIF
|
|
|
|
CASE (1) OF
|
|
(font_present EQ 0) : $ ; no font & xsize
|
|
BEGIN
|
|
search_id = dsrm_cw_filesel( base_id , $
|
|
Path = start_path , $
|
|
UName = 'search_file' , $
|
|
Filter = filtro , $
|
|
XSize = xsize , $
|
|
Save = save , $
|
|
Warn_exist = warn , $
|
|
Multiple = multiple , $
|
|
Filename = filename )
|
|
END
|
|
(font_present EQ 1) : $ ; font + xsize
|
|
BEGIN
|
|
xsize = xsize + 20
|
|
search_id = dsrm_cw_filesel( base_id , $
|
|
Path = start_path , $
|
|
UName = 'search_file' , $
|
|
Filter = filtro , $
|
|
Font = font , $
|
|
XSize = xsize , $
|
|
Save = save , $
|
|
Warn_exist = warn , $
|
|
Multiple = multiple , $
|
|
Filename = filename )
|
|
END
|
|
ENDCASE
|
|
ENDIF $
|
|
ELSE BEGIN
|
|
search_id = dsrm_cw_filesel( base_id , $
|
|
Path = start_path , $
|
|
UName = 'search_file' , $
|
|
Filter = filtro , $
|
|
Save = save , $
|
|
Warn_exist = warn , $
|
|
Multiple = multiple , $
|
|
Filename = filename )
|
|
ENDELSE
|
|
|
|
|
|
|
|
|
|
IF (N_ELEMENTS(recent_folder) GT 0) THEN $
|
|
BEGIN
|
|
box_for_recent = WIDGET_BASE( base_id , /Row)
|
|
label_recent_f = WIDGET_LABEL( box_for_recent , Value = ' Recent folders: ' )
|
|
|
|
IF (font_present) THEN $
|
|
BEGIN
|
|
recent_f_id = WIDGET_DROPLIST( box_for_recent , Value = recent_folder , $
|
|
Font = font )
|
|
ENDIF $
|
|
ELSE BEGIN
|
|
recent_f_id = WIDGET_DROPLIST( box_for_recent , Value = recent_folder )
|
|
ENDELSE
|
|
ENDIF
|
|
|
|
|
|
|
|
WIDGET_CONTROL , base_id , /Realize
|
|
|
|
|
|
|
|
; Ciclo while per la gestione di tutti gli eventi
|
|
exit_search = 0
|
|
WHILE (exit_search EQ 0) DO $
|
|
BEGIN
|
|
evento = WIDGET_EVENT( base_id , Bad_Id = base_destroyed )
|
|
|
|
IF (base_destroyed EQ 0) THEN $
|
|
BEGIN
|
|
CASE (evento.id) OF
|
|
|
|
search_id : $
|
|
BEGIN
|
|
CASE (evento.done) OF
|
|
1 : $
|
|
BEGIN
|
|
file_selected = evento.value
|
|
WIDGET_CONTROL , base_id , /Destroy
|
|
exit_search = 1
|
|
quit_select_file = 1
|
|
END
|
|
2 : $
|
|
BEGIN
|
|
WIDGET_CONTROL , base_id , /Destroy
|
|
exit_search = 1
|
|
quit_select_file = 1
|
|
END
|
|
ELSE : $
|
|
BEGIN
|
|
|
|
END
|
|
ENDCASE
|
|
END
|
|
|
|
recent_f_id : $
|
|
BEGIN
|
|
start_path = recent_folder[evento.index]
|
|
WIDGET_CONTROL , base_id , /Destroy
|
|
exit_search = 1
|
|
END
|
|
|
|
ELSE : $
|
|
BEGIN
|
|
stop
|
|
WIDGET_CONTROL , base_id , /Destroy
|
|
END
|
|
ENDCASE
|
|
ENDIF $
|
|
ELSE BEGIN
|
|
exit_search = 1
|
|
quit_select_file = 1
|
|
ENDELSE
|
|
END ; While
|
|
END ; While
|
|
|
|
RETURN , file_selected
|
|
|
|
END ; select_file
|
|
;======================================================================================== |