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