Feedbacks? 2012/7/1 Agustin Zubiaga <a...@sugarlabs.org>
> Signed-off-by: Agustin Zubiaga <a...@sugarlabs.org> > Signed-off-by: Flavio Danesse <fdane...@gmail.com> > --- > ImageView.py | 123 > +++++++++++++++++++++++++----------------------- > ImageViewerActivity.py | 75 ++++++++++++++--------------- > ProgressDialog.py | 14 +++--- > 3 files changed, 108 insertions(+), 104 deletions(-) > > diff --git a/ImageView.py b/ImageView.py > index 538c5b5..39556d7 100644 > --- a/ImageView.py > +++ b/ImageView.py > @@ -17,9 +17,11 @@ > > from __future__ import division > > -import gtk > -from gtk import gdk > -import gobject > +from gi.repository import Gtk > +from gi.repository import Gdk > +from gi.repository import GdkPixbuf > +from gi.repository import cairo > +from gi.repository import GObject > > import sys > import logging > @@ -27,39 +29,42 @@ import logging > import random > > > -class ImageViewer(gtk.DrawingArea): > +class ImageViewer(Gtk.DrawingArea): > __gsignals__ = { > - 'expose-event': ( > - 'override'), > + #'expose-event': ( > + # 'override'), > 'zoom-changed': ( > - gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []), > + GObject.SignalFlags.RUN_FIRST, None, []), > 'angle-changed': ( > - gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []), > + GObject.SignalFlags.RUN_FIRST, None, []), > } > > __gproperties__ = { > 'zoom': ( > - gobject.TYPE_FLOAT, 'Zoom Factor', 'Factor of zoom', > - 0, 4, 1, gobject.PARAM_READWRITE), > + GObject.TYPE_FLOAT, 'Zoom Factor', 'Factor of zoom', > + 0, 4, 1, GObject.PARAM_READWRITE), > 'angle': ( > - gobject.TYPE_INT, 'Angle', 'Angle of rotation', > - 0, 360, 0, gobject.PARAM_READWRITE), > + GObject.TYPE_INT, 'Angle', 'Angle of rotation', > + 0, 360, 0, GObject.PARAM_READWRITE), > 'file_location': ( > - gobject.TYPE_STRING, 'File Location', 'Location of the image > file', > - '', gobject.PARAM_READWRITE), > + GObject.TYPE_STRING, 'File Location', 'Location of the image > file', > + '', GObject.PARAM_READWRITE), > } > > def __init__(self): > - gtk.DrawingArea.__init__(self) > + GObject.GObject.__init__(self) > self.set_app_paintable(True) > > self.pixbuf = None > self.zoom = None > + self.parent = None > self.file_location = None > self._temp_pixbuf = None > self._image_changed_flag = True > self._optimal_zoom_flag = True > > + self.connect('draw', self.draw) > + > self.angle = 0 > > def do_get_property(self, pspec): > @@ -90,19 +95,7 @@ class ImageViewer(gtk.DrawingArea): > if self._optimal_zoom_flag: > self._set_zoom(self._calc_optimal_zoom()) > > - #def do_size_request(self, requisition): > - # requisition.width = self.pixbuf.get_width() > - # requisition.height = self.pixbuf.get_height() > - > - def do_expose_event(self, event): > - ctx = self.window.cairo_create() > - > - ctx.rectangle(event.area.x, event.area.y, > - event.area.width, event.area.height) > - ctx.clip() > - self.draw(ctx) > - > - def draw(self, ctx): > + def draw(self, widget, ctx): > if not self.pixbuf: > return > if self.zoom is None: > @@ -130,7 +123,7 @@ class ImageViewer(gtk.DrawingArea): > self.set_size_request(self._temp_pixbuf.get_width(), > self._temp_pixbuf.get_height()) > > - ctx.set_source_pixbuf(self._temp_pixbuf, x, y) > + Gdk.cairo_set_source_pixbuf(ctx, self._temp_pixbuf, x, y) > > ctx.paint() > > @@ -144,12 +137,15 @@ class ImageViewer(gtk.DrawingArea): > > self.angle = angle > > - if self.window: > + if self.props.window: > alloc = self.get_allocation() > - rect = gdk.Rectangle(alloc.x, alloc.y, > - alloc.width, alloc.height) > - self.window.invalidate_rect(rect, True) > - self.window.process_updates(True) > + rect = cairo.RectangleInt() > + rect.x = alloc.x > + rect.y = alloc.y > + rect.width = alloc.width > + rect.height = alloc.height > + self.props.window.invalidate_rect(rect, True) > + self.props.window.process_updates(True) > > self.emit('angle-changed') > > @@ -168,24 +164,27 @@ class ImageViewer(gtk.DrawingArea): > return True > > def set_file_location(self, file_location): > - self.pixbuf = gtk.gdk.pixbuf_new_from_file(file_location) > + self.pixbuf = GdkPixbuf.Pixbuf.new_from_file(file_location) > self.file_location = file_location > self.zoom = None > self._image_changed_flag = True > > - if self.window: > + if self.props.window: > alloc = self.get_allocation() > - rect = gdk.Rectangle(alloc.x, alloc.y, > - alloc.width, alloc.height) > - self.window.invalidate_rect(rect, True) > - self.window.process_updates(True) > + rect = cairo.RectangleInt() > + rect.x = alloc.x > + rect.y = alloc.y > + rect.width = alloc.width > + rect.height = alloc.height > + self.props.window.invalidate_rect(rect, True) > + self.props.window.process_updates(True) > > def _calc_optimal_zoom(self): > # This tries to figure out a best fit model > # If the image can fit in, we show it in 1:1, > # in any other case we show it in a fit to screen way > > - if isinstance(self.parent, gtk.Viewport): > + if isinstance(self.parent, Gtk.Viewport): > rect = self.parent.parent.get_allocation() > else: > rect = self.parent.get_allocation() > @@ -206,37 +205,41 @@ class ImageViewer(gtk.DrawingArea): > self._image_changed_flag = True > self.zoom = zoom > > - if self.window: > + if self.props.window: > alloc = self.get_allocation() > - rect = gdk.Rectangle(alloc.x, alloc.y, > - alloc.width, alloc.height) > - self.window.invalidate_rect(rect, True) > - self.window.process_updates(True) > + rect = cairo.RectangleInt() > + rect.x = alloc.x > + rect.y = alloc.y > + rect.width = alloc.width > + rect.height = alloc.height > + self.props.window.invalidate_rect(rect, True) > + self.props.window.process_updates(True) > > self.emit('zoom-changed') > > def _convert_pixbuf(self, pixbuf): > if self.angle == 0: > - rotate = gtk.gdk.PIXBUF_ROTATE_NONE > + rotate = GdkPixbuf.PixbufRotation.NONE > elif self.angle == 90: > - rotate = gtk.gdk.PIXBUF_ROTATE_COUNTERCLOCKWISE > + rotate = GdkPixbuf.PixbufRotation.COUNTERCLOCKWISE > elif self.angle == 180: > - rotate = gtk.gdk.PIXBUF_ROTATE_UPSIDEDOWN > + rotate = GdkPixbuf.PixbufRotation.UPSIDEDOWN > elif self.angle == 270: > - rotate = gtk.gdk.PIXBUF_ROTATE_CLOCKWISE > + rotate = GdkPixbuf.PixbufRotation.CLOCKWISE > elif self.angle == 360: > self.angle = 0 > - rotate = gtk.gdk.PIXBUF_ROTATE_NONE > + rotate = GdkPixbuf.PixbufRotation.NONE > else: > logging.warning('Got unsupported rotate angle') > > - if rotate != gtk.gdk.PIXBUF_ROTATE_NONE: > + if rotate != GdkPixbuf.PixbufRotation.NONE: > pixbuf = pixbuf.rotate_simple(rotate) > > if self.zoom != 1: > width = int(pixbuf.get_width() * self.zoom) > height = int(pixbuf.get_height() * self.zoom) > - pixbuf = pixbuf.scale_simple(width, height, > gtk.gdk.INTERP_TILES) > + pixbuf = pixbuf.scale_simple(width, height, > + GdkPixbuf.InterpType.TILES) > > return pixbuf > > @@ -250,18 +253,18 @@ def update(view_object): > > > if __name__ == '__main__': > - window = gtk.Window() > + window = Gtk.Window() > > - vadj = gtk.Adjustment() > - hadj = gtk.Adjustment() > - sw = gtk.ScrolledWindow(hadj, vadj) > + vadj = Gtk.Adjustment() > + hadj = Gtk.Adjustment() > + sw = Gtk.ScrolledWindow(hadj, vadj) > > view = ImageViewer() > > view.set_file_location(sys.argv[1]) > > > - sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) > + sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) > > > sw.add_with_viewport(view) > @@ -271,6 +274,6 @@ if __name__ == '__main__': > > window.show_all() > > - gobject.timeout_add(1000, update, view) > + GObject.timeout_add(1000, update, view) > > - gtk.main() > + Gtk.main() > diff --git a/ImageViewerActivity.py b/ImageViewerActivity.py > index 2391dfd..c35829b 100644 > --- a/ImageViewerActivity.py > +++ b/ImageViewerActivity.py > @@ -19,26 +19,26 @@ > > from __future__ import division > > -from sugar.activity import activity > +from sugar3.activity import activity > import logging > > from gettext import gettext as _ > > import time > import os > -import gtk > -import gobject > - > -from sugar.graphics.alert import NotifyAlert > -from sugar.graphics.objectchooser import ObjectChooser > -from sugar import mime > -from sugar.graphics.toolbutton import ToolButton > -from sugar.graphics.toolbarbox import ToolbarBox > -from sugar.activity.widgets import ActivityToolbarButton > -from sugar.activity.widgets import StopButton > - > -from sugar import network > -from sugar.datastore import datastore > +from gi.repository import Gtk > +from gi.repository import GObject > + > +from sugar3.graphics.alert import NotifyAlert > +from sugar3.graphics.objectchooser import ObjectChooser > +from sugar3 import mime > +from sugar3.graphics.toolbutton import ToolButton > +from sugar3.graphics.toolbarbox import ToolbarBox > +from sugar3.activity.widgets import ActivityToolbarButton > +from sugar3.activity.widgets import StopButton > + > +from sugar3 import network > +from sugar3.datastore import datastore > import telepathy > import dbus > > @@ -113,14 +113,15 @@ class ImageViewerActivity(activity.Activity): > self.set_toolbar_box(toolbar_box) > toolbar_box.show() > > - vadj = gtk.Adjustment() > - hadj = gtk.Adjustment() > - self.sw = gtk.ScrolledWindow(hadj, vadj) > + vadj = Gtk.Adjustment() > + hadj = Gtk.Adjustment() > + self.sw = Gtk.ScrolledWindow(hadj, vadj) > + self.view.parent = self.sw > > - self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) > + self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, > Gtk.PolicyType.AUTOMATIC) > self.sw.add_with_viewport(self.view) > # Avoid needless spacing > - self.view.parent.props.shadow_type = gtk.SHADOW_NONE > + self.view.parent.props.shadow_type = Gtk.ShadowType.NONE > > self.set_canvas(self.sw) > self.sw.show_all() > @@ -138,7 +139,7 @@ class ImageViewerActivity(activity.Activity): > > self.is_received_document = False > > - if self._shared_activity and handle.object_id == None: > + if self.shared_activity and handle.object_id == None: > # We're joining, and we don't already have the document. > if self.get_shared(): > # Already joined for some reason, just get the document > @@ -147,7 +148,7 @@ class ImageViewerActivity(activity.Activity): > # Wait for a successful join before trying to get the > document > self.connect("joined", self._joined_cb) > elif self._object_id is None: > - self._show_object_picker = gobject.timeout_add(1000, \ > + self._show_object_picker = GObject.timeout_add(1000, \ > self._show_picker_cb) > > def handle_view_source(self): > @@ -190,7 +191,7 @@ class ImageViewerActivity(activity.Activity): > toolbar_box.toolbar.insert(zoom_original_button, -1) > zoom_original_button.show() > > - spacer = gtk.SeparatorToolItem() > + spacer = Gtk.SeparatorToolItem() > spacer.props.draw = False > toolbar_box.toolbar.insert(spacer, -1) > spacer.show() > @@ -208,7 +209,7 @@ class ImageViewerActivity(activity.Activity): > toolbar_box.toolbar.insert(rotate_clockwise_button, -1) > rotate_clockwise_button.show() > > - spacer = gtk.SeparatorToolItem() > + spacer = Gtk.SeparatorToolItem() > spacer.props.draw = False > toolbar_box.toolbar.insert(spacer, -1) > spacer.show() > @@ -219,7 +220,7 @@ class ImageViewerActivity(activity.Activity): > toolbar_box.toolbar.insert(fullscreen_button, -1) > fullscreen_button.show() > > - separator = gtk.SeparatorToolItem() > + separator = Gtk.SeparatorToolItem() > separator.props.draw = False > separator.set_expand(True) > toolbar_box.toolbar.insert(separator, -1) > @@ -262,13 +263,13 @@ class ImageViewerActivity(activity.Activity): > return > > chooser = ObjectChooser(_('Choose document'), self, > - gtk.DIALOG_MODAL | > - gtk.DIALOG_DESTROY_WITH_PARENT, \ > + Gtk.DialogFlags.MODAL | > + Gtk.DialogFlags.DESTROY_WITH_PARENT, \ > what_filter=mime.GENERIC_TYPE_IMAGE) > > try: > result = chooser.run() > - if result == gtk.RESPONSE_ACCEPT: > + if result == Gtk.ResponseType.ACCEPT: > jobject = chooser.get_selected_object() > if jobject and jobject.file_path: > self.read_file(jobject.file_path) > @@ -284,7 +285,7 @@ class ImageViewerActivity(activity.Activity): > > os.link(file_path, tempfile) > self._tempfile = tempfile > - gobject.idle_add(self.__set_file_idle_cb, tempfile) > + GObject.idle_add(self.__set_file_idle_cb, tempfile) > > def __set_file_idle_cb(self, file_path): > self.view.set_file_location(file_path) > @@ -335,7 +336,7 @@ class ImageViewerActivity(activity.Activity): > > self.progressdialog.destroy() > > - gobject.idle_add(self.__set_file_idle_cb, tempfile) > + GObject.idle_add(self.__set_file_idle_cb, tempfile) > self.save() > > def _download_progress_cb(self, getter, bytes_downloaded, tube_id): > @@ -351,7 +352,7 @@ class ImageViewerActivity(activity.Activity): > fraction = bytes_downloaded / total > self.progressdialog.set_fraction(fraction) > > - #gtk.main_iteration() > + #Gtk.main_iteration() > > def _download_error_cb(self, getter, err, tube_id): > _logger.debug("Error getting document from tube %u: %s", > @@ -360,12 +361,12 @@ class ImageViewerActivity(activity.Activity): > self._want_document = True > self._download_content_length = 0 > self._download_content_type = None > - gobject.idle_add(self._get_document) > + GObject.idle_add(self._get_document) > > def _download_document(self, tube_id, path): > # FIXME: should ideally have the CM listen on a Unix socket > # instead of IPv4 (might be more compatible with Rainbow) > - chan = self._shared_activity.telepathy_tubes_chan > + chan = self.shared_activity.telepathy_tubes_chan > iface = chan[telepathy.CHANNEL_TYPE_TUBES] > addr = iface.AcceptStreamTube(tube_id, > telepathy.SOCKET_ADDRESS_TYPE_IPV4, > @@ -413,7 +414,7 @@ class ImageViewerActivity(activity.Activity): > > # Avoid trying to download the document multiple times at once > self._want_document = False > - gobject.idle_add(self._download_document, tube_id, path) > + GObject.idle_add(self._download_document, tube_id, path) > return False > > def _joined_cb(self, also_self): > @@ -426,7 +427,7 @@ class ImageViewerActivity(activity.Activity): > self.progressdialog = ProgressDialog.ProgressDialog(self) > self.progressdialog.show_all() > > - gobject.idle_add(self._get_document) > + GObject.idle_add(self._get_document) > > def _share_document(self): > """Share the document.""" > @@ -438,7 +439,7 @@ class ImageViewerActivity(activity.Activity): > self._tempfile) > > # Make a tube for it > - chan = self._shared_activity.telepathy_tubes_chan > + chan = self.shared_activity.telepathy_tubes_chan > iface = chan[telepathy.CHANNEL_TYPE_TUBES] > self._fileserver_tube_id = \ > iface.OfferStreamTube(IMAGEVIEWER_STREAM_SERVICE, > @@ -449,7 +450,7 @@ class ImageViewerActivity(activity.Activity): > > def watch_for_tubes(self): > """Watch for new tubes.""" > - tubes_chan = self._shared_activity.telepathy_tubes_chan > + tubes_chan = self.shared_activity.telepathy_tubes_chan > > > tubes_chan[telepathy.CHANNEL_TYPE_TUBES].connect_to_signal('NewTube', > self._new_tube_cb) > @@ -468,7 +469,7 @@ class ImageViewerActivity(activity.Activity): > self.unused_download_tubes.add(tube_id) > # if no download is in progress, let's fetch the document > if self._want_document: > - gobject.idle_add(self._get_document) > + GObject.idle_add(self._get_document) > > def _list_tubes_reply_cb(self, tubes): > """Callback when new tubes are available.""" > diff --git a/ProgressDialog.py b/ProgressDialog.py > index a46bae3..aa9cea8 100644 > --- a/ProgressDialog.py > +++ b/ProgressDialog.py > @@ -1,24 +1,24 @@ > -import gtk > +from gi.repository import Gtk > from gettext import gettext as _ > > > -class ProgressDialog(gtk.Dialog): > +class ProgressDialog(Gtk.Dialog): > > def __init__(self, parent): > - gtk.Dialog.__init__(self, _('Downloading...'), parent, \ > - gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, \ > - (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT)) > + GObject.GObject.__init__(self, _('Downloading...'), parent, \ > + Gtk.DialogFlags.MODAL | > Gtk.DialogFlags.DESTROY_WITH_PARENT, \ > + (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT)) > > self._activity = parent > > self.connect('response', self._response_cb) > > - self._pb = gtk.ProgressBar() > + self._pb = Gtk.ProgressBar() > self._pb.set_text(_('Retrieving shared image, please wait...')) > self.vbox.add(self._pb) > > def _response_cb(self, dialog, response_id): > - if response_id == gtk.RESPONSE_REJECT: > + if response_id == Gtk.ResponseType.REJECT: > self._activity.close() > else: > pass > -- > 1.7.10.2 > > --
_______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel