Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/readtoolbar.py
diff options
context:
space:
mode:
authorJames Simmons <ja.simmons@sbcglobal.net>2008-03-01 20:48:13 (GMT)
committer James Simmons <ja.simmons@sbcglobal.net>2008-03-01 20:48:13 (GMT)
commitb94f392f0379ff84831c19304d7978a3a4771a91 (patch)
tree0f38a0c420a1ea6282b4ef8ffbb8f9b910f8949d /readtoolbar.py
Initial import
Diffstat (limited to 'readtoolbar.py')
-rw-r--r--readtoolbar.py216
1 files changed, 216 insertions, 0 deletions
diff --git a/readtoolbar.py b/readtoolbar.py
new file mode 100644
index 0000000..15d5eab
--- /dev/null
+++ b/readtoolbar.py
@@ -0,0 +1,216 @@
+# Copyright (C) 2008, James Simmons.
+# Adapted from code Copyright (C) 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
+from gettext import gettext as _
+import re
+
+import pango
+import gobject
+import gtk
+
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.menuitem import MenuItem
+from sugar.activity import activity
+
+class ReadToolbar(gtk.Toolbar):
+ __gtype_name__ = 'ReadToolbar'
+
+ def __init__(self):
+ gtk.Toolbar.__init__(self)
+ self._back = ToolButton('go-previous')
+ self._back.set_tooltip(_('Back'))
+ self._back.props.sensitive = False
+ self._back.connect('clicked', self._go_back_cb)
+ self.insert(self._back, -1)
+ self._back.show()
+
+ self._forward = ToolButton('go-next')
+ self._forward.set_tooltip(_('Forward'))
+ self._forward.props.sensitive = False
+ 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('insert-text',
+ self._num_page_entry_insert_text_cb)
+ 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 _num_page_entry_insert_text_cb(self, entry, text, length, position):
+ if not re.match('[0-9]', text):
+ entry.emit_stop_by_name('insert-text')
+ return True
+ return False
+
+ def _num_page_entry_activate_cb(self, entry):
+ if entry.props.text:
+ page = int(entry.props.text) - 1
+ else:
+ page = 0
+
+ if page >= self.total_pages:
+ page = self.total_pages - 1
+ elif page < 0:
+ page = 0
+
+ self.current_page = page
+ self.activity.set_current_page(page)
+ self.activity.show_page(page)
+ entry.props.text = str(page + 1)
+ self._update_nav_buttons()
+
+ def _go_back_cb(self, button):
+ self.activity.page_previous()
+
+ def _go_forward_cb(self, button):
+ self.activity.page_next()
+
+ def _update_nav_buttons(self):
+ current_page = self.current_page
+ self._back.props.sensitive = current_page > 0
+ self._forward.props.sensitive = \
+ current_page < self.total_pages - 1
+
+ self._num_page_entry.props.text = str(current_page + 1)
+ self._total_page_label.props.label = \
+ ' / ' + str(self.total_pages)
+
+ def set_total_pages(self, pages):
+ self.total_pages = pages
+
+ def set_current_page(self, page):
+ self.current_page = page
+ self._update_nav_buttons()
+
+ def set_activity(self, activity):
+ self.activity = activity
+
+class ViewToolbar(gtk.Toolbar):
+ __gtype_name__ = 'ViewToolbar'
+
+ def __init__(self):
+ gtk.Toolbar.__init__(self)
+ self._zoom_out = ToolButton('zoom-out')
+ self._zoom_out.set_tooltip(_('Zoom out'))
+ self._zoom_out.connect('clicked', self._zoom_out_cb)
+ self.insert(self._zoom_out, -1)
+ self._zoom_out.show()
+
+ self._zoom_in = ToolButton('zoom-in')
+ self._zoom_in.set_tooltip(_('Zoom in'))
+ self._zoom_in.connect('clicked', self._zoom_in_cb)
+ self.insert(self._zoom_in, -1)
+ self._zoom_in.show()
+
+ def _zoom_in_cb(self, button):
+ self.activity.font_increase()
+
+ def _zoom_out_cb(self, button):
+ self.activity.font_decrease()
+
+ def set_activity(self, activity):
+ self.activity = activity
+
+class EditToolbar(activity.EditToolbar):
+ __gtype_name__ = 'EditToolbar'
+
+ def __init__(self):
+ activity.EditToolbar.__init__(self)
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(False)
+ separator.set_expand(True)
+ self.insert(separator, -1)
+ separator.show()
+
+ 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 = ToolButton('go-previous-paired')
+ self._prev.set_tooltip(_('Previous'))
+ self._prev.props.sensitive = False
+ self._prev.connect('clicked', self._find_prev_cb)
+ self.insert(self._prev, -1)
+ self._prev.show()
+
+ self._next = ToolButton('go-next-paired')
+ self._next.set_tooltip(_('Next'))
+ self._next.props.sensitive = False
+ self._next.connect('clicked', self._find_next_cb)
+ self.insert(self._next, -1)
+ self._next.show()
+
+ def set_activity(self, activity):
+ self.activity = activity
+
+ def _search_entry_activate_cb(self, entry):
+ current_page = self.activity.get_current_page()
+ self.activity.find_begin(entry.props.text)
+ self._update_find_buttons()
+
+ def _find_changed_cb(self, page, spec):
+ self._update_find_buttons()
+
+ def _find_prev_cb(self, button):
+ self.activity.find_previous()
+
+ def _find_next_cb(self, button):
+ self.activity.find_next()
+
+ def _update_find_buttons(self):
+ self._prev.props.sensitive = self.activity.can_find_previous()
+ self._next.props.sensitive = self.activity.can_find_next()