Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/FlashcardActivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'FlashcardActivity.py')
-rw-r--r--FlashcardActivity.py284
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
+