# -*- 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 import selectdeckpanel _REVIEW_MODE = 1 _CREATE_MODE = 2 _BROWSE_MODE = 3 _SELECT_DECK_MODE = 4 _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 = True separator.set_expand(False) separator.show() toolbar_box.toolbar.insert(separator, -1) # Select Deck Button self.select_deck_button = ToolButton( "fileopen" ) self.select_deck_button.set_tooltip(_('Select Deck')) self.select_deck_button.props.sensitive = True self.select_deck_button.connect('clicked', self._select_deck_cb) toolbar_box.toolbar.insert(self.select_deck_button, -1) self.select_deck_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 = _('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.deckfile = "emptydeck.xml" self.canvas.show() self.show_all() self.mode = 0 self.select_deck_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.deckfile) 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.deckfile, 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.deckfile) 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 # Places Activity into Select Deck Mode, select deck to work with def select_deck_mode(self): self.remove_all() self.selectdeckpanel = selectdeckpanel.SelectDeckPanel() self.canvas.pack_start(self.selectdeckpanel, True, True) self.selectdeckpanel.show() # Loads the deck to be worked with self.button_box = gtk.VButtonBox() self.load_deck_button = ToolButton(tooltip = _('Select Deck')) self.load_deck_button.connect('clicked', self._load_deck_cb) self.load_deck_button.set_icon_widget( self.make_label('fileopen', ' ' + _('Select Deck'))) self.button_box.pack_start(self.load_deck_button) self.canvas.pack_start(self.button_box, False) self.load_deck_button.show() self.button_box.show() self.mode = _SELECT_DECK_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) elif self.mode == _SELECT_DECK_MODE: self.canvas.remove(self.selectdeckpanel) 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() # Select Deck button callback def _select_deck_cb(self, button): if self.mode != _SELECT_DECK_MODE: self.select_deck_mode() # Load Deck button callback def _load_deck_cb(self, button): self.deckfile = self.selectdeckpanel.get_deckfile() self.review_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(self.deckfile, 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