diff options
author | Lucian Branescu Mihaila <lucian.branescu@gmail.com> | 2010-07-20 01:31:43 (GMT) |
---|---|---|
committer | Lucian Branescu Mihaila <lucian.branescu@gmail.com> | 2010-07-20 01:31:43 (GMT) |
commit | 5f3e19345266e55c6866cb9eb1e8e39c12f781a7 (patch) | |
tree | 75e8aad8ccdf198ee2364d45b1bcc1ffbf2aadcf | |
parent | 37af8355dee5def2288c5301bc8bcad0091ce73f (diff) |
Full port to libevview 2.30. The only missing feature is set_screen_dpi. Not tested extensively, collaboration not tested at all.
-rw-r--r-- | readactivity.py | 88 | ||||
-rw-r--r-- | readtoolbar.py | 82 | ||||
-rw-r--r-- | readtopbar.py | 10 |
3 files changed, 51 insertions, 129 deletions
diff --git a/readactivity.py b/readactivity.py index 0b52df0..ac2aaf4 100644 --- a/readactivity.py +++ b/readactivity.py @@ -57,9 +57,6 @@ try: except: _EPUB_SUPPORT = False -# Handle libevview 2.80's new API trac#1900 -_EVINCE_2_80 = hasattr(evince, 'document_factory_get_document') - _HARDWARE_MANAGER_INTERFACE = 'org.laptop.HardwareManager' _HARDWARE_MANAGER_SERVICE = 'org.laptop.HardwareManager' _HARDWARE_MANAGER_OBJECT_PATH = '/org/laptop/HardwareManager' @@ -174,8 +171,6 @@ class ReadActivity(activity.Activity): edit_toolbar_button.show() self._view_toolbar = ViewToolbar() - self._view_toolbar.connect('needs-update-size', - self.__view_toolbar_needs_update_size_cb) self._view_toolbar.connect('go-fullscreen', self.__view_toolbar_go_fullscreen_cb) view_toolbar_button = ToolbarButton( @@ -412,7 +407,7 @@ class ReadActivity(activity.Activity): elif page < 0: page = 0 - self._document.get_page_cache().set_current_page(page) + self._model.props.page = page entry.props.text = str(page + 1) def __go_back_cb(self, button): @@ -428,42 +423,41 @@ class ReadActivity(activity.Activity): self._view.next_page() def __prev_bookmark_activate_cb(self, menuitem): - page = self._document.get_page_cache().get_current_page() + page = self._model.props.page bookmarkmanager = self._sidebar.get_bookmarkmanager() prev_bookmark = bookmarkmanager.get_prev_bookmark_for_page(page) if prev_bookmark is not None: - self._document.get_page_cache().set_current_page(prev_bookmark.page_no) + self._model.props.page = prev_bookmark.page_no def __next_bookmark_activate_cb(self, menuitem): - page = self._document.get_page_cache().get_current_page() + page = self._model.props.page bookmarkmanager = self._sidebar.get_bookmarkmanager() next_bookmark = bookmarkmanager.get_next_bookmark_for_page(page) if next_bookmark is not None: - self._document.get_page_cache().set_current_page(next_bookmark.page_no) + self._model.props.page = next_bookmark.page_no def __bookmarker_toggled_cb(self, button): - page = self._document.get_page_cache().get_current_page() if self._bookmarker.props.active: - self._sidebar.add_bookmark(page) + self._sidebar.add_bookmark(self._model.props.page) else: - self._sidebar.del_bookmark(page) + self._sidebar.del_bookmark(self._model.props.page) - def __page_changed_cb(self, page, proxy = None): + def __page_changed_cb(self, previous, next, user_data): self._update_nav_buttons() if hasattr(self._document, 'has_document_links'): if self._document.has_document_links(): self._toc_select_active_page() - self._sidebar.update_for_page(self._document.get_page_cache().get_current_page()) + self._sidebar.update_for_page(self._model.props.page) self._bookmarker.handler_block(self._bookmarker_toggle_handler_id) self._bookmarker.props.active = self._sidebar.is_showing_local_bookmark() self._bookmarker.handler_unblock(self._bookmarker_toggle_handler_id) def _update_nav_buttons(self): - current_page = self._document.get_page_cache().get_current_page() + current_page = self._model.props.page self._back_button.props.sensitive = current_page > 0 self._forward_button.props.sensitive = \ current_page < self._document.get_n_pages() - 1 @@ -514,7 +508,7 @@ class ReadActivity(activity.Activity): iter = self._navigator.get_active_iter() current_link = self._toc_model.get(iter, 1)[0] - current_page = self._document.get_page_cache().get_current_page() + current_page = self._model.props.page if not hasattr(current_link, 'get_page'): @@ -596,10 +590,6 @@ class ReadActivity(activity.Activity): self._tempfile = tempfile self._load_document('file://' + self._tempfile) - # FIXME: This should obviously be fixed properly - gobject.timeout_add_seconds(1, self.__view_toolbar_needs_update_size_cb, - None) - def write_file(self, file_path): """Write into datastore for Keep. @@ -616,7 +606,7 @@ class ReadActivity(activity.Activity): try: self.metadata['Read_current_page'] = \ - str(self._document.get_page_cache().get_current_page()) + str(self._model.props.page) self.metadata['Read_zoom'] = str(self._view.props.zoom) @@ -769,9 +759,9 @@ class ReadActivity(activity.Activity): 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._view.set_screen_dpi(_get_screen_dpi()) #disabled trac#1900 + #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) @@ -800,27 +790,19 @@ class ReadActivity(activity.Activity): else: self._setup_evince_viewer() try: - if _EVINCE_2_80: - self._document = evince.document_factory_get_document( - filepath) - else: - self._document = evince.factory_get_document(filepath) + self._document = evince.document_factory_get_document( + filepath) except GError, e: _logger.error('Can not load document: %s', e) return self._want_document = False - if _EVINCE_2_80: - self._model = evince.DocumentModel() - self._model.set_document(self._document) - self._view.set_model(self._model) + self._model = evince.DocumentModel() + self._model.set_document(self._document) + self._view.set_model(self._model) - self._view_toolbar.set_model(self._model) - else: - self._view.set_document(self._document) - - self._view_toolbar.set_view(self._view) + self._view_toolbar.set_view(self._view, self._model) self._edit_toolbar.set_view(self._view) self._edit_toolbar.set_document(self._document) @@ -832,8 +814,7 @@ class ReadActivity(activity.Activity): self._update_nav_buttons() self._update_toc() - page_cache = self._document.get_page_cache() - page_cache.connect('page-changed', self.__page_changed_cb) + self._model.connect('page-changed', self.__page_changed_cb) if not self.metadata['title_set_by_user'] == '1': info = self._document.get_info() @@ -844,23 +825,20 @@ class ReadActivity(activity.Activity): 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 - if hasattr(self._view, 'update_view_size'): - self._view.update_view_size(self._scrolled) + self._model.props.sizing_mode = evince.SIZING_BEST_FIT 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) + self._model.props.sizing_mode = evince.SIZING_FREE + self._scale.props.zoom = float(self.metadata.get('Read_zoom', + '1.0')) + _logger.debug('Set zoom to %f', self._model.props.scale) elif sizing_mode == "fit-width": - self._view.props.sizing_mode = evince.SIZING_FIT_WIDTH - if hasattr(self._view, 'update_view_size'): - self._view.update_view_size(self._scrolled) + self._model.props.sizing_mode = evince.SIZING_FIT_WIDTH 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._model.props.scale = float(self.metadata['Read_zoom']) self._view_toolbar._update_zoom_buttons() @@ -869,7 +847,7 @@ class ReadActivity(activity.Activity): 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) + self._model.props.page = current_page # We've got the document, so if we're a shared activity, offer it try: @@ -976,11 +954,5 @@ class ReadActivity(activity.Activity): else: self._topbar.hide() - def __view_toolbar_needs_update_size_cb(self, view_toolbar): - if hasattr(self._view, 'update_view_size'): - self._view.update_view_size(self._scrolled) - else: - return False # No need to run this again and again - def __view_toolbar_go_fullscreen_cb(self, view_toolbar): self.fullscreen() diff --git a/readtoolbar.py b/readtoolbar.py index 2785ed8..a51eff6 100644 --- a/readtoolbar.py +++ b/readtoolbar.py @@ -31,9 +31,6 @@ from sugar.graphics.menuitem import MenuItem from sugar.graphics import iconentry from sugar.activity import activity -# Handle libevview 2.80's new API trac#1900 -_EVINCE_2_80 = hasattr(evince, 'document_factory_get_document') - class EditToolbar(activity.EditToolbar): __gtype_name__ = 'EditToolbar' @@ -248,67 +245,39 @@ class ViewToolbar(gtk.Toolbar): self._fullscreen.show() self._view_notify_zoom_handler = None - self._view_notify_scale_handler = None - def set_view(self, view): + def set_view(self, view, model): + self._evince_model = model self._evince_view = view - if _EVINCE_2_80: - self._zoom_spin.props.value = self._evince_model.props.scale * 100 - self._view_notify_scale_handler = self._evince_model.connect( - 'notify::scale', self._view_notify_scale_cb) - else: - self._zoom_spin.props.value = self._evince_view.props.zoom * 100 - self._view_notify_zoom_handler = self._evince_view.connect( - 'notify::zoom', self._view_notify_zoom_cb) + self._zoom_spin.props.value = self._evince_model.props.scale * 100 + self._view_notify_zoom_handler = self._evince_model.connect( + 'notify::scale', self._view_notify_zoom_cb) self._update_zoom_buttons() - def set_model(self, model): - self._evince_model = model - def _zoom_spin_notify_value_cb(self, zoom_spin, pspec): if not self._view_notify_zoom_handler: return - if _EVINCE_2_80: - self._evince_model.disconnect(self._view_notify_scale_handler) - else: - self._evince_view.disconnect(self._view_notify_zoom_handler) - + self._evince_model.disconnect(self._view_notify_zoom_handler) try: - if hasattr(self._evince_view.props, 'sizing_mode'): - self._evince_view.props.sizing_mode = evince.SIZING_FREE - if _EVINCE_2_80: - self._evince_model.props.scale = zoom_spin.props.value / 100.0 - else: - self._evince_view.props.zoom = zoom_spin.props.value / 100.0 + self._evince_model.props.scale = zoom_spin.props.value / 100.0 finally: - self._view_notify_zoom_handler = self._evince_view.connect( - 'notify::zoom', self._view_notify_zoom_cb) + self._view_notify_zoom_handler = self._evince_model.connect( + 'notify::scale', self._view_notify_zoom_cb) - def _view_notify_zoom_cb(self, evince_view, pspec): - self._zoom_spin.disconnect(self._zoom_spin_notify_value_handler) - try: - self._zoom_spin.props.value = round(evince_view.props.zoom * 100.0) - finally: - self._zoom_spin_notify_value_handler = self._zoom_spin.connect( - 'notify::value', self._zoom_spin_notify_value_cb) - - def _view_notify_scale_cb(self, evince_model, pspec): + def _view_notify_zoom_cb(self, evince_model, pspec): self._zoom_spin.disconnect(self._zoom_spin_notify_value_handler) try: self._zoom_spin.props.value = round(evince_model.props.scale * 100.0) finally: self._zoom_spin_notify_value_handler = self._zoom_spin.connect( - 'notify::value', self._zoom_spin_notify_value_cb) + 'notify::value', self._zoom_spin_notify_value_cb) def zoom_in(self): - if hasattr(self._evince_view.props, 'sizing_mode'): - self._evince_view.props.sizing_mode = evince.SIZING_FREE - if hasattr(self._evince_model.props, 'sizing-mode'): - self._evince_model.set_property('sizing-mode', evince.SIZING_FREE) + self._evince_model.props.sizing_mode = evince.SIZING_FREE self._evince_view.zoom_in() self._update_zoom_buttons() @@ -316,10 +285,7 @@ class ViewToolbar(gtk.Toolbar): self.zoom_in() def zoom_out(self): - if hasattr(self._evince_view.props, 'sizing_mode'): - self._evince_view.props.sizing_mode = evince.SIZING_FREE - if hasattr(self._evince_model.props, 'sizing-mode'): - self._evince_model.set_property('sizing-mode', evince.SIZING_FREE) + self._evince_model.props.sizing_mode = evince.SIZING_FREE self._evince_view.zoom_out() self._update_zoom_buttons() @@ -327,11 +293,7 @@ class ViewToolbar(gtk.Toolbar): self.zoom_out() def zoom_to_width(self): - if hasattr(self._evince_view.props, 'sizing_mode'): - self._evince_view.props.sizing_mode = evince.SIZING_FIT_WIDTH - if hasattr(self._evince_model.props, 'sizing-mode'): - self._evince_model.set_property('sizing-mode', - evince.SIZING_FIT_WIDTH) + self._evince_model.props.sizing_mode = evince.SIZING_FIT_WIDTH self.emit('needs-update-size') self._update_zoom_buttons() @@ -343,23 +305,13 @@ class ViewToolbar(gtk.Toolbar): self._zoom_out.props.sensitive = self._evince_view.can_zoom_out() def _zoom_to_fit_menu_item_activate_cb(self, menu_item): - if hasattr(self._evince_view.props, 'sizing_mode'): #XXX - self._evince_view.props.sizing_mode = evince.SIZING_BEST_FIT - if hasattr(self._evince_model.props, 'sizing-mode'): - self._evince_model.set_property('sizing-mode', - evince.SIZING_BEST_FIT) + self._evince_model.props.sizing_mode = evince.SIZING_BEST_FIT self.emit('needs-update-size') self._update_zoom_buttons() def _actual_size_menu_item_activate_cb(self, menu_item): - if hasattr(self._evince_view.props, 'sizing_mode'): - self._evince_view.props.sizing_mode = evince.SIZING_FREE - if hasattr(self._evince_model.props, 'sizing-mode'): - self._evince_model.set_property('sizing-mode', evince.SIZING_FREE) - if _EVINCE_2_80: - self._evince_model.props.scale = 1.0 - else: - self._evince_view.props.zoom = 1.0 + self._evince_model.props.sizing_mode = evince.SIZING_FREE + self._evince_model.props.scale = 1.0 self._update_zoom_buttons() def _fullscreen_cb(self, button): diff --git a/readtopbar.py b/readtopbar.py index 48aeabd..1815a66 100644 --- a/readtopbar.py +++ b/readtopbar.py @@ -27,9 +27,6 @@ from sugar.graphics.icon import Icon, get_icon_state from gettext import gettext as _ -# Handle libevview 2.80's new API trac#1900 -_EVINCE_2_80 = hasattr(evince, 'document_factory_get_document') - _LEVEL_PROP = 'battery.charge_level.percentage' _CHARGING_PROP = 'battery.rechargeable.is_charging' _DISCHARGING_PROP = 'battery.rechargeable.is_discharging' @@ -199,11 +196,12 @@ class TopBar(_TopBar): def set_document(self, document): self._document = document - page_cache = evince.PageCache(self._document) - page_cache.connect('page-changed', self._page_changed_cb) + model = evince.DocumentModel() + model.props.document = self._document + model.connect('page-changed', self._page_changed_cb) def _page_changed_cb(self, page, proxy = None): - current_page = evince.DocumentModel(self._document).props.page + current_page = self._document.props.page n_pages = self._document.get_n_pages() self.set_completion_level(current_page * 100/n_pages) |