Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/ReadEtextsActivity.py
diff options
context:
space:
mode:
authorJames Simmons <jim@simmons.olpc>2010-03-07 03:04:44 (GMT)
committer James Simmons <jim@simmons.olpc>2010-03-07 03:04:44 (GMT)
commitaf6edefb9d7230d97e422291ca56a8315fda9a39 (patch)
tree68ad80a58d12f823fabae55abe371a19b21c400e /ReadEtextsActivity.py
parent9f37a5b47cae770bd1e92a748e36bce2b6667f59 (diff)
Add new style toolbar to Read Etexts
Diffstat (limited to 'ReadEtextsActivity.py')
-rw-r--r--ReadEtextsActivity.py407
1 files changed, 344 insertions, 63 deletions
diff --git a/ReadEtextsActivity.py b/ReadEtextsActivity.py
index 3f604a9..0cffd5a 100644
--- a/ReadEtextsActivity.py
+++ b/ReadEtextsActivity.py
@@ -1,6 +1,6 @@
#! /usr/bin/env python
-# Copyright (C) 2008, 2009 James D. Simmons
+# Copyright (C) 2008, 2009, 2010 James D. Simmons
#
# 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
@@ -16,6 +16,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import os
+import re
import logging
import tempfile
import time
@@ -30,7 +31,21 @@ from sugar.activity import activity
from sugar import network
from sugar.datastore import datastore
from sugar.graphics.alert import NotifyAlert
-from readtoolbar import ReadToolbar, ViewToolbar, EditToolbar, BooksToolbar, SpeechToolbar
+
+_NEW_TOOLBAR_SUPPORT = True
+try:
+ from sugar.graphics.toolbarbox import ToolbarBox
+ from sugar.graphics.toolbarbox import ToolbarButton
+ from sugar.activity.widgets import StopButton
+ from readtoolbar import ViewToolbar, EditToolbar, BooksToolbar, SpeechToolbar
+ from sugar.graphics.toolbutton import ToolButton
+ from sugar.graphics.menuitem import MenuItem
+ from sugar.graphics.toggletoolbutton import ToggleToolButton
+ from mybutton import MyActivityToolbarButton
+except:
+ _NEW_TOOLBAR_SUPPORT = False
+ from readtoolbar import ReadToolbar, ViewToolbar, EditToolbar, BooksToolbar, SpeechToolbar
+
from readsidebar import Sidebar
from gettext import gettext as _
import pango
@@ -186,48 +201,11 @@ class ReadEtextsActivity(activity.Activity):
self.object_id = handle.object_id
self.extra_journal_entry = None
- toolbox = activity.ActivityToolbox(self)
- activity_toolbar = toolbox.get_activity_toolbar()
- activity_toolbar.remove(activity_toolbar.keep)
- activity_toolbar.keep = None
- self.set_toolbox(toolbox)
-
- self.edit_toolbar = EditToolbar()
- self.edit_toolbar.undo.props.visible = False
- self.edit_toolbar.redo.props.visible = False
- self.edit_toolbar.separator.props.visible = False
- self.edit_toolbar.copy.set_sensitive(False)
- self.edit_toolbar.copy.connect('clicked', self.edit_toolbar_copy_cb)
- self.edit_toolbar.paste.props.visible = False
- toolbox.add_toolbar(_('Edit'), self.edit_toolbar)
- self.edit_toolbar.set_activity(self)
- self.edit_toolbar.show()
-
- self.read_toolbar = ReadToolbar()
- toolbox.add_toolbar(_('Read'), self.read_toolbar)
- self.read_toolbar.set_activity(self)
- self.read_toolbar.show()
-
- if not self._shared_activity and self.object_id is None:
- self.books_toolbar = BooksToolbar()
- toolbox.add_toolbar(_('Books'), self.books_toolbar)
- self.books_toolbar.set_activity(self)
- self.books_toolbar.show()
-
- self.view_toolbar = ViewToolbar()
- toolbox.add_toolbar(_('View'), self.view_toolbar)
- self.view_toolbar.connect('go-fullscreen',
- self.view_toolbar_go_fullscreen_cb)
- self.view_toolbar.set_activity(self)
- self.view_toolbar.show()
-
- if speech.supported:
- self.speech_toolbar = SpeechToolbar()
- toolbox.add_toolbar(_('Speech'), self.speech_toolbar)
- self.speech_toolbar.set_activity(self)
- self.speech_toolbar.show()
+ if _NEW_TOOLBAR_SUPPORT:
+ self.create_new_toolbar()
+ else:
+ self.create_old_toolbar()
- toolbox.show()
self.scrolled = gtk.ScrolledWindow()
self.scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
self.scrolled.props.shadow_type = gtk.SHADOW_NONE
@@ -331,8 +309,6 @@ class ReadEtextsActivity(activity.Activity):
self.connect("focus-out-event", self.focus_out_event_cb)
self.connect("notify::active", self.now_active_cb)
- # start on the read toolbar
- self.toolbox.set_current_toolbar(TOOLBAR_READ)
self.unused_download_tubes = set()
self.want_document = True
self.download_content_length = 0
@@ -356,7 +332,6 @@ class ReadEtextsActivity(activity.Activity):
self.connect("joined", self.joined_cb)
elif self.object_id is None:
# Not joining, not resuming
- self.toolbox.set_current_toolbar(TOOLBAR_BOOKS)
f = open("help.txt","r")
line = ''
label_text = ''
@@ -373,7 +348,262 @@ class ReadEtextsActivity(activity.Activity):
speech.highlight_cb = self.highlight_next_word
speech.reset_cb = self.reset_play_button
+
+ def create_old_toolbar(self):
+ toolbox = activity.ActivityToolbox(self)
+ activity_toolbar = toolbox.get_activity_toolbar()
+ activity_toolbar.remove(activity_toolbar.keep)
+ activity_toolbar.keep = None
+ self.set_toolbox(toolbox)
+
+ self.edit_toolbar = EditToolbar()
+ self.edit_toolbar.undo.props.visible = False
+ self.edit_toolbar.redo.props.visible = False
+ self.edit_toolbar.separator.props.visible = False
+ self.edit_toolbar.copy.set_sensitive(False)
+ self.edit_toolbar.copy.connect('clicked', self.edit_toolbar_copy_cb)
+ self.edit_toolbar.paste.props.visible = False
+ toolbox.add_toolbar(_('Edit'), self.edit_toolbar)
+ self.edit_toolbar.set_activity(self)
+ self.edit_toolbar.show()
+
+ self.read_toolbar = ReadToolbar()
+ toolbox.add_toolbar(_('Read'), self.read_toolbar)
+ self.read_toolbar.set_activity(self)
+ self.read_toolbar.show()
+
+ if not self._shared_activity and self.object_id is None:
+ self.books_toolbar = BooksToolbar()
+ toolbox.add_toolbar(_('Books'), self.books_toolbar)
+ self.books_toolbar.set_activity(self)
+ self.books_toolbar.show()
+
+ self.view_toolbar = ViewToolbar()
+ toolbox.add_toolbar(_('View'), self.view_toolbar)
+ self.view_toolbar.connect('go-fullscreen',
+ self.view_toolbar_go_fullscreen_cb)
+ self.view_toolbar.set_activity(self)
+ self.view_toolbar.show()
+
+ if speech.supported:
+ self.speech_toolbar = SpeechToolbar()
+ toolbox.add_toolbar(_('Speech'), self.speech_toolbar)
+ self.speech_toolbar.set_activity(self)
+ self.speech_toolbar.show()
+
+ toolbox.show()
+ # start on the read toolbar
+ if self.object_id is None:
+ # Not joining, not resuming
+ self.toolbox.set_current_toolbar(TOOLBAR_BOOKS)
+ else:
+ self.toolbox.set_current_toolbar(TOOLBAR_READ)
+ def create_new_toolbar(self):
+ toolbar_box = ToolbarBox()
+
+ activity_button = MyActivityToolbarButton(self)
+ toolbar_box.toolbar.insert(activity_button, 0)
+ activity_button.show()
+
+ self.edit_toolbar = activity.EditToolbar()
+ self.edit_toolbar.undo.props.visible = False
+ self.edit_toolbar.redo.props.visible = False
+ self.edit_toolbar.separator.props.visible = False
+ self.edit_toolbar.copy.set_sensitive(False)
+ self.edit_toolbar.copy.connect('clicked', self.edit_toolbar_copy_cb)
+ self.edit_toolbar.paste.props.visible = False
+
+ edit_toolbar_button = ToolbarButton(
+ page=self.edit_toolbar,
+ icon_name='toolbar-edit')
+ self.edit_toolbar.show()
+ toolbar_box.toolbar.insert(edit_toolbar_button, -1)
+ edit_toolbar_button.show()
+
+ if not self._shared_activity and self.object_id is None:
+ self.books_toolbar = BooksToolbar()
+ self.books_toolbar.set_activity(self)
+ self.books_toolbar.show()
+ books_toolbar_button = ToolbarButton(page=self.books_toolbar, icon_name='books')
+ toolbar_box.toolbar.insert(books_toolbar_button, -1)
+ books_toolbar_button.show()
+
+ self.view_toolbar = ViewToolbar()
+ self.view_toolbar.connect('go-fullscreen', \
+ self.view_toolbar_go_fullscreen_cb)
+ self.view_toolbar.set_activity(self)
+ self.view_toolbar.show()
+ view_toolbar_button = ToolbarButton(
+ page=self.view_toolbar,
+ icon_name='toolbar-view')
+ toolbar_box.toolbar.insert(view_toolbar_button, -1)
+ view_toolbar_button.show()
+
+ 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)
+ toolbar_box.toolbar.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)
+ toolbar_box.toolbar.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.__new_num_page_entry_insert_text_cb)
+ self.num_page_entry.connect('activate',
+ self.__new_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()
+ toolbar_box.toolbar.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()
+ toolbar_box.toolbar.insert(total_page_item, -1)
+ total_page_item.show()
+
+ spacer = gtk.SeparatorToolItem()
+ toolbar_box.toolbar.insert(spacer, -1)
+ spacer.show()
+
+ bookmarkitem = gtk.ToolItem()
+ self.bookmarker = ToggleToolButton('emblem-favorite')
+ self.bookmarker.set_tooltip(_('Toggle Bookmark'))
+ self.bookmarker_handler_id = self.bookmarker.connect('clicked',
+ self.bookmarker_clicked_cb)
+
+ bookmarkitem.add(self.bookmarker)
+
+ toolbar_box.toolbar.insert(bookmarkitem, -1)
+ bookmarkitem.show_all()
+
+ underline_item = gtk.ToolItem()
+ self.underline = ToggleToolButton('format-text-underline')
+ self.underline.set_tooltip(_('Underline'))
+ self.underline.props.sensitive = False
+ self.underline_id = self.underline.connect('clicked', self.underline_cb)
+ underline_item.add(self.underline)
+ toolbar_box.toolbar.insert(underline_item, -1)
+ underline_item.show_all()
+
+ separator = gtk.SeparatorToolItem()
+ separator.props.draw = False
+ separator.set_expand(True)
+ toolbar_box.toolbar.insert(separator, -1)
+ separator.show()
+
+ stop_button = StopButton(self)
+ stop_button.props.accelerator = '<Ctrl><Shift>Q'
+ toolbar_box.toolbar.insert(stop_button, -1)
+ stop_button.show()
+
+ self.set_toolbar_box(toolbar_box)
+ toolbar_box.show()
+
+ def __new_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 __new_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.set_current_page(page)
+ self.show_page(page)
+ entry.props.text = str(page + 1)
+ self.update_nav_buttons()
+
+ def go_back_cb(self, button):
+ self.page_previous()
+
+ def go_forward_cb(self, button):
+ self.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 prev_bookmark_activate_cb(self, menuitem):
+ self.prev_bookmark()
+
+ def next_bookmark_activate_cb(self, menuitem):
+ self.next_bookmark()
+
+ def bookmarker_clicked_cb(self, button):
+ self.bookmarker_clicked(button)
+
+ def underline_cb(self, button):
+ self.underline_clicked(button)
+
+ def setToggleButtonState(self,button,b,id):
+ button.handler_block(id)
+ button.set_active(b)
+ button.handler_unblock(id)
+
+ def update_underline_button(self, state):
+ self.setToggleButtonState(self.underline, state, self.underline_id)
+
+ def update_bookmark_button(self, state):
+ self.setToggleButtonState(self.bookmarker, state, self.bookmarker_handler_id)
+
def reset_current_word(self):
self.current_word = 0
@@ -405,7 +635,10 @@ class ReadEtextsActivity(activity.Activity):
return True
def mark_set_cb(self, textbuffer, iter, textmark):
- self.read_toolbar.update_underline_button(False)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.update_underline_button(False)
+ else:
+ self.read_toolbar.update_underline_button(False)
if textbuffer.get_has_selection():
begin, end = textbuffer.get_selection_bounds()
@@ -415,7 +648,10 @@ class ReadEtextsActivity(activity.Activity):
while count < len(tuples_list) :
compare_tuple = tuples_list[count]
if underline_tuple[0] >= compare_tuple[0] and underline_tuple[1] <= compare_tuple[1]:
- self.read_toolbar.update_underline_button(True)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.update_underline_button(True)
+ else:
+ self.read_toolbar.update_underline_button(True)
textbuffer.handler_block(self.markset_id)
iterStart = textbuffer.get_iter_at_offset(compare_tuple[0])
iterEnd = textbuffer.get_iter_at_offset(compare_tuple[1])
@@ -425,10 +661,16 @@ class ReadEtextsActivity(activity.Activity):
count = count + 1
self.edit_toolbar.copy.set_sensitive(True)
- self.read_toolbar.underline.props.sensitive = True
+ if _NEW_TOOLBAR_SUPPORT:
+ self.underline.props.sensitive = True
+ else:
+ self.read_toolbar.underline.props.sensitive = True
else:
self.edit_toolbar.copy.set_sensitive(False)
- self.read_toolbar.underline.props.sensitive = False
+ if _NEW_TOOLBAR_SUPPORT:
+ self.underline.props.sensitive = False
+ else:
+ self.read_toolbar.underline.props.sensitive = False
def edit_toolbar_copy_cb(self, button):
textbuffer = self.textview.get_buffer()
@@ -498,10 +740,16 @@ class ReadEtextsActivity(activity.Activity):
bookmark = self.annotations.is_bookmarked(self.page)
if bookmark:
self.sidebar.show_bookmark_icon(True)
- self.read_toolbar.update_bookmark_button(True)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.update_bookmark_button(True)
+ else:
+ self.read_toolbar.update_bookmark_button(True)
else:
self.sidebar.show_bookmark_icon(False)
- self.read_toolbar.update_bookmark_button(False)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.update_bookmark_button(False)
+ else:
+ self.read_toolbar.update_bookmark_button(False)
def underline_clicked(self, button):
tuples_list = self.annotations.get_highlights(self.page)
@@ -551,14 +799,20 @@ class ReadEtextsActivity(activity.Activity):
if bookmarks[count] < self.page:
self.page = bookmarks[count]
self.show_page(self.page)
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
return
count = count - 1
# if we're before the first bookmark wrap to the last.
if len(bookmarks) > 0:
self.page = bookmarks[len(bookmarks) - 1]
self.show_page(self.page)
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
def next_bookmark(self):
bookmarks = self.annotations.get_bookmarks()
@@ -567,14 +821,20 @@ class ReadEtextsActivity(activity.Activity):
if bookmarks[count] > self.page:
self.page = bookmarks[count]
self.show_page(self.page)
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
return
count = count + 1
# if we're after the last bookmark wrap to the first.
if len(bookmarks) > 0:
self.page = bookmarks[0]
self.show_page(self.page)
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
def page_next(self):
textbuffer = self.annotation_textview.get_buffer()
@@ -584,7 +844,10 @@ class ReadEtextsActivity(activity.Activity):
self.show_page(self.page)
v_adjustment = self.scrolled.get_vadjustment()
v_adjustment.value = v_adjustment.lower
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
def page_previous(self):
textbuffer = self.annotation_textview.get_buffer()
@@ -594,7 +857,10 @@ class ReadEtextsActivity(activity.Activity):
self.show_page(self.page)
v_adjustment = self.scrolled.get_vadjustment()
v_adjustment.value = v_adjustment.upper - v_adjustment.page_size
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
def font_decrease(self):
font_size = self.font_desc.get_size() / 1024
@@ -645,6 +911,8 @@ class ReadEtextsActivity(activity.Activity):
v_adjustment.value = new_value
def set_current_page(self, page):
+ self.current_page = page
+ self.update_nav_buttons()
self.page = page
def show_page(self, page_number):
@@ -860,8 +1128,12 @@ class ReadEtextsActivity(activity.Activity):
self.get_saved_page_number()
self.show_page(self.page)
- self.read_toolbar.set_total_pages(pagecount + 1)
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_total_pages(pagecount + 1)
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_total_pages(pagecount + 1)
+ self.read_toolbar.set_current_page(self.page)
self.edit_toolbar.enable_search(True)
if filename.endswith(".zip"):
os.remove(current_file_name)
@@ -1113,7 +1385,10 @@ class ReadEtextsActivity(activity.Activity):
self.current_found_item = 0
current_found_tuple = self.found_records[self.current_found_item]
self.page = current_found_tuple[0]
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
self.show_found_page(current_found_tuple)
def find_next(self):
@@ -1122,7 +1397,10 @@ class ReadEtextsActivity(activity.Activity):
self.current_found_item = len(self.found_records) - 1
current_found_tuple = self.found_records[self.current_found_item]
self.page = current_found_tuple[0]
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
self.show_found_page(current_found_tuple)
def can_find_previous(self):
@@ -1163,7 +1441,10 @@ class ReadEtextsActivity(activity.Activity):
if self.current_found_item == 0:
current_found_tuple = self.found_records[self.current_found_item]
self.page = current_found_tuple[0]
- self.read_toolbar.set_current_page(self.page)
+ if _NEW_TOOLBAR_SUPPORT:
+ self.set_current_page(self.page)
+ else:
+ self.read_toolbar.set_current_page(self.page)
self.show_found_page(current_found_tuple)
def allindices(self, line, search, listindex=None, offset=0):