From 388d350ecd6865c0dd646a19238c3a62706138dc Mon Sep 17 00:00:00 2001 From: flavio Date: Thu, 01 Aug 2013 21:11:43 +0000 Subject: Mejoras en la modularización de NewPollCanvas. --- diff --git a/Widgets.py b/Widgets.py index d113884..8180dd6 100644 --- a/Widgets.py +++ b/Widgets.py @@ -22,14 +22,17 @@ from gettext import gettext as _ from gi.repository import Gtk +from gi.repository import GdkPixbuf + +from sugar3.graphics.alert import NotifyAlert +from sugar3 import mime +from sugar3.graphics.objectchooser import ObjectChooser from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.graphics.toolbutton import ToolButton from sugar3.activity.widgets import StopButton from sugar3.activity.widgets import ActivityToolbarButton -from sugar3.graphics.alert import NotifyAlert - class Toolbar(ToolbarBox): def __init__(self, activity): @@ -116,13 +119,13 @@ class NewPollCanvas(Gtk.Box): if self._poll.activity._already_loaded_image_in_answer(choice): button = Gtk.Button(_("Change Image")) hbox.pack_start(button, True, False, 10) - self._poll.activity._show_image_thumbnail(hbox, choice) + self.__show_image_thumbnail(hbox, choice) else: button = Gtk.Button(_("Add Image")) hbox.pack_start(button, True, False, 10) - button.connect('clicked', self._poll.activity._button_choose_image_cb, + button.connect('clicked', self._button_choose_image_cb, str(choice), hbox) # PREVIEW & SAVE buttons @@ -140,6 +143,84 @@ class NewPollCanvas(Gtk.Box): self.show_all() + def _button_choose_image_cb(self, button, data=None, data2=None): + + if hasattr(mime, 'GENERIC_TYPE_IMAGE'): + chooser = ObjectChooser(_('Choose image'), self, + Gtk.DialogFlags.MODAL | + Gtk.DialogFlags.DESTROY_WITH_PARENT, + what_filter=mime.GENERIC_TYPE_IMAGE) + + else: + chooser = ObjectChooser(_('Choose image'), self, + Gtk.DialogFlags.MODAL | + Gtk.DialogFlags.DESTROY_WITH_PARENT) + + try: + result = chooser.run() + + if result == Gtk.ResponseType.ACCEPT: + #logging.debug('ObjectChooser: %r' % + # chooser.get_selected_object()) + + jobject = chooser.get_selected_object() + + images_mime_types = mime.get_generic_type( + mime.GENERIC_TYPE_IMAGE).mime_types + + if jobject and jobject.file_path and \ + jobject.metadata.get('mime_type') in images_mime_types: + + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( + jobject.file_path, self._poll.activity._image_size['height'], + self._poll.activity._image_size['width']) + + self._poll.images[int(data)] = pixbuf + + self._poll.images_ds_objects[int(data)]['id'] = \ + jobject.object_id + + self._poll.images_ds_objects[int(data)]['file_path'] = \ + jobject.file_path + + self.__show_image_thumbnail(data2, data) + button.set_label(_('Change Image')) + + else: + alert = NotifyAlert(timeout=3) + alert.props.title = _('Poll Activity') + alert.props.msg = _('Your selection is not an image') + self.add_alert(alert) + alert.connect('response', self._alert_cancel_cb) + alert.show() + + finally: + chooser.destroy() + del chooser + + def __show_image_thumbnail(self, parent_box, answer_number): + + hbox = Gtk.HBox() + + image_file_path = self._poll.images_ds_objects[int(answer_number)][ + 'file_path'] + + pixbuf_thumbnail = GdkPixbuf.Pixbuf.new_from_file_at_size( + image_file_path, 80, 80) + + image = Gtk.Image() + image.set_from_pixbuf(pixbuf_thumbnail) + image.show() + hbox.add(image) + hbox.show() + + chl = parent_box.get_children() + + if len(chl) == 4: + parent_box.remove(chl[len(chl) - 1]) + + parent_box.pack_start(hbox, True, True, 0) + def button_save_cb(self, button): """ Save button clicked. diff --git a/poll.py b/poll.py index 6a32e52..047f3de 100644 --- a/poll.py +++ b/poll.py @@ -51,9 +51,7 @@ from sugar3.graphics import style from sugar3.graphics.alert import NotifyAlert from sugar3.presence import presenceservice -#from sugar3.graphics.objectchooser import ObjectChooser from sugar3.datastore import datastore -from sugar3 import mime from sugar3 import profile #from gi.repository import Abi @@ -76,9 +74,6 @@ GRAPH_WIDTH = Gdk.Screen.width() / 3 GRAPH_TEXT_WIDTH = 50 RADIO_SIZE = 32''' -IMAGE_THUMBNAIL_HEIGHT = 80 -IMAGE_THUMBNAIL_WIDTH = 80 - from Widgets import NewPollCanvas from Widgets import Toolbar from Widgets import OptionsCanvas @@ -695,83 +690,6 @@ class PollBuilder(activity.Activity): self.set_canvas(OptionsCanvas(self)) - def _button_choose_image_cb(self, button, data=None, data2=None): - - if hasattr(mime, 'GENERIC_TYPE_IMAGE'): - chooser = ObjectChooser(_('Choose image'), self, - Gtk.DialogFlags.MODAL | - Gtk.DialogFlags.DESTROY_WITH_PARENT, - what_filter=mime.GENERIC_TYPE_IMAGE) - - else: - chooser = ObjectChooser(_('Choose image'), self, - Gtk.DialogFlags.MODAL | - Gtk.DialogFlags.DESTROY_WITH_PARENT) - - try: - result = chooser.run() - - if result == Gtk.ResponseType.ACCEPT: - logging.debug('ObjectChooser: %r' % - chooser.get_selected_object()) - - jobject = chooser.get_selected_object() - - images_mime_types = mime.get_generic_type( - mime.GENERIC_TYPE_IMAGE).mime_types - - if jobject and jobject.file_path and \ - jobject.metadata.get('mime_type') in images_mime_types: - - pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( - jobject.file_path, self._image_size['height'], - self._image_size['width']) - - self._poll.images[int(data)] = pixbuf - - self._poll.images_ds_objects[int(data)]['id'] = \ - jobject.object_id - - self._poll.images_ds_objects[int(data)]['file_path'] = \ - jobject.file_path - - self._show_image_thumbnail(data2, data) - button.set_label(_('Change Image')) - - else: - alert = NotifyAlert(timeout=3) - alert.props.title = _('Poll Activity') - alert.props.msg = _('Your selection is not an image') - self.add_alert(alert) - alert.connect('response', self._alert_cancel_cb) - alert.show() - finally: - chooser.destroy() - del chooser - - def _show_image_thumbnail(self, parent_box, answer_number): - - hbox = Gtk.HBox() - - image_file_path = self._poll.images_ds_objects[int(answer_number)][ - 'file_path'] - - pixbuf_thumbnail = GdkPixbuf.Pixbuf.new_from_file_at_size( - image_file_path, IMAGE_THUMBNAIL_HEIGHT, IMAGE_THUMBNAIL_WIDTH) - - image = Gtk.Image() - image.set_from_pixbuf(pixbuf_thumbnail) - image.show() - hbox.add(image) - hbox.show() - - chl = parent_box.get_children() - - if len(chl) == 4: - parent_box.remove(chl[len(chl) - 1]) - - parent_box.pack_start(hbox, True, True, 0) - def _already_loaded_image_in_answer(self, answer_number): if not self._poll.images_ds_objects[int(answer_number)] == {}: -- cgit v0.9.1