def __init__(self, title, initial_dir, initial_filename, callback): self.callback = callback self.chooser = gtk.FileChooserDialog(title=title, action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK)) if initial_dir: self.chooser.set_current_folder(initial_dir) if initial_filename: self.chooser.set_filename(initial_filename) self.th_viewer = ThumbnailViewer(300) widget = self.th_viewer.get_widget() self.chooser.set_preview_widget(widget) self.chooser.set_preview_widget_active(True) self.chooser.connect("selection-changed", self.on_selection_changed) img_filter = gtk.FileFilter() img_filter.set_name("All supported files") img_filter.add_pixbuf_formats() for ext in (ArchiveFile.valid_extensions + PDFFile.valid_extensions + EPUBFile.valid_extensions + VideoFile.valid_extensions): img_filter.add_pattern("*." + ext) self.chooser.add_filter(img_filter) img_filter = gtk.FileFilter() img_filter.set_name("Images") img_filter.add_pixbuf_formats() self.chooser.add_filter(img_filter) self.add_filter("Archive Files", ArchiveFile.valid_extensions) self.add_filter("PDF Files", PDFFile.valid_extensions) self.add_filter("EPub Files", EPUBFile.valid_extensions) self.add_filter("Video Files", VideoFile.valid_extensions)
class FileSelectorDialogGTK: def __init__(self, title, initial_dir, initial_filename, callback): self.callback = callback self.chooser = gtk.FileChooserDialog(title=title, action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK)) if initial_dir: self.chooser.set_current_folder(initial_dir) if initial_filename: self.chooser.set_filename(initial_filename) self.th_viewer = ThumbnailViewer(300) widget = self.th_viewer.get_widget() self.chooser.set_preview_widget(widget) self.chooser.set_preview_widget_active(True) self.chooser.connect("selection-changed", self.on_selection_changed) img_filter = gtk.FileFilter() img_filter.set_name("All supported files") img_filter.add_pixbuf_formats() for ext in (ArchiveFile.valid_extensions + PDFFile.valid_extensions + EPUBFile.valid_extensions + VideoFile.valid_extensions): img_filter.add_pattern("*." + ext) self.chooser.add_filter(img_filter) img_filter = gtk.FileFilter() img_filter.set_name("Images") img_filter.add_pixbuf_formats() self.chooser.add_filter(img_filter) self.add_filter("Archive Files", ArchiveFile.valid_extensions) self.add_filter("PDF Files", PDFFile.valid_extensions) self.add_filter("EPub Files", EPUBFile.valid_extensions) self.add_filter("Video Files", VideoFile.valid_extensions) def add_filter(self, name, extensions): filter_ = gtk.FileFilter() filter_.set_name(name) for ext in extensions: filter_.add_pattern("*." + ext) self.chooser.add_filter(filter_) def on_selection_changed(self, chooser): filename = chooser.get_preview_filename() if filename: if os.path.isfile(filename): self.th_viewer.load(FileFactory.create(filename)) self.th_viewer.show() else: self.th_viewer.hide() else: self.th_viewer.hide() def run(self): response = self.chooser.run() selection = self.chooser.get_filename() self.chooser.destroy() if response == gtk.RESPONSE_OK: self.callback(selection)