Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2006-10-22 15:11:04 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2006-10-22 15:11:04 (GMT)
commitf5ed91621f4c5abb37f93c98a401b797e8ce20cf (patch)
tree87fda00893a7f9d838de48ab5cb538449d265232
parent82c2f8e52ca185c0e8f0c5fa39e9eb292e0a39b5 (diff)
Added toolbar with navigation and search capabilities.
Signed-off-by: Tomeu Vizoso <tomeu@tomeuvizoso.net>
-rw-r--r--Makefile.am3
-rw-r--r--XbookActivity.py50
-rw-r--r--toolbar.py163
3 files changed, 195 insertions, 21 deletions
diff --git a/Makefile.am b/Makefile.am
index aaadd7b..ee3369f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,8 @@
activitydir = $(datadir)/sugar/activities/xbook
activity_PYTHON = \
__init__.py \
- XbookActivity.py
+ XbookActivity.py \
+ toolbar.py
EXTRA_DIST = xbook.activity
diff --git a/XbookActivity.py b/XbookActivity.py
index d994080..e5a6ae6 100644
--- a/XbookActivity.py
+++ b/XbookActivity.py
@@ -1,26 +1,36 @@
import os
-
+from gettext import gettext as _
import gtk
import evince
-
from sugar.activity.Activity import Activity
-class XbookActivity(Activity):
- def __init__(self):
- Activity.__init__(self)
-
- evince.job_queue_init()
+from toolbar import Toolbar
- scrolled = gtk.ScrolledWindow()
- self.add(scrolled)
- scrolled.show()
-
- test_file = 'file://' + os.path.expanduser('~/test.pdf')
-
- view = evince.View()
- document = evince.factory_get_document(test_file)
- document.load(test_file)
- view.set_document(document)
-
- scrolled.add(view)
- view.show()
+class XbookActivity(Activity):
+ def __init__(self):
+ Activity.__init__(self)
+
+ self.set_title(_('Read Activity'))
+
+ evince.job_queue_init()
+ evince_view = evince.View()
+
+ vbox = gtk.VBox(False, 0)
+ self.add(vbox)
+ vbox.show()
+
+ toolbar = Toolbar(evince_view)
+ vbox.pack_start(toolbar, False)
+ toolbar.show()
+
+ scrolled = gtk.ScrolledWindow()
+ vbox.pack_start(scrolled, True, True)
+ scrolled.show()
+
+ scrolled.add(evince_view)
+ evince_view.show()
+
+ test_file = 'file://' + os.path.expanduser('~/test.pdf')
+ document = evince.factory_get_document(test_file)
+ evince_view.set_document(document)
+ toolbar.set_document(document)
diff --git a/toolbar.py b/toolbar.py
new file mode 100644
index 0000000..740d60a
--- /dev/null
+++ b/toolbar.py
@@ -0,0 +1,163 @@
+# Copyright (C) 2006, Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+import logging
+import gtk
+import pango
+
+class Toolbar(gtk.Toolbar):
+ def __init__(self, evince_view):
+ gtk.Toolbar.__init__(self)
+
+ self.set_style(gtk.TOOLBAR_BOTH_HORIZ)
+
+ self._evince_view = evince_view
+ self._document = None
+
+ self._insert_nav_items()
+ self._insert_spring()
+ self._insert_search_items()
+
+ def set_document(self, document):
+ self._document = document
+ self._document.connect("find_changed", self._find_changed_cb)
+
+ page_cache = self._document.get_page_cache()
+ page_cache.connect("page-changed", self._page_changed_cb)
+ self._update_nav_buttons()
+
+ def _insert_spring(self):
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(False)
+ separator.set_expand(True)
+ self.insert(separator, -1)
+ separator.show()
+
+ def _insert_nav_items(self):
+ self._back = gtk.ToolButton()
+ self._back.props.sensitive = False
+ self._back.set_icon_name('stock-back')
+ self._back.connect("clicked", self._go_back_cb)
+ self.insert(self._back, -1)
+ self._back.show()
+
+ self._forward = gtk.ToolButton()
+ self._back.props.sensitive = False
+ self._forward.set_icon_name('stock-forward')
+ self._forward.connect("clicked", self._go_forward_cb)
+ self.insert(self._forward, -1)
+ self._forward.show()
+
+ num_page_item = gtk.ToolItem()
+
+ self._num_page_entry = gtk.Entry()
+ self._num_page_entry.set_text('0')
+ self._num_page_entry.set_alignment(1)
+ self._num_page_entry.connect("activate",
+ self._num_page_entry_activate_cb)
+
+ self._num_page_entry.set_width_chars(4)
+
+ num_page_item.add(self._num_page_entry)
+ self._num_page_entry.show()
+
+ self.insert(num_page_item, -1)
+ num_page_item.show()
+
+ total_page_item = gtk.ToolItem()
+
+ self._total_page_label = gtk.Label()
+
+ label_attributes = pango.AttrList()
+ label_attributes.insert(pango.AttrSize(14000, 0, -1))
+ label_attributes.insert(pango.AttrForeground(65535, 65535, 65535, 0, -1))
+ self._total_page_label.set_attributes(label_attributes)
+
+ self._total_page_label.set_text(' / 0')
+ total_page_item.add(self._total_page_label)
+ self._total_page_label.show()
+
+ self.insert(total_page_item, -1)
+ total_page_item.show()
+
+ def _insert_search_items(self):
+ search_item = gtk.ToolItem()
+
+ self._search_entry = gtk.Entry()
+ self._search_entry.connect("activate", self._search_entry_activate_cb)
+
+ width = int(gtk.gdk.screen_width() / 3)
+ self._search_entry.set_size_request(width, -1)
+
+ search_item.add(self._search_entry)
+ self._search_entry.show()
+
+ self.insert(search_item, -1)
+ search_item.show()
+
+ self._prev = gtk.ToolButton()
+ self._prev.props.sensitive = False
+ self._prev.set_icon_name('stock-back')
+ self._prev.connect("clicked", self._find_prev_cb)
+ self.insert(self._prev, -1)
+ self._prev.show()
+
+ self._next = gtk.ToolButton()
+ self._next.props.sensitive = False
+ self._next.set_icon_name('stock-forward')
+ self._next.connect("clicked", self._find_next_cb)
+ self.insert(self._next, -1)
+ self._next.show()
+
+ def _num_page_entry_activate_cb(self, entry):
+ page = int(entry.get_text()) - 1
+ self._document.get_page_cache().set_current_page(page)
+
+ def _search_entry_activate_cb(self, entry):
+ current_page = self._document.get_page_cache().get_current_page()
+ self._document.find_begin(0, entry.get_text(), False)
+ self._update_find_buttons()
+
+ def _find_prev_cb(self, button):
+ self._evince_view.find_previous()
+
+ def _find_next_cb(self, button):
+ self._evince_view.find_next()
+
+ def _go_back_cb(self, button):
+ self._evince_view.previous_page()
+
+ def _go_forward_cb(self, button):
+ self._evince_view.next_page()
+
+ def _page_changed_cb(self, page, proxy):
+ self._update_nav_buttons()
+
+ def _find_changed_cb(self, page, spec):
+ self._update_find_buttons()
+
+ def _update_nav_buttons(self):
+ current_page = self._document.get_page_cache().get_current_page()
+ self._back.props.sensitive = current_page > 0
+ self._forward.props.sensitive = current_page < self._document.get_n_pages() - 1
+
+ self._num_page_entry.set_text(str(current_page + 1))
+ self._total_page_label.set_text(' / ' + str(self._document.get_n_pages()))
+
+ def _update_find_buttons(self):
+ self._prev.props.sensitive = self._evince_view.can_find_previous()
+ self._next.props.sensitive = self._evince_view.can_find_next()
+