def create_file_dialog(dialog_type, directory, allow_multiple, save_filename, file_types): window = list(BrowserView.instances.values())[0] # arbitary 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
def _add_file_filters(self, dialog, file_types): for s in file_types: description, extensions = _parse_file_type(s) f = gtk.FileFilter() f.set_name(description) for e in extensions.split(';'): f.add_pattern(e) dialog.add_filter(f)
def create_file_dialog(dialog_type, directory, allow_multiple, save_filename, file_types): file_filter = [] # Parse file_types to obtain allowed file extensions for s in file_types: description, extensions = _parse_file_type(s) file_extensions = [ i.lstrip('*.') for i in extensions.split(';') if i != '*.*' ] file_filter.append([description, file_extensions or None]) i = list(BrowserView.instances.values())[0] # arbitary instance return i.create_file_dialog(dialog_type, directory, allow_multiple, save_filename, file_filter)