diff options
Diffstat (limited to 'readtoolbar.py')
-rw-r--r-- | readtoolbar.py | 116 |
1 files changed, 80 insertions, 36 deletions
diff --git a/readtoolbar.py b/readtoolbar.py index d79c1ed..9af7ac4 100644 --- a/readtoolbar.py +++ b/readtoolbar.py @@ -23,6 +23,8 @@ import gobject import gtk import evince +import epubadapter + import md5 from sugar.graphics.toolbutton import ToolButton @@ -49,11 +51,10 @@ def get_md5(filename): #FIXME: Should be moved somewhere else class EditToolbar(activity.EditToolbar): __gtype_name__ = 'EditToolbar' - def __init__(self, evince_view): + def __init__(self): activity.EditToolbar.__init__(self) - self._evince_view = evince_view - self._evince_view.find_set_highlight_search(True) + self._evince_view = None self._document = None self._find_job = None @@ -97,6 +98,10 @@ class EditToolbar(activity.EditToolbar): self.insert(self._next, -1) self._next.show() + def set_view(self, view): + self._evince_view = view + self._evince_view.find_set_highlight_search(True) + def set_document(self, document): self._document = document @@ -112,9 +117,13 @@ class EditToolbar(activity.EditToolbar): self._clear_find_job() text = self._search_entry.props.text if text != "": - self._find_job = evince.JobFind(document=self._document, start_page=0, n_pages=self._document.get_n_pages(), text=text, case_sensitive=False) - self._find_updated_handler = self._find_job.connect('updated', self._find_updated_cb) - evince.job_scheduler_push_job(self._find_job, evince.JOB_PRIORITY_NONE) + try: + self._find_job = evince.JobFind(document=self._document, start_page=0, n_pages=self._document.get_n_pages(), text=text, case_sensitive=False) + self._find_updated_handler = self._find_job.connect('updated', self._find_updated_cb) + evince.job_scheduler_push_job(self._find_job, evince.JOB_PRIORITY_NONE) + except TypeError: + self._find_job = epubadapter.JobFind(document=self._document, start_page=0, n_pages=self._document.get_n_pages(), text=text, case_sensitive=False) + self._find_updated_handler = self._find_job.connect('updated', self._find_updated_cb) else: # FIXME: highlight nothing pass @@ -148,7 +157,7 @@ class EditToolbar(activity.EditToolbar): def _find_changed_cb(self, page, spec): self._update_find_buttons() - def _find_updated_cb(self, job, page): + def _find_updated_cb(self, job, page = None): self._evince_view.find_changed(job, page) def _find_prev_cb(self, button): @@ -182,10 +191,10 @@ class EditToolbar(activity.EditToolbar): class ReadToolbar(gtk.Toolbar): __gtype_name__ = 'ReadToolbar' - def __init__(self, evince_view, sidebar): + def __init__(self, sidebar): gtk.Toolbar.__init__(self) - self._evince_view = evince_view + self._evince_view = None self._sidebar = sidebar self._document = None @@ -200,7 +209,7 @@ class ReadToolbar(gtk.Toolbar): palette.menu.append(self._prev_bookmark) self._prev_bookmark.show_all() self._back.connect('clicked', self._go_back_cb) - self._prev_page.connect('activate', self._go_back_cb) + self._prev_page.connect('activate', self._go_back_page_cb) self._prev_bookmark.connect('activate', self._prev_bookmark_activate_cb) self.insert(self._back, -1) self._back.show() @@ -216,7 +225,7 @@ class ReadToolbar(gtk.Toolbar): palette.menu.append(self._next_bookmark) self._next_bookmark.show_all() self._forward.connect('clicked', self._go_forward_cb) - self._next_page.connect('activate', self._go_forward_cb) + self._next_page.connect('activate', self._go_forward_page_cb) self._next_bookmark.connect('activate', self._next_bookmark_activate_cb) self.insert(self._forward, -1) self._forward.show() @@ -286,7 +295,10 @@ class ReadToolbar(gtk.Toolbar): self.insert(bookmarkitem, -1) bookmarkitem.show_all() - + + def set_view(self, view): + self._evince_view = view + def set_document(self, document, filepath): filehash = get_md5(filepath) self._document = document @@ -315,11 +327,17 @@ class ReadToolbar(gtk.Toolbar): self._document.get_page_cache().set_current_page(page) entry.props.text = str(page + 1) - + def _go_back_cb(self, button): + self._evince_view.scroll(gtk.SCROLL_PAGE_BACKWARD, False) + + def _go_forward_cb(self, button): + self._evince_view.scroll(gtk.SCROLL_PAGE_FORWARD, False) + + def _go_back_page_cb(self, button): self._evince_view.previous_page() - def _go_forward_cb(self, button): + def _go_forward_page_cb(self, button): self._evince_view.next_page() def _prev_bookmark_activate_cb(self, menuitem): @@ -345,7 +363,7 @@ class ReadToolbar(gtk.Toolbar): else: self._sidebar.del_bookmark(page) - def _page_changed_cb(self, page, proxy): + def _page_changed_cb(self, page, proxy = None): self._update_nav_buttons() if hasattr(self._document, 'has_document_links'): if self._document.has_document_links(): @@ -391,11 +409,19 @@ class ReadToolbar(gtk.Toolbar): def _toc_select_active_page_foreach(self, model, path, iter, current_page): link = self._toc_model.get(iter, 1)[0] - if current_page == link.get_page(): - self._navigator.set_active_iter(iter) - return True + if not hasattr(link, 'get_page'): + #FIXME: This needs to be implemented in epubadapter, not here + filepath = self._evince_view.get_current_file() + if filepath.endswith(link): + self._navigator.set_active_iter(iter) + return True else: - return False + if current_page == link.get_page(): + self._navigator.set_active_iter(iter) + return True + + return False + def _toc_select_active_page(self): iter = self._navigator.get_active_iter() @@ -403,9 +429,14 @@ class ReadToolbar(gtk.Toolbar): current_link = self._toc_model.get(iter, 1)[0] current_page = self._document.get_page_cache().get_current_page() - if current_link.get_page() == current_page: - # Nothing to do - return + + if not hasattr(current_link, 'get_page'): + filepath = self._evince_view.get_current_file() + if filepath is None or filepath.endswith(current_link): + return + else: + if current_link.get_page() == current_page: + return self._navigator.handler_block(self.__navigator_changed_handler_id) self._toc_model.foreach(self._toc_select_active_page_foreach, current_page) @@ -424,10 +455,10 @@ class ViewToolbar(gtk.Toolbar): ([])) } - def __init__(self, evince_view): + def __init__(self): gtk.Toolbar.__init__(self) - self._evince_view = evince_view + self._evince_view = None self._document = None self._zoom_out = ToolButton('zoom-out') @@ -466,7 +497,6 @@ class ViewToolbar(gtk.Toolbar): self._zoom_spin = gtk.SpinButton() self._zoom_spin.set_range(5.409, 400) self._zoom_spin.set_increments(1, 10) - self._zoom_spin.props.value = self._evince_view.props.zoom * 100 self._zoom_spin_notify_value_handler = self._zoom_spin.connect( 'notify::value', self._zoom_spin_notify_value_cb) tool_item.add(self._zoom_spin) @@ -479,11 +509,6 @@ class ViewToolbar(gtk.Toolbar): self.insert(tool_item_zoom_perc_label, -1) tool_item_zoom_perc_label.show() - self._view_notify_zoom_handler = self._evince_view.connect( - 'notify::zoom', self._view_notify_zoom_cb) - - self._update_zoom_buttons() - spacer = gtk.SeparatorToolItem() spacer.props.draw = False self.insert(spacer, -1) @@ -495,10 +520,24 @@ class ViewToolbar(gtk.Toolbar): self.insert(self._fullscreen, -1) self._fullscreen.show() + self._view_notify_zoom_handler = None + + def set_view(self, view): + self._evince_view = view + 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._update_zoom_buttons() + + def _zoom_spin_notify_value_cb(self, zoom_spin, pspec): + if not self._view_notify_zoom_handler: + return self._evince_view.disconnect(self._view_notify_zoom_handler) try: - self._evince_view.props.sizing_mode = evince.SIZING_FREE + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FREE self._evince_view.props.zoom = zoom_spin.props.value / 100.0 finally: self._view_notify_zoom_handler = self._evince_view.connect( @@ -513,7 +552,8 @@ class ViewToolbar(gtk.Toolbar): 'notify::value', self._zoom_spin_notify_value_cb) def zoom_in(self): - self._evince_view.props.sizing_mode = evince.SIZING_FREE + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FREE self._evince_view.zoom_in() self._update_zoom_buttons() @@ -521,7 +561,8 @@ class ViewToolbar(gtk.Toolbar): self.zoom_in() def zoom_out(self): - self._evince_view.props.sizing_mode = evince.SIZING_FREE + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FREE self._evince_view.zoom_out() self._update_zoom_buttons() @@ -529,7 +570,8 @@ class ViewToolbar(gtk.Toolbar): self.zoom_out() def zoom_to_width(self): - self._evince_view.props.sizing_mode = evince.SIZING_FIT_WIDTH + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FIT_WIDTH self.emit('needs-update-size') self._update_zoom_buttons() @@ -541,12 +583,14 @@ 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): - self._evince_view.props.sizing_mode = evince.SIZING_BEST_FIT + if hasattr(self._evince_view.props, 'sizing_mode'): #XXX + self._evince_view.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): - self._evince_view.props.sizing_mode = evince.SIZING_FREE + if hasattr(self._evince_view.props, 'sizing_mode'): + self._evince_view.props.sizing_mode = evince.SIZING_FREE self._evince_view.props.zoom = 1.0 self._update_zoom_buttons() |