From 14ef8b32f2a492e831df4d5915a99284ba5b26ce Mon Sep 17 00:00:00 2001 From: Sayamindu Dasgupta Date: Sun, 22 Feb 2009 20:37:49 +0000 Subject: Enable jumping between bookmarks (jump to next/previous bookmark --- diff --git a/readdb.py b/readdb.py index 3166205..0ad6eb5 100644 --- a/readdb.py +++ b/readdb.py @@ -46,7 +46,7 @@ class BookmarkManager: def _populate_bookmarks(self): # TODO: Figure out if caching the entire set of bookmarks is a good idea or not - self._cur.execute('select * from bookmarks where md5=?', (self._filehash,)) + self._cur.execute('select * from bookmarks where md5=? order by page', (self._filehash,)) for row in self._cur: self._bookmarks.append(Bookmark(row)) @@ -63,3 +63,33 @@ class BookmarkManager: # To be called when a new bookmark has been added/removed self._bookmarks = [] self._populate_bookmarks() + + + def get_prev_bookmark_for_page(self, page, wrap = True): + if not len(self._bookmarks): + return None + + if page <= self._bookmarks[0].page_no and wrap: + return self._bookmarks[-1] + else: + for i in range(page-1, -1, -1): + for bookmark in self._bookmarks: + if bookmark.belongstopage(i): + return bookmark + + return None + + + def get_next_bookmark_for_page(self, page, wrap = True): + if not len(self._bookmarks): + return None + + if page >= self._bookmarks[-1].page_no and wrap: + return self._bookmarks[0] + else: + for i in range(page+1, self._bookmarks[-1].page_no + 1): + for bookmark in self._bookmarks: + if bookmark.belongstopage(i): + return bookmark + + return None diff --git a/readsidebar.py b/readsidebar.py index 4f2dec3..c73c1ad 100644 --- a/readsidebar.py +++ b/readsidebar.py @@ -60,6 +60,9 @@ class Sidebar(gtk.EventBox): def set_bookmarkmanager(self, filehash): self._bookmark_manager = BookmarkManager(filehash) + + def get_bookmarkmanager(self): + return (self._bookmark_manager) def update_for_page(self, page): self._clear_bookmarks() diff --git a/readtoolbar.py b/readtoolbar.py index 07a60c9..77825ec 100644 --- a/readtoolbar.py +++ b/readtoolbar.py @@ -192,14 +192,32 @@ class ReadToolbar(gtk.Toolbar): self._back = ToolButton('go-previous') self._back.set_tooltip(_('Back')) self._back.props.sensitive = False + palette = self._back.get_palette() + self._prev_page = MenuItem(text_label= _("Previous page")) + palette.menu.append(self._prev_page) + self._prev_page.show_all() + self._prev_bookmark = MenuItem(text_label= _("Previous bookmark")) + 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_bookmark.connect('activate', self._prev_bookmark_activate_cb) self.insert(self._back, -1) self._back.show() self._forward = ToolButton('go-next') self._forward.set_tooltip(_('Forward')) self._forward.props.sensitive = False + palette = self._forward.get_palette() + self._next_page = MenuItem(text_label= _("Next page")) + palette.menu.append(self._next_page) + self._next_page.show_all() + self._next_bookmark = MenuItem(text_label= _("Next bookmark")) + 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_bookmark.connect('activate', self._next_bookmark_activate_cb) self.insert(self._forward, -1) self._forward.show() @@ -304,6 +322,22 @@ class ReadToolbar(gtk.Toolbar): def _go_forward_cb(self, button): self._evince_view.next_page() + def _prev_bookmark_activate_cb(self, menuitem): + page = self._document.get_page_cache().get_current_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) + + def _next_bookmark_activate_cb(self, menuitem): + page = self._document.get_page_cache().get_current_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) + def _bookmarker_toggled_cb(self, button): page = self._document.get_page_cache().get_current_page() if self._bookmarker.props.active: -- cgit v0.9.1