Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/readtoolbar.py
diff options
context:
space:
mode:
Diffstat (limited to 'readtoolbar.py')
-rw-r--r--readtoolbar.py93
1 files changed, 87 insertions, 6 deletions
diff --git a/readtoolbar.py b/readtoolbar.py
index 5c812c9..d79c1ed 100644
--- a/readtoolbar.py
+++ b/readtoolbar.py
@@ -23,10 +23,28 @@ import gobject
import gtk
import evince
+import md5
+
from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.toggletoolbutton import ToggleToolButton
from sugar.graphics.menuitem import MenuItem
from sugar.graphics import iconentry
from sugar.activity import activity
+from sugar.graphics.icon import Icon
+from sugar.graphics.xocolor import XoColor
+
+def get_md5(filename): #FIXME: Should be moved somewhere else
+ filename = filename.replace('file://', '') #XXX: hack
+ fh = open(filename)
+ digest = md5.new()
+ while 1:
+ buf = fh.read(4096)
+ if buf == "":
+ break
+ digest.update(buf)
+ fh.close()
+ return digest.hexdigest()
+
class EditToolbar(activity.EditToolbar):
__gtype_name__ = 'EditToolbar'
@@ -164,23 +182,42 @@ class EditToolbar(activity.EditToolbar):
class ReadToolbar(gtk.Toolbar):
__gtype_name__ = 'ReadToolbar'
- def __init__(self, evince_view):
+ def __init__(self, evince_view, sidebar):
gtk.Toolbar.__init__(self)
self._evince_view = evince_view
+ self._sidebar = sidebar
self._document = None
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()
@@ -229,20 +266,35 @@ class ReadToolbar(gtk.Toolbar):
cell = gtk.CellRendererText()
self._navigator.pack_start(cell, True)
self._navigator.add_attribute(cell, 'text', 0)
- self._navigator.props.sensitive = False
+ self._navigator.props.visible = False
navitem.add(self._navigator)
self.insert(navitem, -1)
- navitem.show_all()
+ navitem.show()
-
- def set_document(self, document):
+ spacer = gtk.SeparatorToolItem()
+ self.insert(spacer, -1)
+ spacer.show()
+
+ bookmarkitem = gtk.ToolItem()
+ self._bookmarker = ToggleToolButton('emblem-favorite')
+ self._bookmarker_toggle_handler_id = self._bookmarker.connect('toggled',
+ self._bookmarker_toggled_cb)
+
+ bookmarkitem.add(self._bookmarker)
+
+ self.insert(bookmarkitem, -1)
+ bookmarkitem.show_all()
+
+ def set_document(self, document, filepath):
+ filehash = get_md5(filepath)
self._document = document
page_cache = self._document.get_page_cache()
page_cache.connect('page-changed', self._page_changed_cb)
self._update_nav_buttons()
self._update_toc()
+ self._sidebar.set_bookmarkmanager(filehash)
def _num_page_entry_insert_text_cb(self, entry, text, length, position):
if not re.match('[0-9]', text):
@@ -269,13 +321,42 @@ 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:
+ self._sidebar.add_bookmark(page)
+ else:
+ self._sidebar.del_bookmark(page)
def _page_changed_cb(self, page, proxy):
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._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()
self._back.props.sensitive = current_page > 0
@@ -289,7 +370,7 @@ class ReadToolbar(gtk.Toolbar):
def _update_toc(self):
if hasattr(self._document, 'has_document_links'):
if self._document.has_document_links():
- self._navigator.props.sensitive = True
+ self._navigator.show_all()
self._toc_model = self._document.get_links_model()
self._navigator.set_model(self._toc_model)