Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/readactivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'readactivity.py')
-rw-r--r--readactivity.py149
1 files changed, 97 insertions, 52 deletions
diff --git a/readactivity.py b/readactivity.py
index c876e22..ca1fcbd 100644
--- a/readactivity.py
+++ b/readactivity.py
@@ -36,6 +36,8 @@ from sugar.graphics.objectchooser import ObjectChooser
from readtoolbar import EditToolbar, ReadToolbar, ViewToolbar
from readsidebar import Sidebar
+import epubadapter
+
_HARDWARE_MANAGER_INTERFACE = 'org.laptop.HardwareManager'
_HARDWARE_MANAGER_SERVICE = 'org.laptop.HardwareManager'
@@ -102,6 +104,7 @@ class ReadActivity(activity.Activity):
# if we use evince-2.24
evince.evince_embed_init()
+ self._epub = False
self._document = None
self._fileserver = None
self._object_id = handle.object_id
@@ -111,17 +114,14 @@ class ReadActivity(activity.Activity):
_logger.debug('Starting Read...')
- self._view = evince.View()
- self._view.set_screen_dpi(_get_screen_dpi())
- self._view.connect('notify::has-selection',
- self._view_notify_has_selection_cb)
+ self._view = None
self._sidebar = Sidebar()
self._sidebar.show()
toolbox = activity.ActivityToolbox(self)
- self._edit_toolbar = EditToolbar(self._view)
+ self._edit_toolbar = EditToolbar()
self._edit_toolbar.undo.props.visible = False
self._edit_toolbar.redo.props.visible = False
self._edit_toolbar.separator.props.visible = False
@@ -131,11 +131,11 @@ class ReadActivity(activity.Activity):
toolbox.add_toolbar(_('Edit'), self._edit_toolbar)
self._edit_toolbar.show()
- self._read_toolbar = ReadToolbar(self._view, self._sidebar)
+ self._read_toolbar = ReadToolbar(self._sidebar)
toolbox.add_toolbar(_('Read'), self._read_toolbar)
self._read_toolbar.show()
- self._view_toolbar = ViewToolbar(self._view)
+ self._view_toolbar = ViewToolbar()
self._view_toolbar.connect('needs-update-size',
self.__view_toolbar_needs_update_size_cb)
self._view_toolbar.connect('go-fullscreen',
@@ -146,20 +146,11 @@ class ReadActivity(activity.Activity):
self.set_toolbox(toolbox)
toolbox.show()
- self._scrolled = gtk.ScrolledWindow()
- self._scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- self._scrolled.props.shadow_type = gtk.SHADOW_NONE
-
- self._scrolled.add(self._view)
- self._view.show()
+ self._hbox = gtk.HBox()
+ self._hbox.pack_start(self._sidebar, expand=False, fill=False)
- hbox = gtk.HBox()
- hbox.pack_start(self._sidebar, expand=False, fill=False)
- hbox.pack_start(self._scrolled, expand=True, fill=True)
-
- self.set_canvas(hbox)
- self._scrolled.show()
- hbox.show()
+ self.set_canvas(self._hbox)
+ self._hbox.show()
# Set up for idle suspend
self._idle_timer = 0
@@ -316,15 +307,16 @@ class ReadActivity(activity.Activity):
self.metadata['Read_zoom'] = str(self._view.props.zoom)
- if self._view.props.sizing_mode == evince.SIZING_BEST_FIT:
- self.metadata['Read_sizing_mode'] = "best-fit"
- elif self._view.props.sizing_mode == evince.SIZING_FREE:
- self.metadata['Read_sizing_mode'] = "free"
- elif self._view.props.sizing_mode == evince.SIZING_FIT_WIDTH:
- self.metadata['Read_sizing_mode'] = "fit-width"
- else:
- _logger.error("Don't know how to save sizing_mode state '%s'" %
- self._view.props.sizing_mode)
+ if not self._epub:
+ if self._view.props.sizing_mode == evince.SIZING_BEST_FIT:
+ self.metadata['Read_sizing_mode'] = "best-fit"
+ elif self._view.props.sizing_mode == evince.SIZING_FREE:
+ self.metadata['Read_sizing_mode'] = "free"
+ elif self._view.props.sizing_mode == evince.SIZING_FIT_WIDTH:
+ self.metadata['Read_sizing_mode'] = "fit-width"
+ else:
+ _logger.error("Don't know how to save sizing_mode state '%s'" %
+ self._view.props.sizing_mode)
self.metadata['Read_sizing_mode'] = "fit-width"
self.metadata['Read_search'] = \
@@ -452,13 +444,63 @@ class ReadActivity(activity.Activity):
self.watch_for_tubes()
gobject.idle_add(self._get_document)
+ def _setup_evince_viewer(self):
+ self._view = evince.View()
+ self._scrolled = gtk.ScrolledWindow()
+ self._scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self._scrolled.props.shadow_type = gtk.SHADOW_NONE
+
+ self._scrolled.add(self._view)
+ self._view.show()
+
+ self._hbox.pack_start(self._scrolled, expand=True, fill=True)
+
+
+ def _setup_epub_viewer(self):
+ self._view = epubadapter.View()
+ self._view.set_screen_dpi(_get_screen_dpi())
+ self._view.connect('notify::has-selection',
+ self._view_notify_has_selection_cb)
+
+ self._hbox.pack_start(self._view, expand=True, fill=True)
+ self._view.show_all()
+
+ def _setup_evince_viewer(self):
+ self._view = evince.View()
+ self._view.set_screen_dpi(_get_screen_dpi())
+ self._view.connect('notify::has-selection',
+ self._view_notify_has_selection_cb)
+
+ self._scrolled = gtk.ScrolledWindow()
+ self._scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self._scrolled.props.shadow_type = gtk.SHADOW_NONE
+
+ self._scrolled.add(self._view)
+ self._view.show()
+
+ self._hbox.pack_start(self._scrolled, expand=True, fill=True)
+ self._scrolled.show()
+
+
def _load_document(self, filepath):
"""Load the specified document and set up the UI.
filepath -- string starting with file://
"""
- self._document = evince.factory_get_document(filepath)
+ mimetype = mime.get_for_file(filepath)
+ if mimetype == 'application/epub+zip':
+ self._epub = True
+ self._setup_epub_viewer()
+ self._document = epubadapter.EpubDocument(self._view, filepath.replace('file://', ''))
+ else:
+ self._setup_evince_viewer()
+ self._document = evince.factory_get_document(filepath)
+
+ self._view_toolbar.set_view(self._view)
+ self._edit_toolbar.set_view(self._view)
+ self._read_toolbar.set_view(self._view)
+
self._want_document = False
self._view.set_document(self._document)
self._edit_toolbar.set_document(self._document)
@@ -469,33 +511,35 @@ class ReadActivity(activity.Activity):
if info and info.title:
self.metadata['title'] = info.title
- current_page = int(self.metadata.get('Read_current_page', '0'))
- self._document.get_page_cache().set_current_page(current_page)
-
- sizing_mode = self.metadata.get('Read_sizing_mode', 'fit-width')
- _logger.debug('Found sizing mode: %s', sizing_mode)
- if sizing_mode == "best-fit":
- self._view.props.sizing_mode = evince.SIZING_BEST_FIT
- self._view.update_view_size(self._scrolled)
- elif sizing_mode == "free":
- self._view.props.sizing_mode = evince.SIZING_FREE
- self._view.props.zoom = float(self.metadata.get('Read_zoom', '1.0'))
- _logger.debug('Set zoom to %f', self._view.props.zoom)
- elif sizing_mode == "fit-width":
- self._view.props.sizing_mode = evince.SIZING_FIT_WIDTH
- self._view.update_view_size(self._scrolled)
- else:
- # this may happen when we get a document from a buddy with a later
- # version of Read, for example.
- _logger.warning("Unknown sizing_mode state '%s'", sizing_mode)
- if self.metadata.get('Read_zoom', None) is not None:
- self._view.props.zoom = float(self.metadata['Read_zoom'])
+ if not self._epub:
+ sizing_mode = self.metadata.get('Read_sizing_mode', 'fit-width')
+ _logger.debug('Found sizing mode: %s', sizing_mode)
+ if sizing_mode == "best-fit":
+ self._view.props.sizing_mode = evince.SIZING_BEST_FIT
+ self._view.update_view_size(self._scrolled)
+ elif sizing_mode == "free":
+ self._view.props.sizing_mode = evince.SIZING_FREE
+ self._view.props.zoom = float(self.metadata.get('Read_zoom', '1.0'))
+ _logger.debug('Set zoom to %f', self._view.props.zoom)
+ elif sizing_mode == "fit-width":
+ self._view.props.sizing_mode = evince.SIZING_FIT_WIDTH
+ self._view.update_view_size(self._scrolled)
+ else:
+ # this may happen when we get a document from a buddy with a later
+ # version of Read, for example.
+ _logger.warning("Unknown sizing_mode state '%s'", sizing_mode)
+ if self.metadata.get('Read_zoom', None) is not None:
+ self._view.props.zoom = float(self.metadata['Read_zoom'])
self._view_toolbar._update_zoom_buttons()
self._edit_toolbar._search_entry.props.text = \
self.metadata.get('Read_search', '')
+ current_page = int(self.metadata.get('Read_current_page', '0'))
+ _logger.debug('Setting page to: %d', current_page)
+ self._document.get_page_cache().set_current_page(current_page)
+
# We've got the document, so if we're a shared activity, offer it
try:
if self.get_shared():
@@ -593,7 +637,8 @@ class ReadActivity(activity.Activity):
_logger.debug("Keyname Release: %s, time: %s", keyname, event.time)
def __view_toolbar_needs_update_size_cb(self, view_toolbar):
- self._view.update_view_size(self._scrolled)
+ if not self._epub:
+ self._view.update_view_size(self._scrolled)
def __view_toolbar_go_fullscreen_cb(self, view_toolbar):
self.fullscreen()