diff options
Diffstat (limited to 'selectdeckpanel.py')
-rw-r--r-- | selectdeckpanel.py | 140 |
1 files changed, 140 insertions, 0 deletions
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) |