diff options
Diffstat (limited to 'ImageViewerActivity.py')
-rw-r--r-- | ImageViewerActivity.py | 65 |
1 files changed, 39 insertions, 26 deletions
diff --git a/ImageViewerActivity.py b/ImageViewerActivity.py index 4a10bcb..e6f9bc3 100644 --- a/ImageViewerActivity.py +++ b/ImageViewerActivity.py @@ -25,18 +25,17 @@ import logging from gettext import gettext as _ import time -import sys, os -import gtk, gobject +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.graphics.toolbarbox import ToolbarButton from sugar.activity.widgets import ActivityToolbarButton from sugar.activity.widgets import StopButton -from sugar.activity import activity from sugar import network from sugar.datastore import datastore @@ -48,6 +47,7 @@ import ProgressDialog _logger = logging.getLogger('imageviewer-activity') + class ImageViewerHTTPRequestHandler(network.ChunkedGlibHTTPRequestHandler): """HTTP Request Handler for transferring document while collaborating. @@ -56,6 +56,7 @@ class ImageViewerHTTPRequestHandler(network.ChunkedGlibHTTPRequestHandler): mainloop between chunks. """ + def translate_path(self, path): """Return the filepath to the shared document.""" return self.server.filepath @@ -63,6 +64,7 @@ class ImageViewerHTTPRequestHandler(network.ChunkedGlibHTTPRequestHandler): class ImageViewerHTTPServer(network.GlibTCPServer): """HTTP Server for transferring document while collaborating.""" + def __init__(self, server_address, filepath): """Set up the GlibTCPServer with the ImageViewerHTTPRequestHandler. @@ -91,12 +93,19 @@ IMAGEVIEWER_STREAM_SERVICE = 'imageviewer-activity-http' class ImageViewerActivity(activity.Activity): + def __init__(self, handle): activity.Activity.__init__(self, handle) self.zoom = None self._object_id = handle.object_id + self._zoom_out_button = None + self._zoom_in_button = None + self._old_zoom = None + self._fileserver = None + self._fileserver_tube_id = None + self.view = ImageView.ImageViewer() self.progressdialog = None @@ -105,8 +114,7 @@ class ImageViewerActivity(activity.Activity): self.set_toolbar_box(toolbar_box) toolbar_box.show() - self.connect('window-state-event', - self.__window_state_event_cb) + self.connect('window-state-event', self.__window_state_event_cb) vadj = gtk.Adjustment() hadj = gtk.Adjustment() @@ -129,7 +137,7 @@ class ImageViewerActivity(activity.Activity): self.port = 1024 + (h % 64511) self.is_received_document = False - + if self._shared_activity and handle.object_id == None: # We're joining, and we don't already have the document. if self.get_shared(): @@ -142,6 +150,9 @@ class ImageViewerActivity(activity.Activity): self._show_object_picker = gobject.timeout_add(1000, \ self._show_picker_cb) + def handle_view_source(self): + pass + def _add_toolbar_buttons(self, toolbar_box): activity_button = ActivityToolbarButton(self) toolbar_box.toolbar.insert(activity_button, 0) @@ -164,7 +175,7 @@ class ImageViewerActivity(activity.Activity): zoom_tofit_button.connect('clicked', self.__zoom_tofit_cb) toolbar_box.toolbar.insert(zoom_tofit_button, -1) zoom_tofit_button.show() - + zoom_original_button = ToolButton('zoom-original') zoom_original_button.set_tooltip(_('Original size')) zoom_original_button.connect('clicked', self.__zoom_original_cb) @@ -178,7 +189,8 @@ class ImageViewerActivity(activity.Activity): rotate_anticlockwise_button = ToolButton('rotate_anticlockwise') rotate_anticlockwise_button.set_tooltip(_('Rotate anticlockwise')) - rotate_anticlockwise_button.connect('clicked', self.__rotate_anticlockwise_cb) + rotate_anticlockwise_button.connect('clicked', + self.__rotate_anticlockwise_cb) toolbar_box.toolbar.insert(rotate_anticlockwise_button, -1) rotate_anticlockwise_button.show() @@ -192,7 +204,7 @@ class ImageViewerActivity(activity.Activity): spacer.props.draw = False toolbar_box.toolbar.insert(spacer, -1) spacer.show() - + fullscreen_button = ToolButton('view-fullscreen') fullscreen_button.set_tooltip(_('Fullscreen')) fullscreen_button.connect('clicked', self.__fullscreen_cb) @@ -220,28 +232,29 @@ class ImageViewerActivity(activity.Activity): def __zoom_tofit_cb(self, button): zoom = self.view.calculate_optimal_zoom() self.view.set_zoom(zoom) - + def __zoom_original_cb(self, button): self.view.set_zoom(1) def __rotate_anticlockwise_cb(self, button): angle = self.view.get_property('angle') self.view.set_angle(angle + 90) - + def __rotate_clockwise_cb(self, button): angle = self.view.get_property('angle') if angle == 0: angle = 360 - self.view.set_angle(angle - 90) - + self.view.set_angle(angle - 90) + def __fullscreen_cb(self, button): self._old_zoom = self.view.get_property('zoom') #XXX: Hack # Zoom to fit screen if possible screen = self.get_screen() - zoom = self.view.calculate_optimal_zoom(screen.get_width(), screen.get_height()) + zoom = self.view.calculate_optimal_zoom( + screen.get_width(), screen.get_height()) self.view.set_zoom(zoom) - + self.fullscreen() def _show_picker_cb(self): @@ -268,19 +281,19 @@ class ImageViewerActivity(activity.Activity): tempfile = os.path.join(self.get_activity_root(), 'instance', \ 'tmp%i' % time.time()) - + os.link(file_path, tempfile) self._tempfile = 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) - + try: self.zoom = int(self.metadata.get('zoom', '0')) if self.zoom > 0: self.view.set_zoom(self.zoom) - except: + except Exception: pass return False @@ -333,16 +346,16 @@ class ImageViewerActivity(activity.Activity): def _download_progress_cb(self, getter, bytes_downloaded, tube_id): if self._download_content_length > 0: _logger.debug("Downloaded %u of %u bytes from tube %u...", - bytes_downloaded, self._download_content_length, + bytes_downloaded, self._download_content_length, tube_id) else: _logger.debug("Downloaded %u bytes from tube %u...", bytes_downloaded, tube_id) total = self._download_content_length - fraction = bytes_downloaded/total + fraction = bytes_downloaded / total self.progressdialog.set_fraction(fraction) - + #gtk.main_iteration() def _download_error_cb(self, getter, err, tube_id): @@ -414,7 +427,7 @@ class ImageViewerActivity(activity.Activity): Get the shared document from another participant. """ self.watch_for_tubes() - + self.progressdialog = ProgressDialog.ProgressDialog(self) self.progressdialog.show_all() @@ -432,7 +445,8 @@ class ImageViewerActivity(activity.Activity): # Make a tube for it chan = self._shared_activity.telepathy_tubes_chan iface = chan[telepathy.CHANNEL_TYPE_TUBES] - self._fileserver_tube_id = iface.OfferStreamTube(IMAGEVIEWER_STREAM_SERVICE, + self._fileserver_tube_id = \ + iface.OfferStreamTube(IMAGEVIEWER_STREAM_SERVICE, {}, telepathy.SOCKET_ADDRESS_TYPE_IPV4, ('127.0.0.1', dbus.UInt16(self.port)), @@ -469,7 +483,7 @@ class ImageViewerActivity(activity.Activity): def _list_tubes_error_cb(self, e): """Handle ListTubes error by logging.""" _logger.error('ListTubes() failed: %s', e) - + def _shared_cb(self, activityid): """Callback when activity shared. @@ -492,4 +506,3 @@ class ImageViewerActivity(activity.Activity): def _alert_cancel_cb(self, alert, response_id): self.remove_alert(alert) - |