diff options
author | James 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) |
commit | b94f392f0379ff84831c19304d7978a3a4771a91 (patch) | |
tree | 0f38a0c420a1ea6282b4ef8ffbb8f9b910f8949d /readtoolbar.py |
Initial import
Diffstat (limited to 'readtoolbar.py')
-rw-r--r-- | readtoolbar.py | 216 |
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() |