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