diff options
Diffstat (limited to 'FlashcardActivity.py')
-rw-r--r-- | FlashcardActivity.py | 284 |
1 files changed, 284 insertions, 0 deletions
diff --git a/FlashcardActivity.py b/FlashcardActivity.py new file mode 100644 index 0000000..a78ef87 --- /dev/null +++ b/FlashcardActivity.py @@ -0,0 +1,284 @@ +# -*- coding: utf-8 -*- +#Copyright (c) 2010, Kirk Winans +#Code originally based on Walter Bender's Abacus Activity + +# 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 3 of the License, or +# (at your option) any later version. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +import pygtk +pygtk.require('2.0') +import gtk +import gobject + +import sugar +from sugar.activity import activity +from sugar.bundle.activitybundle import ActivityBundle +from sugar.activity.widgets import ActivityToolbarButton +from sugar.activity.widgets import StopButton +from sugar.graphics.toolbarbox import ToolbarBox +from sugar.graphics.toolbarbox import ToolbarButton +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics import style +from sugar.graphics.menuitem import MenuItem +from sugar.graphics.icon import Icon +from sugar.datastore import datastore + +from gettext import gettext as _ +import locale + +import logging +_logger = logging.getLogger("test-activity") + +from sugar import profile +import creationpanel +import browseeditpanel +import reviewselection +import reviewpanel + +_REVIEW_MODE = 1 +_CREATE_MODE = 2 +_BROWSE_MODE = 3 + +_EMPTY = "" + +# +# Sugar Flashcard Activity +# + +class FlashcardActivity(activity.Activity): + + def __init__(self, handle): + """ Initiate activity. """ + super(FlashcardActivity,self).__init__(handle) + + toolbar_box = ToolbarBox() + + # Buttons added to the Activity toolbar + activity_button = ActivityToolbarButton(self) + toolbar_box.toolbar.insert(activity_button, 0) + activity_button.show() + + + separator = gtk.SeparatorToolItem() + separator.props.draw = True + separator.set_expand(False) + separator.show() + toolbar_box.toolbar.insert(separator, -1) + + ## other buttons + + # Review Button + self.review_button = ToolButton( "emblem-question" ) + self.review_button.set_tooltip(_('Review')) + self.review_button.props.sensitive = True + self.review_button.connect('clicked',self._review_cb) + toolbar_box.toolbar.insert(self.review_button, -1) + self.review_button.show() + + separator = gtk.SeparatorToolItem() + separator.props.draw = True + separator.set_expand(False) + separator.show() + toolbar_box.toolbar.insert(separator, -1) + + # Create Button + self.create_button = ToolButton( "add" ) + self.create_button.set_tooltip(_('Create!')) + self.create_button.props.sensitive = True + self.create_button.connect('clicked', self._create_cb) + toolbar_box.toolbar.insert(self.create_button, -1) + self.create_button.show() + + separator = gtk.SeparatorToolItem() + separator.props.draw = True + separator.set_expand(False) + separator.show() + toolbar_box.toolbar.insert(separator, -1) + + # Browse/Edit Button + self.browse_edit_button = ToolButton( "search" ) + self.browse_edit_button.set_tooltip(_('Browse/Edit')) + self.browse_edit_button.props.sensitive = True + self.browse_edit_button.connect('clicked', self._browse_edit_cb) + toolbar_box.toolbar.insert(self.browse_edit_button, -1) + self.browse_edit_button.show() + + separator = gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_expand(True) + separator.show() + toolbar_box.toolbar.insert(separator, -1) + + separator = gtk.SeparatorToolItem() + separator.props.draw = True + separator.set_expand(False) + separator.show() + toolbar_box.toolbar.insert(separator, -1) + + # The ever-present Stop Button + stop_button = StopButton(self) + stop_button.props.accelerator = _('<Ctrl>Q') + toolbar_box.toolbar.insert(stop_button, -1) + stop_button.show() + + self.set_toolbar_box(toolbar_box) + toolbar_box.show() + + self.canvas = gtk.HBox(False) + self.set_canvas(self.canvas) + + self.canvas.show() + self.show_all() + self.mode = 0 + self.review_mode() + + + # Places Activity into Review Mode, to review flashcards + def review_mode(self): + + self.remove_all() + + self.button_box = gtk.VButtonBox() + + self.reviewpanel = reviewselection.ReviewSelection( + self.get_activity_root()) + + self.canvas.pack_start(self.reviewpanel, True, True) + + self.reviewpanel.show() + + # Select what to review + self._selectbutton = ToolButton(tooltip=_('Select')) + self._selectbutton.connect('clicked', self._select_button_cb) + self._selectbutton.set_icon_widget( + self.make_label('next', ' ' + _('Select'))) + self.button_box.pack_start(self._selectbutton) + self.canvas.pack_start(self.button_box, False) + self._selectbutton.show() + self.button_box.show() + + self.mode = _REVIEW_MODE + + # Places Activity into Create Mode, parameters are for editing, + # otherwise, empty is passes into the method to create a new flashcard + def create_mode(self, front, back, catagory, editing): + + self.remove_all() + + self.creationpanel = creationpanel.CreationPanel( + self.get_activity_root(), front, back, catagory, editing) + + self.canvas.pack_start(self.creationpanel, True, True) + + self.creationpanel.show() + self.canvas.show() + self.mode = _CREATE_MODE + + # Places Activity into Browse/Edit Mode, browse through flashcards + def browse_edit_mode(self): + self.remove_all() + + self.button_box = gtk.VButtonBox() + + self.browseeditpanel = browseeditpanel.BrowseEditPanel( + self.get_activity_root()) + + self.canvas.pack_start(self.browseeditpanel, True, True) + self.browseeditpanel.show() + + # Allows the current flashcard being viewed to be edited + self._editbutton = ToolButton(tooltip=_('Edit Card')) + self._editbutton.connect('clicked', self._edit_button_cb) + self._editbutton.set_icon_widget( + self.make_label('toolbar-edit', ' ' + _('Edit Card'))) + self.button_box.pack_start(self._editbutton) + self.canvas.pack_start(self.button_box, False) + self._editbutton.show() + self.button_box.show() + + self.mode = _BROWSE_MODE + + + + + # Removes current screen from the canvas + def remove_all(self): + if self.mode == _REVIEW_MODE: + self.canvas.remove(self.reviewpanel) + self.canvas.remove(self.button_box) + elif self.mode == _CREATE_MODE: + self.canvas.remove(self.creationpanel) + elif self.mode == _BROWSE_MODE: + self.canvas.remove(self.browseeditpanel) + self.canvas.remove(self.button_box) + + # Review button callback + def _review_cb(self, button): + _logger.error("Clicked the review button.") + if self.mode != _REVIEW_MODE: + self.review_mode() + else: + self.canvas.remove(self.reviewpanel) + self.canvas.remove(self.button_box) + self.review_mode() + + # Create button callback + def _create_cb(self, button): + _logger.error("Clicked the create button.") + if self.mode != _CREATE_MODE: + self.create_mode(_EMPTY, _EMPTY, _EMPTY, False) + + # Browse/Edit button callback + def _browse_edit_cb(self, button): + _logger.error("Clicked the browse/edit button. ") + if self.mode != _BROWSE_MODE: + self.browse_edit_mode() + + # Edit button callback, passes flashcard information to create panel + # so that it can be edited + def _edit_button_cb(self, button): + + editing_card_text = self.browseeditpanel.get_card_text() + self.create_mode(editing_card_text[0], editing_card_text[1], editing_card_text[2], True) + + # Select button callback, passes the selected category and box to the + # review panel + def _select_button_cb(self, button): + selected_box = self.reviewpanel.get_selected_box() + selected_catagory = self.reviewpanel.get_selected_catagory() + expired_only = self.reviewpanel.get_expired_only() + self.canvas.remove(self.reviewpanel) + self.canvas.remove(self.button_box) + self.reviewpanel = reviewpanel.ReviewPanel(selected_box, selected_catagory, expired_only) + self.canvas.pack_start(self.reviewpanel, True, True) + self.reviewpanel.show() + + + # Writes to logger + def write_file(self, file_path): + """ Write the bead positions to the Journal """ + _logger.debug("Saving current abacus to Journal: %s " % ("test")) + + + # Gets icons for button and makes the label + # Written by Simon Schampijer + def make_label(self, icon_name, label): + label_box = gtk.HBox() + icon = Icon( + icon_name=icon_name, + icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR) + label_box.pack_start(icon, False) + label = gtk.Label(label) + label.modify_fg(gtk.STATE_NORMAL, + style.COLOR_TOOLBAR_GREY.get_gdk_color()) + label_box.pack_start(label) + label_box.show_all() + return label_box + |