Skip to content

Commit

Permalink
Merge pull request #41 from frankMilde/master
Browse files Browse the repository at this point in the history
fix #39 Add image preview to file chooser
  • Loading branch information
adrienverge authored Jan 1, 2017
2 parents f5b4c62 + b952465 commit b248443
Showing 1 changed file with 44 additions and 9 deletions.
53 changes: 44 additions & 9 deletions photocollage/gtkgui.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import cairo
import gi
gi.require_version('Gtk', '3.0') # noqa
from gi.repository import Gtk, Gdk, GObject
from gi.repository import Gtk, Gdk, GObject, GdkPixbuf
from six.moves import urllib # Python 2 backward compatibility

from photocollage import APP_NAME, artwork, collage, render
Expand Down Expand Up @@ -282,14 +282,11 @@ def update_photolist(self, new_images):
dialog.destroy()

def choose_images(self, button):
dialog = Gtk.FileChooserDialog(_("Choose images"),
button.get_toplevel(),
Gtk.FileChooserAction.OPEN,
select_multiple=True)
dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
dialog.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK)

set_open_image_filters(dialog)
dialog = PreviewFileChooserDialog(title=_("Choose images"),
parent=button.get_toplevel(),
action=Gtk.FileChooserAction.OPEN,
select_multiple=True,
modal=True)

if dialog.run() == Gtk.ResponseType.OK:
files = dialog.get_filenames()
Expand Down Expand Up @@ -769,6 +766,44 @@ def __init__(self, parent, message):
self.show_all()


class PreviewFileChooserDialog(Gtk.FileChooserDialog):
PREVIEW_MAX_SIZE = 256

def __init__(self, **kw):
super(PreviewFileChooserDialog, self).__init__(**kw)

self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
self.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK)

set_open_image_filters(self)

self._preview = Gtk.Image()
# Don't let preview size down horizontally for skinny images, cause
# that looks distracting
self._preview.set_size_request(
PreviewFileChooserDialog.PREVIEW_MAX_SIZE, -1)
self.set_preview_widget(self._preview)
self.set_use_preview_label(False)
self.connect("update-preview", self.update_preview_cb)

def update_preview_cb(self, file_chooser):
filename = self.get_preview_filename()
if filename is None or os.path.isdir(filename):
self.set_preview_widget_active(False)
return
try:
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
filename,
PreviewFileChooserDialog.PREVIEW_MAX_SIZE,
PreviewFileChooserDialog.PREVIEW_MAX_SIZE)
self._preview.set_from_pixbuf(pixbuf)
except Exception as e:
print(e)
self.set_preview_widget_active(False)
return
self.set_preview_widget_active(True)


def main():
# Enable threading. Without that, threads hang!
GObject.threads_init()
Expand Down

0 comments on commit b248443

Please sign in to comment.