Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSayamindu Dasgupta <sayamindu@gmail.com>2009-02-22 20:37:49 (GMT)
committer Sayamindu Dasgupta <sayamindu@gmail.com>2009-02-22 20:37:49 (GMT)
commit14ef8b32f2a492e831df4d5915a99284ba5b26ce (patch)
tree70ecdc526170ec1354d34d12f982f7bb26e0ad7f
parentc3b22d8ad925638783f1708dda28666bb2082afe (diff)
Enable jumping between bookmarks (jump to next/previous bookmark
-rw-r--r--readdb.py32
-rw-r--r--readsidebar.py3
-rw-r--r--readtoolbar.py34
3 files changed, 68 insertions, 1 deletions
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: