# -*- 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)