From 57c2df2c5617d8f6c65e66ad2980cda681181011 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Tue, 14 Jul 2009 09:33:52 +0000 Subject: Initial implementation of Speak features --- (limited to 'model.py') diff --git a/model.py b/model.py index 8f7defd..fd05b29 100644 --- a/model.py +++ b/model.py @@ -23,35 +23,35 @@ import random import gobject import zipfile import tempfile + from sugar import profile from sugar.datastore import datastore +from sugar.activity.activity import get_bundle_path, get_activity_root _logger = logging.getLogger('model') -class Pair(gobject.GObject): +class Pair(gobject.GObject): __gproperties__ = { - 'aimg' : (str, None, None, None, gobject.PARAM_READWRITE), - 'asnd' : (str, None, None, None, gobject.PARAM_READWRITE), - 'achar': (str, None, None, None, gobject.PARAM_READWRITE), - 'bimg' : (str, None, None, None, gobject.PARAM_READWRITE), - 'bsnd' : (str, None, None, None, gobject.PARAM_READWRITE), - 'bchar': (str, None, None, None, gobject.PARAM_READWRITE), - 'aspeak': (int, 'Base', 'Base', 0, 1, 0, \ - gobject.PARAM_READWRITE), - 'bspeak': (int, 'Base', 'Base', 0, 1, 0, \ - gobject.PARAM_READWRITE), + 'aimg' : (str, None, None, None, gobject.PARAM_READWRITE), + 'asnd' : (str, None, None, None, gobject.PARAM_READWRITE), + 'achar': (str, None, None, None, gobject.PARAM_READWRITE), + 'bimg' : (str, None, None, None, gobject.PARAM_READWRITE), + 'bsnd' : (str, None, None, None, gobject.PARAM_READWRITE), + 'bchar': (str, None, None, None, gobject.PARAM_READWRITE), + 'aspeak': (str, None, None, None, gobject.PARAM_READWRITE), + 'bspeak': (str, None, None, None, gobject.PARAM_READWRITE), 'color' : (gobject.TYPE_INT, 'Base', 'Base', 0, 10, 0, \ gobject.PARAM_READWRITE) } - + def __init__(self): - gobject.GObject.__init__(self) + gobject.GObject.__init__(self) self._properties = {'aimg':None, 'asnd':None, 'achar':None, 'bimg':None, 'bsnd':None, 'bchar':None, 'color':100, - 'aspeak':False, 'bspeak':False} - + 'aspeak':None, 'bspeak':None} + def do_get_property(self, pspec): - """Retrieve a particular property from our property dictionary + """Retrieve a particular property from our property dictionary """ if pspec.name == "aimg": return self._properties["aimg"] @@ -88,39 +88,39 @@ class Pair(gobject.GObject): elif name == "color": self._properties["color"] = value elif name == "aspeak": - self._properties["aspeak"] = int(value) + self._properties["aspeak"] = value elif name == "bspeak": - self._properties["bspeak"] = int(value) + self._properties["bspeak"] = value class Model(object): ''' The model of the activity. Contains methods to read and write the configuration for a game from xml. Stores the pairs and grid - information. + information. ''' - - def __init__(self, game_path, dtd_path = None): + + def __init__(self, game_path=None): self.data = {} - if dtd_path == None: - self.dtd_path = dirname(__file__) - else: - self.dtd_path = dtd_path - + + if game_path is None: + game_path = get_activity_root() + if isdir(game_path): self.game_path = game_path else: - _logger.error('Game_path not found ' +str(e)) + _logger.error('Game_path not found in %s' % game_path) return - + self.data['face'] = '' self.data['align'] = '1' - + try: - self.dtd = libxml2.parseDTD(None, join(self.dtd_path, 'memorize.dtd')) + self.dtd = libxml2.parseDTD(None, join(get_bundle_path(), + 'memorize.dtd')) except libxml2.parserError, e: _logger.error('Init: no memorize.dtd found ' +str(e)) self.dtd = None - self.ctxt = libxml2.newValidCtxt() + self.ctxt = libxml2.newValidCtxt() self.pairs = {} self.grid = [] @@ -259,10 +259,12 @@ class Model(object): elem.setProp("bsnd", self.pairs[key].props.bsnd) if self.pairs[key].props.bchar != None: elem.setProp("bchar", self.pairs[key].props.bchar) - elem.setProp("aspeak", str(self.pairs[key].props.aspeak)) - elem.setProp("bspeak", str(self.pairs[key].props.bspeak)) + if self.pairs[key].props.aspeak != None: + elem.setProp("aspeak", self.pairs[key].props.aspeak) + if self.pairs[key].props.bspeak != None: + elem.setProp("bspeak", self.pairs[key].props.bspeak) # elem.setProp("color", str(self.pairs[key].props.color)) - + if doc.validateDtd(self.ctxt, self.dtd): doc.saveFormatFile(join(self.game_path, 'game.xml'), 1) else: @@ -302,11 +304,10 @@ class Model(object): elem['snd'] = self.pairs[key].props.asnd if self.pairs[key].props.achar != None: elem['char'] = self.pairs[key].props.achar - if self.pairs[key].props.aspeak != None: - elem['speak'] = int(self.pairs[key].props.aspeak) + elem['speak'] = self.pairs[key].props.aspeak temp1.append(elem) - + elem = {} elem['pairkey'] = key elem['state'] = '0' @@ -318,8 +319,8 @@ class Model(object): if self.pairs[key].props.bchar != None: elem['char'] = self.pairs[key].props.bchar if self.pairs[key].props.bspeak != None: - elem['speak'] = int(self.pairs[key].props.bspeak) - temp2.append(elem) + elem['speak'] = self.pairs[key].props.bspeak + temp2.append(elem) i+=1 else: break -- cgit v0.9.1