def create_file_dialog(self, dialog_type=10, directory='', allow_multiple=False, save_filename='', file_types=()): """ Create a file dialog :param dialog_type: Dialog type: open file (OPEN_DIALOG), save file (SAVE_DIALOG), open folder (OPEN_FOLDER). Default is open file. :param directory: Initial directory :param allow_multiple: Allow multiple selection. Default is false. :param save_filename: Default filename for save file dialog. :param file_types: Allowed file types in open file dialog. Should be a tuple of strings in the format: filetypes = ('Description (*.extension[;*.extension[;...]])', ...) :return: A tuple of selected files, None if cancelled. """ if type(file_types) != tuple and type(file_types) != list: raise TypeError('file_types must be a tuple of strings') for f in file_types: parse_file_type(f) if not os.path.exists(directory): directory = '' return self.gui.create_file_dialog(dialog_type, directory, allow_multiple, save_filename, file_types, self.uid)
def create_file_dialog(dialog_type, directory, allow_multiple, save_filename, file_types, uid): window = BrowserView.instances[uid] if not directory: directory = os.environ['HOMEPATH'] try: if dialog_type == FOLDER_DIALOG: dialog = WinForms.FolderBrowserDialog() dialog.RestoreDirectory = True if directory: dialog.SelectedPath = directory result = dialog.ShowDialog(window) if result == WinForms.DialogResult.OK: file_path = (dialog.SelectedPath,) else: file_path = None elif dialog_type == OPEN_DIALOG: dialog = WinForms.OpenFileDialog() dialog.Multiselect = allow_multiple dialog.InitialDirectory = directory if len(file_types) > 0: dialog.Filter = '|'.join(['{0} ({1})|{1}'.format(*parse_file_type(f)) for f in file_types]) else: dialog.Filter = window.localization['windows.fileFilter.allFiles'] + ' (*.*)|*.*' dialog.RestoreDirectory = True result = dialog.ShowDialog(window) if result == WinForms.DialogResult.OK: file_path = tuple(dialog.FileNames) else: file_path = None elif dialog_type == SAVE_DIALOG: dialog = WinForms.SaveFileDialog() if len(file_types) > 0: dialog.Filter = '|'.join(['{0} ({1})|{1}'.format(*parse_file_type(f)) for f in file_types]) else: dialog.Filter = window.localization['windows.fileFilter.allFiles'] + ' (*.*)|*.*' dialog.InitialDirectory = directory dialog.RestoreDirectory = True dialog.FileName = save_filename result = dialog.ShowDialog(window) if result == WinForms.DialogResult.OK: file_path = dialog.FileName else: file_path = None return file_path except: logger.exception('Error invoking {0} dialog'.format(dialog_type)) return None
def create_file_dialog(dialog_type, directory, allow_multiple, save_filename, file_types): window = list(BrowserView.instances.values())[0] # arbitrary instance if not directory: directory = os.environ['HOMEPATH'] try: if dialog_type == FOLDER_DIALOG: dialog = WinForms.FolderBrowserDialog() dialog.RestoreDirectory = True result = dialog.ShowDialog(window) if result == WinForms.DialogResult.OK: file_path = (dialog.SelectedPath,) else: file_path = None elif dialog_type == OPEN_DIALOG: dialog = WinForms.OpenFileDialog() dialog.Multiselect = allow_multiple dialog.InitialDirectory = directory if len(file_types) > 0: dialog.Filter = '|'.join(['{0} ({1})|{1}'.format(*parse_file_type(f)) for f in file_types]) else: dialog.Filter = localization['windows.fileFilter.allFiles'] + ' (*.*)|*.*' dialog.RestoreDirectory = True result = dialog.ShowDialog(window) if result == WinForms.DialogResult.OK: file_path = tuple(dialog.FileNames) else: file_path = None elif dialog_type == SAVE_DIALOG: dialog = WinForms.SaveFileDialog() dialog.Filter = localization['windows.fileFilter.allFiles'] + ' (*.*)|' dialog.InitialDirectory = directory dialog.RestoreDirectory = True dialog.FileName = save_filename result = dialog.ShowDialog(window) if result == WinForms.DialogResult.OK: file_path = dialog.FileName else: file_path = None return file_path except: logger.exception('Error invoking {0} dialog'.format(dialog_type)) return None