From 3c7f41a95fc9ef0a5dcfdf1f6915cfcf284b0cf0 Mon Sep 17 00:00:00 2001 From: Kirk Winans Date: Wed, 04 Aug 2010 16:42:05 +0000 Subject: Second Push --- diff --git a/FlashcardActivity.py b/FlashcardActivity.py index a78ef87..a3d0a5e 100644 --- a/FlashcardActivity.py +++ b/FlashcardActivity.py @@ -41,10 +41,12 @@ import creationpanel import browseeditpanel import reviewselection import reviewpanel +import selectdeckpanel _REVIEW_MODE = 1 _CREATE_MODE = 2 _BROWSE_MODE = 3 +_SELECT_DECK_MODE = 4 _EMPTY = "" @@ -111,11 +113,25 @@ class FlashcardActivity(activity.Activity): 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) @@ -127,19 +143,21 @@ class FlashcardActivity(activity.Activity): 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.review_mode() + self.select_deck_mode() - + # Places Activity into Review Mode, to review flashcards def review_mode(self): @@ -148,7 +166,7 @@ class FlashcardActivity(activity.Activity): self.button_box = gtk.VButtonBox() self.reviewpanel = reviewselection.ReviewSelection( - self.get_activity_root()) + self.deckfile) self.canvas.pack_start(self.reviewpanel, True, True) @@ -173,7 +191,7 @@ class FlashcardActivity(activity.Activity): self.remove_all() self.creationpanel = creationpanel.CreationPanel( - self.get_activity_root(), front, back, catagory, editing) + self.deckfile, front, back, catagory, editing) self.canvas.pack_start(self.creationpanel, True, True) @@ -188,7 +206,7 @@ class FlashcardActivity(activity.Activity): self.button_box = gtk.VButtonBox() self.browseeditpanel = browseeditpanel.BrowseEditPanel( - self.get_activity_root()) + self.deckfile) self.canvas.pack_start(self.browseeditpanel, True, True) self.browseeditpanel.show() @@ -206,6 +224,27 @@ class FlashcardActivity(activity.Activity): 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 @@ -218,6 +257,10 @@ class FlashcardActivity(activity.Activity): 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): @@ -241,6 +284,21 @@ class FlashcardActivity(activity.Activity): 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): @@ -256,7 +314,7 @@ class FlashcardActivity(activity.Activity): 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.reviewpanel = reviewpanel.ReviewPanel(self.deckfile, selected_box, selected_catagory, expired_only) self.canvas.pack_start(self.reviewpanel, True, True) self.reviewpanel.show() diff --git a/FlashcardActivity.pyc b/FlashcardActivity.pyc new file mode 100644 index 0000000..3871ad9 --- /dev/null +++ b/FlashcardActivity.pyc Binary files differ diff --git a/Select Test Deck.xml b/Select Test Deck.xml new file mode 100644 index 0000000..afe3b89 --- /dev/null +++ b/Select Test Deck.xml @@ -0,0 +1 @@ +FirstCard1280934537.991newSecondCard1280934542.461new \ No newline at end of file diff --git a/Test Deck.xml b/Test Deck.xml new file mode 100644 index 0000000..4777419 --- /dev/null +++ b/Test Deck.xml @@ -0,0 +1,51 @@ + Test Deck + + date + work + 1280767905.54 + 0 + thanks + + + Edit + works + 1280767937.74 + 0 + thanks + + + Clearing + Text Boxes + 1280767944.82 + 0 + Works + + + Clear + Entry + 1280767951.73 + 0 + test + + + front + back + 1280253050.31 + 3 + catagory + + + time + stamp + 1280846528.77 + 0 + works + + + timestap + becomes date + 1280767959.74 + 0 + because + +newcard1280845759.250workslast reviewedminus 1 day1280846719.280reviewedmore cardsto review1280846821.051moreanother cardto review1280846828.611moreI liketurtles1280846833.411more diff --git a/browseeditpanel.py b/browseeditpanel.py index 71e9871..3a8d324 100644 --- a/browseeditpanel.py +++ b/browseeditpanel.py @@ -40,14 +40,12 @@ import FlashcardActivity # class BrowseEditPanel(gtk.VBox): - def __init__(self, activity_root): + def __init__(self, deckfile): gtk.VBox.__init__(self) - self.activity_root = activity_root - # Loading in tree of cards - self.testfile = "testfile.xml" - self.tree = xml.etree.ElementTree.parse(self.testfile) + self.deckfile = deckfile + self.tree = xml.etree.ElementTree.parse(self.deckfile) self.deck_element = self.tree.getroot() self.deck = self.deck_element.findall("card") diff --git a/browseeditpanel.pyc b/browseeditpanel.pyc new file mode 100644 index 0000000..2414e44 --- /dev/null +++ b/browseeditpanel.pyc Binary files differ diff --git a/creationpanel.py b/creationpanel.py index 542569d..74e3732 100644 --- a/creationpanel.py +++ b/creationpanel.py @@ -37,16 +37,16 @@ from datetime import date import time _logger = logging.getLogger("test-activity") +_DAY = 60 * 60 * 24 + # # Creation Panel for Flashcard Activity # class CreationPanel(gtk.VBox): - def __init__(self, activity_root, front_text, back_text, catagory_text, editing): + def __init__(self, deckfile, front_text, back_text, catagory_text, editing): gtk.VBox.__init__(self) - self.activity_root = activity_root - self.main_box = gtk.VBox() self.side_entries_box = gtk.VBox() self.catagory_box = gtk.HBox() @@ -72,6 +72,7 @@ class CreationPanel(gtk.VBox): self.catagory_box.pack_start(self.catagory_entry, True, True) self.main_box.pack_start(self.catagory_box, True, True) + self.add(self.main_box) @@ -118,13 +119,11 @@ class CreationPanel(gtk.VBox): self.pack_start(self.button_bar, False, False) self.button_bar.show() + self.deckfile = deckfile - self.testfile = "testfile.xml" - + self.decktree = xml.etree.ElementTree.parse(self.deckfile) - self.tree = xml.etree.ElementTree.parse(self.testfile) - - self.deck = self.tree.getroot() + self.deck = self.decktree.getroot() self.front_text = front_text @@ -132,6 +131,7 @@ class CreationPanel(gtk.VBox): def _save_card_cb(self, button): if (self.card_complete()): self._save_card() + self.clear_entry_text() # Returns if the card is complete with a front, back, and category def card_complete(self): @@ -169,7 +169,7 @@ class CreationPanel(gtk.VBox): n_c_back.text = self.side_2_entry.get_text() - n_c_last.text = str(time.time()) + n_c_last.text = str(time.time()-_DAY) n_c_stage.text = "0" @@ -186,12 +186,40 @@ class CreationPanel(gtk.VBox): new_card.append(n_c_catagory) + + self.deck.append(new_card) + self.decktree.write(self.deckfile) + + + # # Returns the appropriate deck based on the subject + # def get_deck(self, subject_string): + # subject_filename = subject_string + ".xml" + # for deck in self.decklist: + # if deck.text == subject_string: + # return subject_filename + + + # self.add_to_deck_list(subject_string) + # self.create_xml_file(subject_filename) + # return subject_filename + + # # Adds new deck to the deck list xml file + # def add_to_deck_list(self, deckname): + # new_deck = xml.etree.ElementTree.Element("deck") + # new_deck.text = deckname + # self.decklist.append(new_deck) + # self.decktree.write(self.decklistfile) + + + # # Creates a new xml file with the name of the new subject + # def create_xml_file(self, filename): + # new_deck = xml.etree.ElementTree.Element("deck") + # new_tree = xml.etree.ElementTree.ElementTree(new_deck) + # new_tree.write(filename) - self.tree.write(self.testfile) - return file_dsobject # Saves changes to the edited card, and writes the change to the xml file def _save_changes(self): diff --git a/creationpanel.pyc b/creationpanel.pyc new file mode 100644 index 0000000..1acef3f --- /dev/null +++ b/creationpanel.pyc Binary files differ diff --git a/decks.dtd b/decks.dtd new file mode 100644 index 0000000..db2f02d --- /dev/null +++ b/decks.dtd @@ -0,0 +1,7 @@ + + + + + + + diff --git a/decks.xml b/decks.xml new file mode 100644 index 0000000..dca79da --- /dev/null +++ b/decks.xml @@ -0,0 +1,3 @@ + + Test Deck +new test deckSelect Test Deck diff --git a/decks.xml~ b/decks.xml~ new file mode 100644 index 0000000..e2a821a --- /dev/null +++ b/decks.xml~ @@ -0,0 +1,3 @@ + + Test Deck +new test deckSelect Test Deck \ No newline at end of file diff --git a/new test deck.xml b/new test deck.xml new file mode 100644 index 0000000..b2b38f6 --- /dev/null +++ b/new test deck.xml @@ -0,0 +1 @@ +maybe firstcard1280768303.540forsecondcard1280768358.260for \ No newline at end of file diff --git a/port/__init__.pyc b/port/__init__.pyc new file mode 100644 index 0000000..13be69c --- /dev/null +++ b/port/__init__.pyc Binary files differ diff --git a/port/widgets.pyc b/port/widgets.pyc new file mode 100644 index 0000000..94a2a2b --- /dev/null +++ b/port/widgets.pyc Binary files differ diff --git a/reviewpanel.py b/reviewpanel.py index a65c855..4fa4649 100644 --- a/reviewpanel.py +++ b/reviewpanel.py @@ -41,12 +41,14 @@ _1_WEEK = _1_DAY * 7 _2_WEEKS = _1_WEEK * 2 _1_MONTH = _2_WEEKS * 2 +_REVIEWED = False + # # Review Panel for the Flashcard Activity # class ReviewPanel(gtk.VBox): - def __init__(self, box, catagory, expired_only): + def __init__(self, deckfile, box, catagory, expired_only): gtk.VBox.__init__(self) self.catagory = catagory @@ -85,6 +87,11 @@ class ReviewPanel(gtk.VBox): _checkbutton.set_icon_widget( self.make_label('next', ' ' + _('Check Answer!'))) + _nextcard = ToolButton(tooltip=_('Next Card')) + _nextcard.connect('clicked', self._next_card_cb) + _nextcard.set_icon_widget( + self.make_label('next', ' ' + _('Next Card'))) + self.view_box.pack_start(self.frontlabel) self.view_box.pack_start(self.viewcard) @@ -92,6 +99,7 @@ class ReviewPanel(gtk.VBox): self.entry_box.pack_start(self.answer_entry) self.button_box.pack_start(_checkbutton) + self.button_box.pack_start(_nextcard) self.answer_box.pack_start(self.answerlabel) self.answer_box.pack_start(self.correct) @@ -112,6 +120,7 @@ class ReviewPanel(gtk.VBox): self.correct.show() _checkbutton.show() + _nextcard.show() self.view_box.show() self.entry_box.show() @@ -120,9 +129,9 @@ class ReviewPanel(gtk.VBox): self.current_date = time.time() - self.testfile = "testfile.xml" + self.deckfile = deckfile - self.tree = xml.etree.ElementTree.parse(self.testfile) + self.tree = xml.etree.ElementTree.parse(self.deckfile) self.deck = self.get_selected_deck() @@ -130,6 +139,8 @@ class ReviewPanel(gtk.VBox): self.card = self.next_card() + self.card_reviewed = False + self.textbuffer.set_text(self.card.find("front").text) # Returns the box number of the selected box @@ -153,9 +164,16 @@ class ReviewPanel(gtk.VBox): # Check answer callback def _check_answer_cb(self, button): self.correcttextbuffer.set_text(self.check_answer()) - self.answer_entry.set_text("") - self.card = self.next_card() - self.textbuffer.set_text(self.card.find("front").text) + self.card_reviewed = True + + + def _next_card_cb(self, button): + if self.card_reviewed: + self.answer_entry.set_text("") + self.card = self.next_card() + self.textbuffer.set_text(self.card.find("front").text) + self.correcttextbuffer.set_text("") + self.card_reviewed = False # Checks the answer submitted, returns "Correct" or the back of the card @@ -290,7 +308,7 @@ class ReviewPanel(gtk.VBox): self.card.find("last_reviewed").text = str(time.time()) self.card.find("stage").text = str(stage) - self.tree.write(self.testfile) + self.tree.write(self.deckfile) # Gets the icon for the button and makes the label # Written by Simon Schampijer diff --git a/reviewpanel.pyc b/reviewpanel.pyc new file mode 100644 index 0000000..c888468 --- /dev/null +++ b/reviewpanel.pyc Binary files differ diff --git a/reviewselection.py b/reviewselection.py index b3c2307..c0c0ff2 100644 --- a/reviewselection.py +++ b/reviewselection.py @@ -43,11 +43,9 @@ from gettext import gettext as _ # class ReviewSelection(gtk.VBox): - def __init__(self, activity_root): + def __init__(self, deckfile): gtk.VBox.__init__(self) - self.activity_root = activity_root - self.box_selection_box = gtk.HBox() self.catagory_selection_box = gtk.HBox() @@ -68,7 +66,7 @@ class ReviewSelection(gtk.VBox): self.expired.set_active(True) - self.cardfile = "testfile.xml" + self.cardfile = deckfile self.tree = xml.etree.ElementTree.parse(self.cardfile) diff --git a/reviewselection.pyc b/reviewselection.pyc new file mode 100644 index 0000000..18afb0e --- /dev/null +++ b/reviewselection.pyc Binary files differ diff --git a/selectdeckpanel.py b/selectdeckpanel.py new file mode 100644 index 0000000..f2655ac --- /dev/null +++ b/selectdeckpanel.py @@ -0,0 +1,140 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2010, Kirk Winans +# Code originally based on Simon Schampijer's code for the Memorize +# 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 gtk +from os import environ +from os.path import join, basename +import hippo + +import shutil +import tempfile +from gettext import gettext as _ +import logging +from gobject import SIGNAL_RUN_FIRST, TYPE_PYOBJECT +from sugar.graphics import style +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.icon import Icon +from sugar.graphics.palette import Palette +from port.widgets import ToggleToolButton +from port.widgets import CanvasRoundBox, ToolComboBox +#from port import chooser + +from sugar.datastore import datastore +import xml.etree.ElementTree + +# +# Select Deck Panel for Flashcard Activity +# +class SelectDeckPanel(gtk.VBox): + + def __init__(self): + + gtk.VBox.__init__(self) + + self.available_decks_box = gtk.HBox() + self.new_deck_box = gtk.HBox() + + self.available_decks_label = gtk.Label(_('Deck:')) + self.available_decks = gtk.ComboBoxEntry() + self.available_decks = gtk.combo_box_new_text() + + self.new_deck_label = gtk.Label(_('New Deck Name:')) + self.new_deck = gtk.Entry() + + + self.decklistfile = "decks.xml" + self.decktree = xml.etree.ElementTree.parse(self.decklistfile) + self.decklist = self.decktree.getroot() + decks = self.get_decks() + + for text in decks: + self.available_decks.append_text(text) + + + self.available_decks.set_active(0) + + self.available_decks_box.pack_start(self.available_decks_label) + self.available_decks_box.pack_start(self.available_decks) + self.add(self.available_decks_box) + + self.new_deck_box.pack_start(self.new_deck_label) + self.new_deck_box.pack_start(self.new_deck) + self.add(self.new_deck_box) + + + self.available_decks_label.show() + self.available_decks.show() + self.available_decks_box.show() + + self.new_deck_label.show() + self.new_deck.show() + self.new_deck_box.show() + + + + + + # Returns list of decks + def get_decks(self): + + decks = ['NEW DECK'] + + for deck in self.decklist: + decks = decks + [deck.text] + + decks = sorted(decks) + + for idx in range(len(decks)): + if decks[idx] == 'NEW DECK': + decks[idx] = decks[0] + decks[0] = 'NEW DECK' + + return decks + + + # Returns the selected deck file name + def get_deckfile(self): + deck_name = self.available_decks.get_active_text() + + if deck_name == 'NEW DECK': + deckfile = self.gen_new_deck(self.new_deck.get_text()) + + else: + deckfile = deck_name + '.xml' + + + return deckfile + + # Generates a new deck file and returns the name + def gen_new_deck(self, new_deck_name): + deckfilename = new_deck_name + '.xml' + self.add_to_deck_list(new_deck_name) + self.create_xml_file(deckfilename) + + return deckfilename + + # Adds new deck to the deck list xml file + def add_to_deck_list(self, deckname): + new_deck = xml.etree.ElementTree.Element("deck") + new_deck.text = deckname + self.decklist.append(new_deck) + self.decktree.write(self.decklistfile) + + + # Creates a new xml file with the name of the new subject + def create_xml_file(self, filename): + new_deck = xml.etree.ElementTree.Element("deck") + new_tree = xml.etree.ElementTree.ElementTree(new_deck) + new_tree.write(filename) diff --git a/selectdeckpanel.pyc b/selectdeckpanel.pyc new file mode 100644 index 0000000..c2c6f8b --- /dev/null +++ b/selectdeckpanel.pyc Binary files differ diff --git a/selectdeckpanel.py~ b/selectdeckpanel.py~ new file mode 100644 index 0000000..05f5285 --- /dev/null +++ b/selectdeckpanel.py~ @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2010, Kirk Winans +# Code originally based on Simon Schampijer's code for the Memorize +# 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 gtk +from os import environ +from os.path import join, basename +import hippo + +import shutil +import tempfile +from gettext import gettext as _ +import logging +from gobject import SIGNAL_RUN_FIRST, TYPE_PYOBJECT +from sugar.graphics import style +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.icon import Icon +from sugar.graphics.palette import Palette +from port.widgets import ToggleToolButton +from port.widgets import CanvasRoundBox, ToolComboBox +#from port import chooser + +from sugar.datastore import datastore +import xml.etree.ElementTree + +# +# Select Deck Panel for Flashcard Activity +# +class SelectDeckPanel(gtk.VBox): + + def __init__(self) + + gtk.VBox.__init__(self) + + available_decks_box = gtk.HBox() + new_deck_box = gtk.HBox() + + self.available_decks_label = gtk.Label(_('Deck:')) + self.available_decks = gtk.ComboBoxEntry() + + self.new_deck_label = gtk.Label(_('New Deck Name:')) + self.new_deck = gtk.Entry() + + + self.available_decks_box.pack_start(self.available_decks_label) + self.available_decks_box.pack_start(self.available_decks) + self.pack_start(available_decks_box) + + self.new_deck_box(self.new_deck_label) + self.new_deck_box(self.new_deck) + self.pack_start(new_deck_box) + + + self.available_decks_label.show() + self.available_decks.show() + self.available_decks_box.show() + + self.new_deck_label.show() + self.new_deck.show() + self.new_deck_box.show() diff --git a/testfile.xml b/testfile.xml deleted file mode 100644 index 1b2f3d3..0000000 --- a/testfile.xml +++ /dev/null @@ -1,51 +0,0 @@ - Test Deck - - date - work - 1280767905.54 - 0 - thanks - - - Edit - works - 1280767937.74 - 0 - thanks - - - Clearing - Text Boxes - 1280767944.82 - 0 - Works - - - Clear - Entry - 1280767951.73 - 0 - test - - - front - back - 1280253050.31 - 3 - catagory - - - time - stamp - 1279823320.53 - 2 - works - - - timestap - becomes date - 1280767959.74 - 0 - why? - - \ No newline at end of file -- cgit v0.9.1