diff options
author | Rodrigo Perez <rodripf@gmail.com> | 2013-03-20 14:00:24 (GMT) |
---|---|---|
committer | Rodrigo Perez <rodripf@gmail.com> | 2013-03-20 14:00:24 (GMT) |
commit | 347a984231a15c5bff7e42652686f1c42cd13b7a (patch) | |
tree | 58d6781157d57d5411431999e293c37064c2880a |
First commit
73 files changed, 3653 insertions, 0 deletions
diff --git a/MANIFEST b/MANIFEST new file mode 100644 index 0000000..0855d41 --- /dev/null +++ b/MANIFEST @@ -0,0 +1,194 @@ +setup.py + + +TInterpreter.py +TInterpreterBoard.py +TInterpreterProject.py + + +activity/activity.info +components/TInterpreterAcumulatedCell.py +components/TInterpreterCell.py +components/TInterpreterCommonCell.py +components/TInterpreterCommonControl.py +components/TInterpreterConstants.py +components/TInterpreterControlCell.py +components/TInterpreterTextArea.py +components/__init__.py +components/rules/__init__.py + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +speak/espeak_cmd.py + + + +speak/voice.py +speak/__init__.py +threads/TInterpreterPlaySound.py +threads/__init__.py +util/ControlFactory.py + +util/OpenNewProject.py + +util/__init__.py + + + + + + + +util/ChooseProject.py +po/TicoTico.pot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +icons/open.svg +util/About.py +activity/Activity-TicoTico.svg + + + + + + +proyectos/.empty +generar.sh +util/Singleton.py + +icons/barrido.svg +proyectos/Muestra/project.xml +proyectos/Muestra/image/2314.png +proyectos/Muestra/image/2304_1.png +proyectos/Muestra/image/2374.png +proyectos/Muestra/image/2586.png +proyectos/Muestra/image/6632_1.png +proyectos/Muestra/image/2487.png +proyectos/Muestra/image/24795.png +proyectos/Muestra/image/2430.png +proyectos/Muestra/image/controller-home.png +proyectos/Muestra/image/2401.png +proyectos/Muestra/image/2300.png +proyectos/Muestra/image/2245.png +proyectos/Muestra/image/4962.png +proyectos/Muestra/image/2349.png +proyectos/Muestra/image/6522.png +proyectos/Muestra/image/2606.png +proyectos/Muestra/image/2587.png +proyectos/Muestra/image/5957_1.png +proyectos/Muestra/image/2370.png +proyectos/Muestra/image/25191.png +proyectos/Muestra/image/2684.png +proyectos/Muestra/image/5441.png +proyectos/Muestra/image/3250.png +proyectos/Muestra/image/6625_1.png +proyectos/Muestra/image/teleton.png +proyectos/Muestra/image/2367.png +proyectos/Muestra/image/6537.png +proyectos/Muestra/image/8662.png +proyectos/Muestra/image/7061.png +proyectos/Muestra/image/controller-home_1.png +proyectos/Muestra/image/24735.png +speak/GoogleTTS.py +speak/new_main.py + + + + + + + + + + + + + + + + + +Tixo.py + +po/TIXO.pot diff --git a/Readme.txt b/Readme.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Readme.txt diff --git a/TInterpreter.py b/TInterpreter.py new file mode 100644 index 0000000..aef5706 --- /dev/null +++ b/TInterpreter.py @@ -0,0 +1,113 @@ +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +__author__ = "Rodrigo" +__date__ = "$20-sep-2012 12:16:32$" + +from TInterpreterProject import TInterpreterProject +from util.OpenNewProject import OpenNewProject +from util.ChooseProject import ChooseProject +import pygtk +pygtk.require('2.0') +import gtk +import os +import sys + +class TInterpreter: + PROYECTOS = "proyectos" + + def __init__(self): + self.project = TInterpreterProject() + + def load(self, xml): + self.project.XMLDecode(xml) + self.project.setCurrentBoard(self.project.getInitialBoard()) + self.project.show_all() + + + def getContenedor(self): + return self.project + + def exit(self, widget, data=None): + gtk.main_quit() + sys.exit + + def barrido(self, otro=None): + self.project.barrido() + + def cambiarVelocidad(self, value): + self.project.cambiarVelocidad(value) + + + +#PARA EL FUNCIONAMIENTO FUERA DE SUGAR + def mainPropio(self): + #self.project.XMLDecode("proyectos/Muestra/project.xml") + #self.project.setCurrentBoard(self.project.getInitialBoard()) + + self.win = gtk.Window() + w = self.win + w.connect("destroy", self.exit) + + self.container = gtk.VBox(); + + self.toolbar = gtk.Toolbar() + self.toolbar.append_item("Agregar", "Agregar Proyecto", None, None, self.__agregar) + self.toolbar.append_item("Abrir", "Abrir Proyecto", None, None, self.__abrir) + self.toolbar.append_item("Barrido", "Barrido Automatico", None, None, self.barrido) + self.toolbar.show() + self.container.pack_start(self.toolbar) + + self.container.pack_start(self.project) + + w.add(self.container) + + w.show_all() + + + gtk.main() + + def __agregar(self, widget): + dialog = gtk.FileChooserDialog(title="Abrir", action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) + response = dialog.run() + if response == gtk.RESPONSE_OK: + try: + onp = OpenNewProject(dialog.get_filename(), os.path.basename(dialog.get_filename())) + self.load(os.path.join(self.PROYECTOS, onp.getProjectName(), "project.xml"),) + except Exception, e: + print "Exception: ", e + elif response == gtk.RESPONSE_CANCEL: + print 'Closed, no files selected' + + dialog.destroy() + + def __abrir(self, widget): + abr = ChooseProject(self.PROYECTOS) + abr.addOnAbrirListener(self.__abierto) + abr.show() + + def __abierto(self, proyName): + self.load(os.path.join(self.PROYECTOS, proyName, "project.xml"),) + + + +if __name__ == "__main__": + b = TInterpreter() + b.mainPropio() diff --git a/TInterpreterBoard.py b/TInterpreterBoard.py new file mode 100644 index 0000000..876f898 --- /dev/null +++ b/TInterpreterBoard.py @@ -0,0 +1,131 @@ +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +__author__ = "Rodrigo" +__date__ = "$20-sep-2012 10:15:25$" + +from threading import Thread +import gobject +gobject.threads_init() +import time +import pygtk +pygtk.require('2.0') +import gtk + + +class TInterpreterBoard(gtk.EventBox): + def __init__(self): + self.cellList = {} + super(TInterpreterBoard, self).__init__() + self.f = gtk.Fixed() + self.add(self.f) + + self.cellResaltada = None + + self._backgroundColor = None + self.barriendo = False + self.velocidadBarrido = 2.0 + + +#========SETUP FUNCTIONS======================================================== + def setNombre(self, value): + self._nombre = value + + def setOrderedCellList(self, list): + self._orderedCellList = list + + def setOriginalSize(self, value): + self._originalSize = value + + def addCell(self, cell): + self.cellList[cell.getId()] = cell + + def setBackgroundColor(self, color): + self._backgroundColor = color + + +#======GET FUNCTIONS============================================================ + def getNombre(self): + return self._nombre + +#======INITIALIZATION + + def initialize(self): + if self._backgroundColor: + color = self.get_colormap().alloc_color("#" + self._backgroundColor.upper()[2:]) + + self.modify_bg(gtk.STATE_NORMAL, color) + self.modify_bg(gtk.STATE_PRELIGHT, color) + + for cell in self.cellList.itervalues(): + cell.initialize() + cell.set_size_request(cell.getWidth(), cell.getHeight()) + self.f.put(cell, cell.getX(), cell.getY()) + + self.show_all() + + +#======BARRIDO AUTOMATICO======================================================= + def barrer(self): + while self.barriendo: + if self.cellResaltada != None: + gobject.idle_add(self.cellList[self.cellResaltada].desResaltar) + + self.cellResaltada = self._orderedCellList[self.barridoActual] + gobject.idle_add(self.cellList[self.cellResaltada].resaltar) + + if self.barridoActual < len(self._orderedCellList) - 1: + self.barridoActual += 1 + else: + self.barridoActual = 0 + + time.sleep(self.velocidadBarrido) + + def accionarSeleccionado(self, widget, data): + self.cellList[self.cellResaltada].onClick(None) + + + + + def iniciarBarrido(self): + self.barriendo = True + # And bind an action to it + #self.set_events(gtk.gdk.BUTTON_PRESS_MASK) + self._handl_id = self.connect("button_press_event", self.accionarSeleccionado) + self.barridoActual = 0 + #self.t = Timer(2.0, self.barrerSiguiente) + self.t = Thread(target= self.barrer) + + self.t.start() + + def detenerBarrido(self): + self.barriendo = False + self.disconnect(self._handl_id) + + def setVelocidadBarrido(self, value): + self.velocidadBarrido = value + + def getVelocidadBarrido(): + return self.velocidadBarrido + + +if __name__ == "__main__": + print "Hello World" diff --git a/TInterpreterProject.py b/TInterpreterProject.py new file mode 100644 index 0000000..2975504 --- /dev/null +++ b/TInterpreterProject.py @@ -0,0 +1,329 @@ +# -*- coding: utf-8 -*- +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +__author__ = "Rodrigo" +__date__ = "$18-sep-2012 12:35:06$" + +from components.TInterpreterTextArea import TInterpreterTextArea +from components.TInterpreterControlCell import TInterpreterControlCell +from components.TInterpreterAcumulatedCell import TInterpreterAcumulatedCell +from TInterpreterBoard import TInterpreterBoard +from components.TInterpreterCell import TInterpreterCell +import xml.etree.ElementTree as ET + +import pygtk +pygtk.require('2.0') +import gtk +import os + +import string + +class TInterpreterProject(gtk.VBox): + PROYECTOS = "proyectos" + + + def __init__(self): + super(TInterpreterProject, self).__init__() + self.currentBoard = None + self.boardList = {} + self.acumuladas = [] + self.acumuladasContainer = gtk.HBox(False, 0) + self.pack_end(self.acumuladasContainer) + self.show_all() + + self.barriendo = False + self.velActual = 2.0 + + def __getRealPath(self, path): + path = string.replace(path, "\\", os.sep) + path = string.replace(path, "/", os.sep) + + + salida = os.path.join(self.PROYECTOS, self.projectName, path) + return salida + + + + + + def XMLDecode(self, file): + tree = ET.parse(file) + root = tree.getroot() + + self.projectName = root.attrib["name"] + TInterpreterCell.projectName = self.projectName + self.initialBoard = root.find("initial_board").text + + for boardXML in root.findall("board"): + board = TInterpreterBoard() + board.setNombre(boardXML.attrib["name"]) + + model = boardXML.find("model") + + for attrXML in model.find("attributes").findall("attribute"): + key = attrXML.get("key") + + if key == "imageResizeStyle": + pass + elif key == "orderedCellList": + orderedCellList = [] + for cell in attrXML.findall("element"): + orderedCellList.append(cell.text) + board.setOrderedCellList(orderedCellList) + elif key == "size": + width = int(float(attrXML.find("width").text)) + height = int(float(attrXML.find("height").text)) + board.setOriginalSize((width, height)) + elif key == "soundFile": + pass + elif key == "icon": + pass + elif key == "backgroundColor": + board.setBackgroundColor(attrXML.text) + elif key == "gradientColor": + pass + + for compXML in model.findall("component"): + type = compXML.get("type") + + if type == "cell": + cell = TInterpreterCell() + + for attrXML in compXML.find("attributes").findall("attribute"): + key = attrXML.get("key") + + if key == "followingBoard": + cell.setFollowingBoard(attrXML.text, self.setCurrentBoard) + + elif key == "backgroundColor": + cell.setBackgroundColor(attrXML.text) + + elif key == "gradientColor": + pass + + elif key == "bordercolor": + cell.setBorderColor(attrXML.text) + + elif key == "linewidth": + cell.setBorderWidth(int(float(attrXML.text))) + + elif key=="environmentAction": + pass + + elif key=="alternativeBorderColor": + cell.setAlternativeBorderColor(attrXML.text) + + elif key=="alternativeLinewidth": + cell.setAlternativeBorderWidth(attrXML.text) + + elif key=="accumulated": + acumulable = True if attrXML.text == "true" else False + cell.setAcumulable(acumulable, self.acumular) + + elif key=="sendTextTimer": + pass + + elif key=="sendTextTarget": + cell.setSendTextTarget(attrXML.text) + + elif key=="sendText": + cell.setSendText(attrXML.text) + + elif key=="alternativeIcon": + cell.setAlternativeIcon(self.__getRealPath(attrXML.text)) + elif key=="verticalTextPosition": + cell.setVerticalTextPosition(attrXML.text) + + elif key=="soundFile": + cell.setSoundFile(self.__getRealPath(attrXML.text)) + + elif key=="alternativeSoundFile": + cell.setAlternativeSoundFile(self.__getRealPath(attrXML.text)) + + elif key=="voiceName": + pass + elif key=="voiceText": + cell.setVoiceText(attrXML.text) + elif key=="videoFile": + pass + elif key=="videoURL": + pass + + elif type == "controllerCell": + cell = TInterpreterControlCell() + + for attrXML in compXML.find("attributes").findall("attribute"): + key = attrXML.get("key") + + if key=="actionCode": + code = int(attrXML.text) + + if code == TInterpreterControlCell.EXIT_ACTION_CODE: + cell.setActionCode(code) + elif code == TInterpreterControlCell.UNDO_ACTION_CODE: + cell.setActionCode(code, self.desAcumular) + elif code == TInterpreterControlCell.UNDO_ALL_ACTION_CODE: + cell.setActionCode(code, self.desAcumularTodas) + elif code == TInterpreterControlCell.HOME_ACTION_CODE: + cell.setActionCode(code, self.irAInicial) + elif code==TInterpreterControlCell.READ_ACTION_CODE: + cell.setActionCode(code, self.readAcumuladas) + + + elif type == "line": + pass + + elif type == "oval": + pass + + elif type == "rectangle": + pass + + elif type == "textArea": + cell = TInterpreterTextArea() + + for attrXML in compXML.find("attributes").findall("attribute"): + + if key=="horizontalAlignment": + pass + elif key == "verticalAlignment": + pass + elif type == "roundRect": + pass + elif type=="label": + pass + + + #common attributes + if type == "cell" or type == "controllerCell": + for attrXML in compXML.find("attributes").findall("attribute"): + key = attrXML.get("key") + + if key == "font": + cell.setFontFamily(attrXML.find("family").text) + cell.setFontSize(int(attrXML.find("size").text)) + + bold = False if attrXML.find("bold") == None else True + cell.setFontBold(bold) + + italic = False if attrXML.find("italic") == None else True + cell.setFontBold(italic) + + elif key == "id": + cell.setId(attrXML.text) + + elif key=="foregroundColor": + cell.setForegroundColor(attrXML.text) + + elif key == "bounds": + x = int(float(attrXML.find("x").text)) + y = int(float(attrXML.find("y").text)) + width = int(float(attrXML.find("width").text)) + height = int(float(attrXML.find("height").text)) + + cell.setOriginalRect((x, y, width, height)) + + elif key == "text": + cell.setText(attrXML.text) + + elif key=="icon": + cell.setIcon(self.__getRealPath(attrXML.text)) + + + + + #agregar al tablero + if type == "cell" or type == "controllerCell": + board.addCell(cell) + + + + self.boardList[board.getNombre()] = board + + + +#========PROJECT ACTIONS======================================================== + + def setCurrentBoard(self, nombre): + if self.currentBoard != None: + if self.barriendo: + self.currentBoard.detenerBarrido() + self.remove(self.currentBoard) + + board = self.boardList[nombre] + board.initialize() + self.pack_start(board) + self.currentBoard = board + + if self.barriendo: + self.currentBoard.iniciarBarrido() + + + def acumular(self, cell): + acu = TInterpreterAcumulatedCell(cell) + self.acumuladasContainer.pack_start(acu, False, False, 0) + acu.set_size_request(acu.getWidth(), acu.getHeight()) + acu.show_all() + self.acumuladas.append(acu) + + def desAcumular(self): + if len(self.acumuladas) > 0: + self.acumuladasContainer.remove(self.acumuladas.pop()) + + def desAcumularTodas(self): + for acu in self.acumuladas: + self.acumuladasContainer.remove(acu) + self.acumuladas = [] + + def irAInicial(self): + self.setCurrentBoard(self.getInitialBoard()) + + def readAcumuladas(self): + for acu in self.acumuladas: + acu.leer() + + def barrido(self): + if not self.barriendo: + self.cambiarVelocidad(self.velActual) + self.currentBoard.iniciarBarrido() + self.barriendo = True + else: + self.currentBoard.detenerBarrido() + self.barriendo = False + + def cambiarVelocidad(self, value): + self.velActual = value + self.currentBoard.setVelocidadBarrido(value) + + + +#=========GET=================================================================== + + def getInitialBoard(self): + return self.initialBoard + + def getProjectName(self): + return self.projectName + + +if __name__ == "__main__": + x = TInterpreterProject() + x.XMLDecode("proyectos/Muestra/project.xml") @@ -0,0 +1,123 @@ + +# -*- coding: utf-8 -*- +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +__author__ = "rodripf" +__date__ = "$28/09/2012 01:24:15 PM$" + +from TInterpreter import TInterpreter +from util.OpenNewProject import OpenNewProject +from util.ChooseProject import ChooseProject +import util.ControlFactory as ControlFactory + +from sugar.activity import activity + +import os +import pygtk +pygtk.require('2.0') +import gtk +import sugar + +from gettext import gettext as _ + +class Tixo(activity.Activity): + PROYECTOS = "proyectos" + + _NEW_TOOLBAR_SUPPORT = True + try: + from sugar.graphics.toolbarbox import ToolbarBox + from sugar.graphics.toolbarbox import ToolbarButton + from sugar.activity.widgets import StopButton + except: + _NEW_TOOLBAR_SUPPORT = False + + def __init__(self, handle, create_jobject=True): + activity.Activity.__init__(self, handle, False) + + def activityToolbar(toolbar): + ControlFactory.buttonFactory('open', toolbar, self.__abrir, tooltip=_('Abrir')) + ControlFactory.buttonFactory('barrido', toolbar, self.__barrer, tooltip=_('Barrido Automatico')) + ControlFactory.spinFactory(2.0, 0.5, 8.0, self.__cambioVelocidad, toolbar) + + + if self._NEW_TOOLBAR_SUPPORT: #toolbar nuevo + self.toolbar_box = sugar.graphics.toolbarbox.ToolbarBox() + + activityToolbar(self.toolbar_box.toolbar) + + stop_button = sugar.activity.widgets.StopButton(self) + stop_button.props.accelerator = '<Ctrl><Shift>Q' + self.toolbar_box.toolbar.insert(stop_button, -1) + stop_button.show() + + self.set_toolbar_box(self.toolbar_box) + self.toolbar_box.show() + + else: #old toolbar + toolbox = activity.ActivityToolbox(self) + + self.activity_tb = toolbox.get_activity_toolbar() + self.activity_tb.share.props.visible = False + self.activity_tb.keep.props.visible = False + + activityToolbar(self.activity_tb) + + self.activity_tb.show_all() + + self.set_toolbox(toolbox) + toolbox.show() + + self.activity = TInterpreter() + + self.set_canvas(self.activity.getContenedor()) + + def __abrir(self, widget): + abr = ChooseProject(self.PROYECTOS) + abr.addOnAbrirListener(self.__abierto) + abr.show() + + def __barrer(self, widget): + self.activity.barrido() + + def __abierto(self, proyName): + self.activity.load(os.path.join(self.PROYECTOS, proyName, "project.xml"),) + + def __cambioVelocidad(self, widget): + self.activity.cambiarVelocidad(widget.get_value()) + print widget.get_value() + + def close(self, skip_save=False): + activity.Activity.close(self, True) + + + def write_file(self, file_path): + self.metadata["hola"] = "hola" + print "hola" + + + def read_file(self, file_path): + try: + onp = OpenNewProject(file_path, self.metadata['title']) + self.__abierto(onp.getProjectName()) + except Exception, e: + print "Exception: ", e + + diff --git a/activity/Activity-TicoTico.svg b/activity/Activity-TicoTico.svg new file mode 100644 index 0000000..5800b75 --- /dev/null +++ b/activity/Activity-TicoTico.svg @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ + <!ENTITY fill_color "#FFFFFF"> + <!ENTITY stroke_color "#000000"> +]> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="256" + height="256" + id="svg2907" + version="1.1" + inkscape:version="0.48.0 r9654" + sodipodi:docname="tico-interpreter-icon.svg"> + <defs + id="defs2909"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective2915" /> + <inkscape:perspective + id="perspective2892" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="&fill_color;" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4" + inkscape:cx="116.85055" + inkscape:cy="215.44777" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:showpageshadow="false" + inkscape:window-width="1366" + inkscape:window-height="737" + inkscape:window-x="0" + inkscape:window-y="1" + inkscape:window-maximized="1" /> + <metadata + id="metadata2912"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-103.42857,-161.50504)"> + <path + sodipodi:type="arc" + style="fill:&fill_color;;fill-opacity:1;stroke:none" + id="path4157-9" + sodipodi:cx="508.39285" + sodipodi:cy="328.61218" + sodipodi:rx="10.535714" + sodipodi:ry="19.107143" + d="m 518.92857,328.61218 a 10.535714,19.107143 0 1 1 -21.07143,0 10.535714,19.107143 0 1 1 21.07143,0 z" + transform="matrix(1.9661017,0,0,1.0654206,-819.01116,-93.24012)" /> + <path + style="fill:&fill_color;" + d="m 141.98731,191.37394 c -0.81742,0.0409 -1.60969,0.29244 -2.40625,0.71875 -3.3902,1.81438 -5.8658,7.16637 -4.6875,10.1875 1.05374,2.70175 6.49285,8.02054 10.125,9.90625 1.375,0.71386 4.975,2.10923 8,3.09375 6.50691,2.11776 10.53102,2.03095 10.375,-0.21875 -0.0599,-0.86347 -3.33657,-5.94019 -7.28125,-11.28125 -6.61013,-8.95006 -10.58284,-12.5833 -14.125,-12.40625 z m 34,2.8125 c -1.798,0.10531 -3.59751,0.94415 -4.71875,2.65625 -2.22314,3.39467 -2.4343,16.16213 -0.3125,18.71875 1.1241,1.35445 1.60595,1.40732 2.625,0.34375 2.07435,-2.16497 8.4375,-14.80743 8.4375,-16.78125 0,-3.25088 -3.03458,-5.11301 -6.03125,-4.9375 z m 38.0625,96.84375 c -8.95222,-0.0784 -14.92675,4.45663 -16.5625,13.28125 -0.98775,5.32874 0.96755,10.05852 6.125,14.8125 3.69372,3.40475 4.7686,3.93354 5.96875,2.9375 0.83167,-0.69021 1.21004,-2.03813 0.875,-3.09375 -0.79781,-2.51368 1.09107,-2.38608 7.6875,0.5 7.78321,3.40532 10.41473,3.87811 11.84375,2.15625 0.97271,-1.17204 0.77923,-2.14046 -0.96875,-4.96875 -1.19933,-1.94053 -1.73748,-3.53125 -1.21875,-3.53125 0.51872,0 4.69886,1.755 9.3125,3.90625 4.61363,2.15125 10.27947,4.41755 12.59375,5.03125 2.31428,0.61369 4.47074,1.52883 4.78125,2.03125 0.76109,1.23147 6.39575,-2.06136 7.0625,-4.125 0.29228,-0.90463 -0.24523,-3.24279 -1.1875,-5.21875 -1.88794,-3.95906 -1.19063,-5.87812 1.25,-3.4375 0.91334,0.91334 1.75793,3.99213 2.03125,7.4375 0.55794,7.033 -1.09489,10.98885 -4.4375,10.625 -2.72655,-0.29679 -2.79747,1.14003 -0.1875,3.75 2.50243,2.50239 4.07368,2.51183 7.1875,0.0625 4.46057,-3.50869 6.30048,-15.52292 3.4375,-22.375 -2.91835,-6.98461 -7.13627,-8.51791 -11.65625,-4.1875 l -2.625,2.53125 -6.5,-4.28125 c -3.57433,-2.34758 -10.68152,-6.2328 -15.78125,-8.65625 -7.21945,-3.43077 -13.65992,-5.14044 -19.03125,-5.1875 z m 96.59375,13.09375 c -3.0181,0.0661 -5.9397,3.02256 -7.15625,8.5 l -0.6875,3 2.53125,-3 c 2.39715,-2.84205 2.62129,-2.91042 4.28125,-1.28125 1.15623,1.13479 1.88891,3.68577 2.125,7.5 0.42911,6.93266 -1.27101,10.88613 -4.53125,10.53125 -2.72655,-0.29679 -2.79747,1.14003 -0.1875,3.75 2.4262,2.4262 3.8302,2.50766 6.875,0.375 5.19956,-3.64192 6.81942,-16.02453 3.15625,-24.09375 -1.65441,-3.64432 -4.05884,-5.33268 -6.40625,-5.28125 z m -24.3125,0.125 c -0.73569,-0.0125 -1.40096,0.0608 -1.8125,0.21875 -1.90376,0.73054 -5.495,6.59673 -5.5,8.96875 -0.003,1.46625 0.45864,1.27823 2.4375,-1 2.30775,-2.65686 2.50204,-2.7222 4.15625,-1.09375 1.14959,1.13169 1.88956,3.69618 2.125,7.5 0.42911,6.93266 -1.27101,10.88613 -4.53125,10.53125 -2.72655,-0.29679 -2.79747,1.14003 -0.1875,3.75 2.52768,2.52767 4.05342,2.50109 7.3125,-0.0625 6.98984,-5.4982 5.69531,-26.63134 -1.75,-28.5 -0.70468,-0.17687 -1.51431,-0.30001 -2.25,-0.3125 z m -0.125,34.15625 c -3.03055,0.15935 -5.82658,3.1957 -6.75,8.78125 l -0.5625,3.4375 1.59375,-2.75 c 3.2943,-5.70708 7.53125,-1.91269 7.53125,6.75 0,6.26471 -1.81011,9.77478 -4.71875,9.21875 -2.70704,-0.51748 -2.94735,0.87134 -0.625,3.4375 1.83061,2.0228 4.51284,2.35661 7.28125,0.875 4.3946,-2.35191 6.61423,-16.39767 3.6875,-23.3125 -1.89701,-4.48196 -4.76348,-6.5781 -7.4375,-6.4375 z m 24,0 c -3.03055,0.15935 -5.82658,3.1957 -6.75,8.78125 l -0.5625,3.4375 1.59375,-2.75 c 3.2943,-5.70708 7.53125,-1.91269 7.53125,6.75 0,6.26471 -1.81011,9.77478 -4.71875,9.21875 -2.70704,-0.51748 -2.94735,0.87134 -0.625,3.4375 1.83061,2.0228 4.51284,2.35661 7.28125,0.875 4.3946,-2.35191 6.61423,-16.39767 3.6875,-23.3125 -1.89701,-4.48196 -4.76348,-6.5781 -7.4375,-6.4375 z m -47.8125,0.0312 c -0.61663,0.0372 -1.23819,0.19561 -1.90625,0.5 -2.57591,1.17366 -5.5133,6.53239 -5.4375,9.90625 0.0289,1.28699 0.46202,0.99878 1.5625,-1.03125 2.88008,-5.31275 7.375,-1.16313 7.375,6.8125 0,5.32909 -1.98516,9.00718 -4.78125,8.90625 -2.61901,-0.0945 -2.79994,1.24313 -0.53125,3.75 2.07891,2.29717 5.6736,2.35765 7.90625,0.125 7.78427,-7.78427 4.2383,-28.39573 -3.5625,-28.96875 -0.20175,-0.0148 -0.41946,-0.0124 -0.625,0 z" + id="path4073" + inkscape:connector-curvature="0" /> + <path + style="fill:&fill_color;" + d="m 234.202,214.60022 c -17.19552,0.0258 -36.72906,2.10435 -36.72906,4.6281 0,0.50588 2.29292,2.40582 5.09537,4.20461 14.38019,9.23015 22.29846,25.07755 20.68473,41.41088 -0.37435,3.78903 -0.26146,6.74885 0.27297,7.07827 0.5045,0.31097 2.65002,-0.063 4.79206,-0.81673 14.89927,-5.2428 43.93519,-5.7619 61.84191,-1.11921 18.94967,4.9131 34.34562,14.63173 41.97607,26.52837 3.11026,4.8492 3.45858,5.11109 4.94371,3.62988 1.29501,-1.29157 1.60747,-3.64166 1.60747,-12.43234 0,-13.91025 -2.241,-20.92851 -10.09973,-31.4892 -16.83711,-22.62598 -44.36226,-36.89154 -78.79612,-40.89665 -4.39995,-0.51177 -9.85753,-0.73457 -15.58938,-0.72598 z" + id="path2979-3" + inkscape:connector-curvature="0" /> + <path + style="fill:#fc8a20" + d="m 233.6257,217.56591 c -13.79863,-0.0208 -28.70803,1.45973 -31.78125,3.15625 -0.99015,0.5466 -0.17385,1.52848 2.96875,3.6875 5.60811,3.85287 12.92442,11.72916 15.375,16.53125 3.637,7.12696 5.17016,14.20739 5,22.90625 -0.12859,6.5733 0.12054,8.30115 1.1875,8.15625 0.74331,-0.10095 5.79001,-1.15511 11.1875,-2.34375 11.75549,-2.58883 33.9737,-3.0788 45.625,-1 10.17619,1.81563 23.87301,6.38842 30.90625,10.34375 5.00376,2.814 13.7556,10.84723 18.875,17.0625 0.19523,0.0542 0.35163,0.19974 0.375,0.40625 0.70162,0.86858 1.31689,1.69921 1.84375,2.46875 3.10522,4.53557 4.35312,2.81613 4.78125,-6.59375 0.62736,-13.78929 -2.7158,-23.58092 -11.96875,-35.15625 -9.48033,-11.85977 -18.59127,-19.1089 -32.875,-26.15625 -18.51307,-9.13404 -38.15671,-13.43355 -61.5,-13.46875 z" + id="path2975-8" + inkscape:connector-curvature="0" /> + <path + style="fill:&fill_color;" + d="m 178.34445,226.69091 c -3.2819,0.0617 -6.38779,0.72773 -9.09375,2.09375 -9.11094,4.59939 -21.20556,13.25692 -27.5625,19.75 -12.05918,12.31744 -17.20974,23.62458 -17.9375,39.3125 -0.7756,16.71884 4.27481,29.089 17.625,43.0625 16.75983,17.54231 42.44006,29.2191 72.65625,33.0625 5.77072,0.73398 25.5,0.68896 25.5,-0.0625 0,-0.41708 -3.94269,-1.78851 -8.75,-3.03125 -27.46278,-7.09941 -47.23224,-25.13897 -47.5,-43.34375 -0.18108,-12.31151 4.99917,-21.61489 17.84375,-32.03125 9.08948,-7.37114 11.752,-12.77399 11.6875,-23.84375 -0.051,-8.75813 -1.8378,-14.25436 -6.8125,-21.03125 -6.45323,-8.79107 -17.81054,-14.12276 -27.65625,-13.9375 z m 2.96875,12.96875 c 5.95141,-0.002 9.48821,1.49045 13.34375,5.65625 3.97218,4.29183 5.15625,7.23617 5.15625,12.8125 0,7.68822 -4.7743,14.89219 -11.59375,17.46875 -4.36567,1.64947 -11.83833,1.28309 -15.6875,-0.78125 -1.90264,-1.02039 -4.80497,-3.53809 -6.46875,-5.59375 -2.75036,-3.39816 -3.03125,-4.41233 -3.03125,-11.0625 0,-6.66384 0.26453,-7.6552 3.0625,-11.15625 4.07987,-5.10508 8.7048,-7.34175 15.21875,-7.34375 z m 11,19.0625 c -2.74851,0.13827 -4.90837,3.89933 -2.75,6.5 0.66276,0.79858 2.00344,1.4375 2.96875,1.4375 3.97883,0 5.21233,-5.19459 1.75,-7.375 -0.64967,-0.40913 -1.33448,-0.59441 -1.96875,-0.5625 z m 139.3125,2.9375 c -2.55111,0 -7.37044,9.9745 -9.03125,18.6875 -0.77692,4.07592 -0.66824,4.29584 4.15625,9 2.71994,2.6521 6.3066,6.76924 7.96875,9.15625 2.25379,3.23669 3.31007,4.03368 4.15625,3.1875 1.6062,-1.6062 2.06545,-15.73172 0.71875,-22.21875 -1.28219,-6.17627 -6.49377,-17.8125 -7.96875,-17.8125 z m -115.3125,27.8125 -1.34375,0.90625 c 0.62514,-0.26161 1.26204,-0.49891 1.90625,-0.75 l -0.5625,-0.15625 z" + id="path2971-9" + inkscape:connector-curvature="0" /> + <path + style="fill:#000000" + d="m 174.78195,226.25341 c -3.13158,0.0528 -4.92609,0.83064 -9.78125,3.40625 -20.45772,10.85261 -34.73643,26.09738 -40.03125,42.78125 -9.11155,28.71028 7.15634,58.42004 41.375,75.625 11.74671,5.90618 30.49861,11.27847 46.65625,13.375 4.3574,0.56539 18.5,0.78543 18.5,0.28125 0,-0.23597 -2.5875,-1.17838 -5.75,-2.09375 -8.49195,-2.45795 -19.58511,-7.83369 -26.78125,-12.96875 -17.59128,-12.55288 -23.49422,-30.70843 -15.25,-46.9375 2.45377,-4.83033 10.81435,-13.8095 16.53125,-17.75 7.21092,-4.97028 11.06278,-16.24141 9.28125,-27.1875 -2.54542,-15.63971 -15.28007,-27.31109 -31,-28.40625 -1.50651,-0.10495 -2.70614,-0.1426 -3.75,-0.125 z m 4.09375,10.59375 c 9.52418,0 17.12099,5.99995 19.6875,15.53125 2.02463,7.51889 -1.69909,16.30131 -8.8125,20.8125 -3.74434,2.37459 -5.71421,2.93775 -10.1875,2.90625 -6.70276,-0.0472 -10.51475,-1.62049 -14.75,-6.09375 -3.9758,-4.19926 -5.3125,-7.66866 -5.3125,-13.78125 0,-10.66685 8.70967,-19.375 19.375,-19.375 z m 11.4375,21.4375 c -2.17427,-0.0424 -3.33969,2.005 -2.40625,4.4375 0.3614,0.9418 1.49147,1.44202 2.84375,1.25 1.65273,-0.23469 2.25,-1.01102 2.25,-2.84375 0,-1.83273 -0.59727,-2.57781 -2.25,-2.8125 -0.15357,-0.0218 -0.29255,-0.0284 -0.4375,-0.0312 z m 138.8125,1.625 -2.3125,2.875 c -2.5541,3.19839 -6.3125,13.4316 -6.3125,17.1875 0,1.66098 2.04226,4.42905 6.4375,8.78125 3.53631,3.50168 6.71174,7.26985 7.0625,8.375 0.88425,2.78601 2.34692,2.50639 3.125,-0.59375 1.97456,-7.86724 -1.59512,-26.74577 -6.46875,-34.25 l -1.53125,-2.375 z" + id="path2969-5" + inkscape:connector-curvature="0" /> + <path + style="fill:#000000" + d="m 190.3132,257.78466 c -2.17427,-0.0424 -3.33969,2.005 -2.40625,4.4375 0.3614,0.9418 1.49147,1.44202 2.84375,1.25 1.65273,-0.23469 2.25,-1.01102 2.25,-2.84375 0,-1.83273 -0.59727,-2.57781 -2.25,-2.8125 -0.15357,-0.0218 -0.29255,-0.0284 -0.4375,-0.0312 z m 139.0625,1.34375 -2.4375,3 c -2.71571,3.36528 -6.4375,13.50595 -6.4375,17.53125 0,1.88484 1.17624,3.59292 4.09375,5.9375 2.24622,1.80511 5.70424,5.5207 7.6875,8.28125 3.09611,4.30956 3.70859,4.77375 4.34375,3.15625 1.13949,-2.90182 0.99767,-13.69629 -0.25,-19.59375 -0.61661,-2.91457 -2.44095,-8.2375 -4.0625,-11.8125 l -2.9375,-6.5 z" + id="path2967-8" + inkscape:connector-curvature="0" /> + <path + style="fill:#000000" + d="m 142.2507,191.90965 c -1.14166,0.0928 -2.23011,0.77953 -3.5625,2.03125 -3.36207,3.1585 -3.16049,8.65369 0.4375,12 4.18468,3.89196 7.63908,5.85192 13.96875,7.875 6.35406,2.03087 8.90881,2.34632 9.625,1.1875 0.66729,-1.0797 -11.31804,-17.19147 -15.25,-20.5 -2.21751,-1.86591 -3.75091,-2.71309 -5.21875,-2.59375 z m 34.6875,2.90625 c -1.36653,-0.003 -2.77934,0.51626 -3.8125,1.6875 -2.19434,2.48758 -3.04183,7.55521 -2.25,13.3125 0.3784,2.75128 1.19072,4.9375 1.84375,4.9375 1.31128,0 8.65725,-13.59615 8.65625,-16.03125 -0.001,-2.41239 -2.15995,-3.90078 -4.4375,-3.90625 z m 35.5,97.46875 c -5.6838,0.0559 -6.46316,0.47916 -9.03125,2.9375 -6.51339,6.23503 -6.28777,15.16452 0.53125,22.28125 4.22392,4.40833 7.1112,4.98397 5.90625,1.1875 -1.04268,-3.28518 0.33614,-4.03392 4.3125,-2.3125 15.40508,6.66906 18.71275,6.20414 12.84375,-1.84375 -1.09808,-1.50574 -1.70905,-3.04094 -1.34375,-3.40625 0.36531,-0.36531 4.61688,1.14813 9.4375,3.375 16.17932,7.47399 22.08724,8.85202 25.09375,5.84375 1.54765,-1.54857 1.50871,-1.93061 -0.5625,-5.53125 -1.97295,-3.42983 -2.04308,-3.99997 -0.6875,-5.125 1.26433,-1.0493 1.90097,-0.88027 3.71875,0.9375 1.84593,1.84593 2.21875,3.31503 2.21875,9.25 0,6.40799 -0.26524,7.26021 -2.6875,9.34375 -1.96698,1.69192 -2.35561,2.61314 -1.53125,3.4375 2.57563,2.57563 6.09061,0.24803 8.25,-5.40625 2.18856,-5.73067 1.52513,-15.58778 -1.3125,-19.40625 -2.69642,-3.62845 -6.64093,-3.9228 -8.78125,-0.65625 -0.9227,1.40821 -2.06165,2.5625 -2.53125,2.5625 -0.46959,0 -4.05094,-2.05933 -7.96875,-4.59375 -3.9178,-2.53441 -11.0194,-6.48031 -15.78125,-8.75 -8.07026,-3.84662 -9.25125,-4.1108 -17.34375,-4.125 -1.03272,-0.002 -1.93803,-0.008 -2.75,0 z m 73.71875,12.625 c -0.853,0.0472 -1.65972,0.33856 -2.34375,0.90625 -1.97491,1.63902 -1.82781,2.31499 0.78125,3.46875 2.96578,1.31151 4.7319,5.07229 4.75,10.09375 0.0199,5.53738 -1.73355,10.17848 -4.125,10.9375 -1.56895,0.49796 -1.71757,0.90306 -0.78125,2.03125 2.507,3.02075 6.23841,0.8088 8.46875,-5.03125 2.25068,-5.89331 1.63715,-15.47306 -1.21875,-19.3125 -1.56256,-2.10069 -3.65464,-3.1977 -5.53125,-3.09375 z m 24.34375,0 c -1.01073,0.0655 -2.09146,0.41158 -2.6875,0.90625 -1.8052,1.49818 -1.89838,4.0555 -0.125,3.375 2.26277,-0.86831 4.9438,3.2995 5.4375,8.4375 0.57755,6.01067 -1.19738,11.80641 -3.875,12.65625 -1.58731,0.50379 -1.7494,0.9336 -0.8125,2.0625 1.70029,2.04872 3.68704,1.75046 6.40625,-0.96875 6.27431,-6.27431 3.83941,-25.36825 -3.375,-26.4375 -0.30315,-0.0449 -0.63184,-0.0531 -0.96875,-0.0312 z m -23.90625,33.9375 c -0.64518,0.0502 -1.21166,0.48892 -2.15625,1.34375 -2.60008,2.35306 -2.63173,3.5625 -0.0937,3.5625 2.70076,0 5.03125,4.85738 5.03125,10.5 0,5.1693 -2.30319,10.5 -4.53125,10.5 -1.56441,0 -1.96627,1.18999 -0.78125,2.375 1.4708,1.47081 5.67695,0.0377 7.65625,-2.625 1.40735,-1.89329 2.17956,-4.72125 2.4375,-9 0.47171,-7.82458 -1.38161,-13.64662 -4.96875,-15.65625 -1.22468,-0.6861 -1.94857,-1.05018 -2.59375,-1 z m -23.65625,0.0312 c -1.00591,0.0136 -2.02672,0.49547 -3,1.46875 -2.14975,2.14975 -1.98172,3.40625 0.46875,3.40625 2.48135,0 4.96875,5.23543 4.96875,10.5 0,4.64915 -2.49885,10.5 -4.46875,10.5 -1.63044,0 -2.04934,1.16942 -0.84375,2.375 1.43579,1.4358 5.65337,0.0582 7.53125,-2.46875 2.83763,-3.81847 3.50106,-13.67558 1.3125,-19.40625 -1.60143,-4.19328 -3.75574,-6.40483 -5.96875,-6.375 z m 48.25,0.25 c -0.98726,-0.0258 -1.94029,0.33566 -2.8125,1.125 -2.58811,2.34221 -2.53351,3.29222 0.21875,3.6875 3.39153,0.48709 4.89619,4.42862 4.5,11.71875 -0.30111,5.54051 -0.70469,6.68245 -3.0625,8.5625 -1.49555,1.19251 -2.37467,2.50033 -1.96875,2.90625 1.49784,1.49783 5.64895,0.044 7.65625,-2.65625 2.76871,-3.72457 3.47458,-14.75063 1.28125,-20 -1.40183,-3.35507 -3.64053,-5.28704 -5.8125,-5.34375 z m -79.53125,23.6875 c -0.0258,0.15731 -0.0614,0.31245 -0.0937,0.46875 0.32684,-0.10113 0.42049,-0.22253 0.25,-0.375 -0.0292,-0.0261 -0.10799,-0.0621 -0.15625,-0.0937 z" + id="path4071" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/activity/activity.info b/activity/activity.info new file mode 100644 index 0000000..a0c07d6 --- /dev/null +++ b/activity/activity.info @@ -0,0 +1,9 @@ +[Activity] +name = TIXO +service_name = org.teleton.ingenieria.TIXO +exec = sugar-activity Tixo.Tixo +icon = Activity-TicoTico +activity_version = 1 +license = GPLv3+ +show_launcher = yes +mime_types = application/octet-stream diff --git a/activity/activity.info~ b/activity/activity.info~ new file mode 100644 index 0000000..a00caae --- /dev/null +++ b/activity/activity.info~ @@ -0,0 +1,9 @@ +[Activity] +name = TIXO +service_name = org.teleton.ingenieria.TIXO +exec = sugar-activity Tixo.Tixo +icon = Activity-TicoTico +activity_version = 2 +license = GPLv3+ +show_launcher = yes +mime_types = application/octet-stream diff --git a/components/TInterpreterAcumulatedCell.py b/components/TInterpreterAcumulatedCell.py new file mode 100644 index 0000000..6420278 --- /dev/null +++ b/components/TInterpreterAcumulatedCell.py @@ -0,0 +1,52 @@ +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +__author__="Rodrigo" +__date__ ="$21-sep-2012 12:21:37$" + +from components.TInterpreterCommonCell import TInterpreterCommonCell +import pygtk +pygtk.require('2.0') +import gtk + +class TInterpreterAcumulatedCell(TInterpreterCommonCell): + + def __init__(self, original): + self._original = original + super(TInterpreterAcumulatedCell, self).__init__() + self.setText(original.getText()) + self.setIcon(original.getIcon()) + self.initialize() + + def getOriginal(self): + return self._original + + def getHeight(self): + return 100 + + def getWidth(self): + return 80 + + def getId(self): + return self._original.getId() + + +if __name__ == "__main__": + print "Hello World" diff --git a/components/TInterpreterCell.py b/components/TInterpreterCell.py new file mode 100644 index 0000000..fdb1a4a --- /dev/null +++ b/components/TInterpreterCell.py @@ -0,0 +1,124 @@ +import TInterpreterProject +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +__author__="Rodrigo" +__date__ ="$20-sep-2012 11:11:29$" + +import speak.espeak_cmd as espeak_cmd +import speak.GoogleTTS as GoogleTTS + +from components.TInterpreterCommonCell import TInterpreterCommonCell +from threads.TInterpreterPlaySound import TInterpreterPlaySound +import pygtk +pygtk.require('2.0') +import gtk + + + +class TInterpreterCell(TInterpreterCommonCell): + projectName = "" + + + def __init__(self): + super(TInterpreterCell, self).__init__() + self.connect("clicked", self.onClick) +# self.connect("enter", self.onMouseOver) +# self.connect("enter", self.onMouseOut(widget)) + + self._FollowingBoard = None + self._Acumulable = False + self._AlternativeIcon = None + self._SoundFile = None + self._VoiceText = None + + +#========SETUP FUNCTIONS======================================================== + + def setSendTextTarget(self, value): + self._SendTextTarget = value + + def setSendText(self, value): + self._SendText = value + + def setAlternativeIcon(self, value): + self._AlternativeIcon = value + + + def setSoundFile(self, value): + self._SoundFile = value + + def setAlternativeSoundFile(self, value): + self._AlternativeSoundFile = value + + def setVoiceText(self, value): + self._VoiceText = value + + +#=======ADD LISTENERS=========================================================== + + def setFollowingBoard(self, value, action): + self._FollowingBoard = value + self._actionChangeBoard = action + + + def setAcumulable(self, value, action): + self._Acumulable = value + self._actionAcumulable = action + + + + + + +#=======ON EVENTS========================================================== + + def sonido(self): + t = TInterpreterPlaySound((self._SoundFile,)) + t.start() + + def sintetizar(self): + funciono = GoogleTTS.intentar(TInterpreterCell.projectName, self._VoiceText) + if not funciono: + espeak_cmd.hablar(self._VoiceText) + + def onMouseOver(self, widget): + if self._AlternativeIcon: + self.deInitialize() + self.add(self.loadImage(img = self._AlternativeIcon)) + + def onMouseOut(self, widget): + self.initialize() + + def onClick(self, widget): + if self._Acumulable: + self._actionAcumulable(self) + + if self._SoundFile: + self.sonido() + + if self._VoiceText: + self.sintetizar() + + if self._FollowingBoard != None: + self._actionChangeBoard(self._FollowingBoard) + +if __name__ == "__main__": + print "Hello World" diff --git a/components/TInterpreterCommonCell.py b/components/TInterpreterCommonCell.py new file mode 100644 index 0000000..538f7b8 --- /dev/null +++ b/components/TInterpreterCommonCell.py @@ -0,0 +1,153 @@ +__author__="Rodrigo" +__date__ ="$21-sep-2012 12:25:32$" + +from components.TInterpreterCommonControl import TInterpreterCommonControl +import pygtk +pygtk.require('2.0') +import gtk +import pango + +class TInterpreterCommonCell(gtk.Button, TInterpreterCommonControl): +#=======SETUP========================================================== + + def __init__(self): + super(TInterpreterCommonCell, self).__init__() + self._VerticalTextPosition = 0 + self._Icon = None + self._Text = None + self.BackgroundColor = None; + + + def setIcon(self, value): + self._Icon = value + + def getIcon(self): + return self._Icon + + def setAlternativeBorderColor(self, value): + self._AlternativeBorderColor = value + + def setAlternativeBorderWidth(self, value): + self._AlternativeBorderWidth = value + + def setVerticalTextPosition(self, value): + self._VerticalTextPosition = value + + def setId(self, value): + #self.set_label(value) + self._Id = value + +#========GET FUNCTIONS======================================================== + def getId(self): + return self._Id + + def getX(self): + return self._OriginalRect[0] + + def getY(self): + return self._OriginalRect[1] + + def getWidth(self): + return self._OriginalRect[2] + + def getHeight(self): + return self._OriginalRect[3] + + +#=======COLORIZE================================================================ + + def resaltar(self): + color = self.get_colormap().alloc_color("#ff0000") + + self.modify_bg(gtk.STATE_NORMAL, color) + self.modify_bg(gtk.STATE_ACTIVE, color) + self.modify_base(gtk.STATE_NORMAL, color) + self.modify_bg(gtk.STATE_PRELIGHT, color) + + self.grab_focus() + + def desResaltar(self): + color = self.get_colormap().alloc_color("#" + self.BackgroundColor.upper()[2:]) + + self.modify_bg(gtk.STATE_NORMAL, color) + self.modify_bg(gtk.STATE_PRELIGHT, color) + + +#=======Events Handlers========================================================= + def onMouseOver(self, widget): + pass + + def onMouseOut(self, widget): + pass + + def onClick(self, widget): + pass + + + +#=======INITIALIZATION========================================================== + def initialize(self): + #bacground color + #make a gdk.color for red + + if self.BackgroundColor: + color = self.get_colormap().alloc_color("#" + self.BackgroundColor.upper()[2:]) + + self.modify_bg(gtk.STATE_NORMAL, color) + self.modify_bg(gtk.STATE_PRELIGHT, color) + + + + + if self._Text != None and self._Icon != None: + vbox = gtk.VBox(False, 0) + lbl = gtk.Label(self._Text) + if self._VerticalTextPosition == 3: #bottom + vbox.pack_start(self.loadImage(True)) + vbox.pack_end(lbl) + else: #top or center = top + vbox.pack_start(lbl, False, False, 0) + vbox.pack_end(self.loadImage(True), False, False, 0) + + self.add(vbox) + text = lbl + + elif self._Text!=None: + self.set_label(self._Text) + text = self + elif self._Icon != None: + self.add(self.loadImage()) + text = self + + if self._ForegroundColor: + color = self.get_colormap().alloc_color("#" + self._ForegroundColor.upper()[2:]) + text.modify_fg(gtk.STATE_NORMAL, color) + text.modify_fg(gtk.STATE_PRELIGHT, color) + else: + color = self.get_colormap().alloc_color("black") + text.modify_fg(gtk.STATE_NORMAL, color) + text.modify_fg(gtk.STATE_PRELIGHT, color) + + if self._FontSize: + text.modify_font(pango.FontDescription("sans " + str(self._FontSize))) + + def deInitialize(self): + children = self.get_children() + for child in children: + self.remove(child) + + def loadImage(self, texto = False, img = None): + image = gtk.Image() + if img==None: + img = self._Icon + pixbuf = gtk.gdk.pixbuf_new_from_file(img) + + maxW = float(self.getWidth()) + maxH = float(self.getHeight() if not texto else self.getHeight() - self._FontSize * 4) + + im = pixbuf.scale_simple(int(maxW - 10), int(maxH - 10), gtk.gdk.INTERP_BILINEAR) + image.set_from_pixbuf(im) + return image + +if __name__ == "__main__": + print "Hello World" diff --git a/components/TInterpreterCommonCell.py~ b/components/TInterpreterCommonCell.py~ new file mode 100644 index 0000000..78809ef --- /dev/null +++ b/components/TInterpreterCommonCell.py~ @@ -0,0 +1,149 @@ +__author__="Rodrigo" +__date__ ="$21-sep-2012 12:25:32$" + +from components.TInterpreterCommonControl import TInterpreterCommonControl +import pygtk +pygtk.require('2.0') +import gtk +import pango + +class TInterpreterCommonCell(gtk.Button, TInterpreterCommonControl): +#=======SETUP========================================================== + + def __init__(self): + super(TInterpreterCommonCell, self).__init__() + self._VerticalTextPosition = 0 + self._Icon = None + self._Text = None + self.BackgroundColor = None; + + + def setIcon(self, value): + self._Icon = value + + def getIcon(self): + return self._Icon + + def setAlternativeBorderColor(self, value): + self._AlternativeBorderColor = value + + def setAlternativeBorderWidth(self, value): + self._AlternativeBorderWidth = value + + def setVerticalTextPosition(self, value): + self._VerticalTextPosition = value + + def setId(self, value): + #self.set_label(value) + self._Id = value + +#========GET FUNCTIONS======================================================== + def getId(self): + return self._Id + + def getX(self): + return self._OriginalRect[0] + + def getY(self): + return self._OriginalRect[1] + + def getWidth(self): + return self._OriginalRect[2] + + def getHeight(self): + return self._OriginalRect[3] + + +#=======COLORIZE================================================================ + + def resaltar(self): + color = self.get_colormap().alloc_color("#ff0000") + + self.modify_bg(gtk.STATE_NORMAL, color) + self.modify_bg(gtk.STATE_PRELIGHT, color) + + def desResaltar(self): + color = self.get_colormap().alloc_color("#" + self.BackgroundColor.upper()[2:]) + + self.modify_bg(gtk.STATE_NORMAL, color) + self.modify_bg(gtk.STATE_PRELIGHT, color) + + +#=======Events Handlers========================================================= + def onMouseOver(self, widget): + pass + + def onMouseOut(self, widget): + pass + + def onClick(self, widget): + pass + + + +#=======INITIALIZATION========================================================== + def initialize(self): + #bacground color + #make a gdk.color for red + + if self.BackgroundColor: + color = self.get_colormap().alloc_color("#" + self.BackgroundColor.upper()[2:]) + + self.modify_bg(gtk.STATE_NORMAL, color) + self.modify_bg(gtk.STATE_PRELIGHT, color) + + + + + if self._Text != None and self._Icon != None: + vbox = gtk.VBox(False, 0) + lbl = gtk.Label(self._Text) + if self._VerticalTextPosition == 3: #bottom + vbox.pack_start(self.loadImage(True)) + vbox.pack_end(lbl) + else: #top or center = top + vbox.pack_start(lbl, False, False, 0) + vbox.pack_end(self.loadImage(True), False, False, 0) + + self.add(vbox) + text = lbl + + elif self._Text!=None: + self.set_label(self._Text) + text = self + elif self._Icon != None: + self.add(self.loadImage()) + text = self + + if self._ForegroundColor: + color = self.get_colormap().alloc_color("#" + self._ForegroundColor.upper()[2:]) + text.modify_fg(gtk.STATE_NORMAL, color) + text.modify_fg(gtk.STATE_PRELIGHT, color) + else: + color = self.get_colormap().alloc_color("black") + text.modify_fg(gtk.STATE_NORMAL, color) + text.modify_fg(gtk.STATE_PRELIGHT, color) + + if self._FontSize: + text.modify_font(pango.FontDescription("sans " + str(self._FontSize))) + + def deInitialize(self): + children = self.get_children() + for child in children: + self.remove(child) + + def loadImage(self, texto = False, img = None): + image = gtk.Image() + if img==None: + img = self._Icon + pixbuf = gtk.gdk.pixbuf_new_from_file(img) + + maxW = float(self.getWidth()) + maxH = float(self.getHeight() if not texto else self.getHeight() - self._FontSize * 4) + + im = pixbuf.scale_simple(int(maxW - 10), int(maxH - 10), gtk.gdk.INTERP_BILINEAR) + image.set_from_pixbuf(im) + return image + +if __name__ == "__main__": + print "Hello World" diff --git a/components/TInterpreterCommonControl.py b/components/TInterpreterCommonControl.py new file mode 100644 index 0000000..7e2e57e --- /dev/null +++ b/components/TInterpreterCommonControl.py @@ -0,0 +1,47 @@ +__author__="Rodrigo" +__date__ ="$25-sep-2012 14:47:44$" + +class TInterpreterCommonControl: + def __init__(self): + self._ForegroundColor = None + self.BackgroundColor = None + self._FontFamily = None + self._FontSize = None + pass + + def setBackgroundColor(self, value): + self.BackgroundColor = value + + + def setOriginalRect(self, value): + self._OriginalRect = value + + def setFontFamily(self, value): + self._FontFamily = value + + def setFontSize(self, value): + self._FontSize = value + + def setFontBold(self, value): + self._FontBold = value + + def setFontItalic(self, value): + self._FontItalic = value + + def setForegroundColor(self, value): + self._ForegroundColor=value + + def setText(self, value): + self._Text = value + + def setBorderWidth(self, value): + self._BorderWidth = value + + def setBorderColor(self, value): + self._BorderColor = value + + def getText(self): + return self._Text + +if __name__ == "__main__": + print "Hello World"; diff --git a/components/TInterpreterConstants.py b/components/TInterpreterConstants.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/components/TInterpreterConstants.py diff --git a/components/TInterpreterControlCell.py b/components/TInterpreterControlCell.py new file mode 100644 index 0000000..4067257 --- /dev/null +++ b/components/TInterpreterControlCell.py @@ -0,0 +1,60 @@ +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from components.TInterpreterCommonCell import TInterpreterCommonCell +__author__="Rodrigo" +__date__ ="$25-sep-2012 14:28:49$" + +import pygtk +pygtk.require('2.0') +import gtk + + +class TInterpreterControlCell(TInterpreterCommonCell): + EXIT_ACTION_CODE = 1 + UNDO_ACTION_CODE = 2 + UNDO_ALL_ACTION_CODE = 3 + READ_ACTION_CODE = 4 + RETURN_ACTION_CODE = 5 + STOP_ACTION_CODE = 6 + HOME_ACTION_CODE = 7 + COPY_ACTION_CODE = 8 + + def __init__(self): + super(TInterpreterControlCell, self).__init__() + self.connect("clicked", self.onClick) + + def setActionCode(self, value, action = None): + self._ActionCode = value + + if action!= None: + self._action = action + + + +#=======ON EVENTS========================================================== + + def onClick(self, widget): + if self._ActionCode == self.EXIT_ACTION_CODE: + gtk.main_quit() + else: + self._action() + + diff --git a/components/TInterpreterTextArea.py b/components/TInterpreterTextArea.py new file mode 100644 index 0000000..6b81c28 --- /dev/null +++ b/components/TInterpreterTextArea.py @@ -0,0 +1,10 @@ +from components.TInterpreterCommonControl import TInterpreterCommonControl +import pygtk +pygtk.require('2.0') +import gtk +__author__="Rodrigo" +__date__ ="$26-sep-2012 10:50:05$" + +class TInterpreterTextArea(TInterpreterCommonControl, gtk.Entry): + def __init__(self): + super(TInterpreterTextArea, self).__init__()
\ No newline at end of file diff --git a/components/__init__.py b/components/__init__.py new file mode 100644 index 0000000..a5fb98d --- /dev/null +++ b/components/__init__.py @@ -0,0 +1,2 @@ +__author__="Rodrigo" +__date__ ="$20-sep-2012 11:27:27$"
\ No newline at end of file diff --git a/components/rules/__init__.py b/components/rules/__init__.py new file mode 100644 index 0000000..a5fb98d --- /dev/null +++ b/components/rules/__init__.py @@ -0,0 +1,2 @@ +__author__="Rodrigo" +__date__ ="$20-sep-2012 11:27:27$"
\ No newline at end of file diff --git a/dist/TIXO-1.xo b/dist/TIXO-1.xo Binary files differnew file mode 100644 index 0000000..7f18892 --- /dev/null +++ b/dist/TIXO-1.xo diff --git a/dist/TIXO-2.xo b/dist/TIXO-2.xo Binary files differnew file mode 100644 index 0000000..ae0f27d --- /dev/null +++ b/dist/TIXO-2.xo diff --git a/generar.sh b/generar.sh new file mode 100644 index 0000000..47a95ac --- /dev/null +++ b/generar.sh @@ -0,0 +1,29 @@ +if ! 'rm -r */*.pyc'; then + echo 'No hay pyc para borrar' +else + echo 'Se borraron los pyc' +fi 2>/dev/null + +if ! 'rm -r ./proyectos/*'; then + echo 'No hay proyectos para borrar' +else + echo 'Se borraron los proyectos' +fi 2>/dev/null + +if ! './setup.py' 'genpot'; then + echo 'No se pudo generar pot' +else + echo 'Se genero pot' +fi 2>/dev/null + +if ! './setup.py' 'fix_manifest'; then + echo 'No se pudo arreglar el manifest' +else + echo 'Se arreglo el manifest' +fi 2>/dev/null + +if ! './setup.py' 'dist_xo'; then + echo 'Hubo un error al generar el .XO' +else + echo 'Se genero el .XO en la carpeta ./dist/' +fi 2>/dev/null diff --git a/icons/barrido.svg b/icons/barrido.svg new file mode 100644 index 0000000..78afad8 --- /dev/null +++ b/icons/barrido.svg @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="55" + height="55" + id="svg4502" + sodipodi:version="0.32" + inkscape:version="0.48.0 r9654" + version="1.0" + sodipodi:docname="Icon_template.inkscape.svg" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs4504" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="7.919596" + inkscape:cx="31.466786" + inkscape:cy="34.248989" + inkscape:document-units="px" + inkscape:current-layer="layer4" + width="55px" + height="55px" + inkscape:window-width="1366" + inkscape:window-height="737" + inkscape:window-x="0" + inkscape:window-y="1" + showgrid="false" + inkscape:window-maximized="1"> + <inkscape:grid + id="GridFromPre046Settings" + type="xygrid" + originx="0px" + originy="0px" + spacingx="15px" + spacingy="15px" + color="#0000ff" + empcolor="#0000ff" + opacity="0.2" + empopacity="0.4" + empspacing="5" /> + </sodipodi:namedview> + <metadata + id="metadata4507"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="_guide" + inkscape:groupmode="layer" + id="layer1" + style="display:inline" + sodipodi:insensitive="true"> + <g + id="_x5F_guide"> + <rect + x="0" + width="55" + height="55" + id="rect2336" + y="0" + style="fill:#282828;fill-opacity:1" /> + <rect + x="5" + y="5" + width="45" + height="45" + id="rect2338" + style="fill:none;stroke:#000000;stroke-opacity:1" /> + <flowRoot + xml:space="preserve" + id="flowRoot4579"><flowRegion + id="flowRegion4581"><rect + id="rect4583" + width="47.72971" + height="44.194176" + x="62.124382" + y="-15.710678" /></flowRegion><flowPara + id="flowPara4585">r2r2r23r23r23r23r23r</flowPara></flowRoot> </g> + </g> + <g + inkscape:groupmode="layer" + id="layer2" + inkscape:label="_swatches" + style="display:inline"> + <g + id="_x5F_swatches"> + <rect + x="55" + width="55" + height="55" + id="rect2318" + y="0" + style="fill:#000000;fill-opacity:1" /> + <rect + x="84.695" + y="16.556999" + width="8.783" + height="8.7799997" + id="rect2320" + style="fill:#666666;stroke:#ffffff;stroke-width:3.5" /> + <rect + x="84.695" + y="29.729" + width="8.783" + height="8.7819996" + id="rect2322" + style="fill:#ffffff;stroke:#ffffff;stroke-width:3.5" /> + <rect + x="97.867996" + y="16.556" + width="8.7819996" + height="8.7810001" + id="rect2324" + style="fill:#666666" /> + <rect + x="71.521004" + y="16.556999" + width="8.783" + height="8.7799997" + id="rect2326" + style="fill:#666666;stroke:#666666;stroke-width:3.5" /> + <rect + x="84.695" + y="3.3840001" + width="8.783" + height="8.7799997" + id="rect2328" + style="fill:none;stroke:#ffffff;stroke-width:3.5" /> + <rect + x="58.349998" + y="29.729" + width="8.783" + height="8.7819996" + id="rect2330" + style="fill:#ffffff" /> + <rect + x="71.521004" + y="42.900002" + width="8.783" + height="8.7810001" + id="rect2332" + style="fill:none;stroke:#666666;stroke-width:3.5" /> + <rect + x="71.521004" + y="29.729" + width="8.783" + height="8.7819996" + id="rect2334" + style="fill:#ffffff;stroke:#666666;stroke-width:3.5" /> + </g> + </g> + <g + inkscape:groupmode="layer" + id="layer4" + inkscape:label="icon" + style="display:inline"> + <path + sodipodi:type="arc" + style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#666666;stroke-width:2.43559003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2165" + sodipodi:cx="29.546961" + sodipodi:cy="27.725882" + sodipodi:rx="15.657364" + sodipodi:ry="15.657364" + d="M 45.204325 27.725882 A 15.657364 15.657364 0 1 1 13.889597,27.725882 A 15.657364 15.657364 0 1 1 45.204325 27.725882 z" + transform="matrix(1.4370235,0,0,1.4370235,-14.959677,-12.342744)" /> + <rect + style="fill:#666666;fill-opacity:1;stroke:none" + id="rect3006" + width="10.354064" + height="18.687822" + x="13.384521" + y="17.644661" /> + <rect + style="fill:#666666;fill-opacity:1;stroke:none;display:inline" + id="rect3006-2" + width="10.354064" + height="18.687822" + x="31.188459" + y="17.518394" /> + <path + style="fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 16.28871,29.387685 13.384521,-0.505077 -1.010152,4.04061 5.177031,-5.808377 -7.576144,-4.545686 2.525382,4.04061 -10.985409,0.378807 z" + id="path3028" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/icons/open.svg b/icons/open.svg new file mode 100644 index 0000000..64ce481 --- /dev/null +++ b/icons/open.svg @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + enable-background="new 0 0 55 55" + height="55px" + version="1.1" + viewBox="0 0 55 55" + width="55px" + x="0px" + xml:space="preserve" + y="0px" + id="svg2" + inkscape:version="0.48.0 r9654" + sodipodi:docname="document-open.svg"><metadata + id="metadata15"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs + id="defs13" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="640" + inkscape:window-height="480" + id="namedview11" + showgrid="false" + inkscape:zoom="5.2545455" + inkscape:cx="27.5" + inkscape:cy="24.969954" + inkscape:window-x="0" + inkscape:window-y="1" + inkscape:window-maximized="0" + inkscape:current-layer="svg2" /><g + display="block" + id="activity-start"> + <g + id="g5"> + <polygon + fill="#FFFFFF" + points="22.277,19.683 36.071,27.501 22.277,35.317 " + id="polygon7" /> + <path + d="M27.5,5C15.073,5,5,15.074,5,27.5S15.073,50,27.5,50S50,39.926,50,27.5S39.927,5,27.5,5z M41,38.333H14 V16.667h27V38.333z" + fill="#FFFFFF" + id="path9" /> + </g> +</g></svg>
\ No newline at end of file diff --git a/po/TIXO.pot b/po/TIXO.pot new file mode 100644 index 0000000..57df67e --- /dev/null +++ b/po/TIXO.pot @@ -0,0 +1,163 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-12-17 12:26+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: activity/activity.info:2 +msgid "TIXO" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/Tixo.py:54 +msgid "Abrir" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/Tixo.py:55 +msgid "Barrido Automatico" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:35 +msgid "Brazil" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:36 +msgid "Swedish" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:37 +msgid "Icelandic" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:38 +msgid "Romanian" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:39 +msgid "Swahili" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:40 +msgid "Hindi" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:41 +msgid "Dutch" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:42 +msgid "Latin" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:43 +msgid "Hungarian" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:44 +msgid "Macedonian" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:45 +msgid "Welsh" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:46 +msgid "French" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:47 +msgid "Norwegian" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:48 +msgid "Russian" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:49 +msgid "Afrikaans" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:50 +msgid "Finnish" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:51 +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:154 +msgid "Default" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:52 +msgid "Cantonese" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:53 +msgid "Scottish" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:54 +msgid "Greek" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:55 +msgid "Vietnam" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:56 +msgid "English" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:57 +msgid "Lancashire" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:58 +msgid "Italian" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:59 +msgid "Portugal" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:60 +msgid "German" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:61 +msgid "Whisper" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:62 +msgid "Croatian" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:63 +msgid "Czech" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:64 +msgid "Slovak" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:65 +msgid "Spanish" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:66 +msgid "Polish" +msgstr "" + +#: /home/rodripf/Programacion/TicoPython/src/speak/voice.py:67 +msgid "Esperanto" +msgstr "" diff --git a/proyectos/.empty b/proyectos/.empty new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/proyectos/.empty diff --git a/proyectos/Muestra/image/2245.png b/proyectos/Muestra/image/2245.png Binary files differnew file mode 100644 index 0000000..ca8be16 --- /dev/null +++ b/proyectos/Muestra/image/2245.png diff --git a/proyectos/Muestra/image/2300.png b/proyectos/Muestra/image/2300.png Binary files differnew file mode 100644 index 0000000..de87812 --- /dev/null +++ b/proyectos/Muestra/image/2300.png diff --git a/proyectos/Muestra/image/2304_1.png b/proyectos/Muestra/image/2304_1.png Binary files differnew file mode 100644 index 0000000..483589f --- /dev/null +++ b/proyectos/Muestra/image/2304_1.png diff --git a/proyectos/Muestra/image/2314.png b/proyectos/Muestra/image/2314.png Binary files differnew file mode 100644 index 0000000..b302727 --- /dev/null +++ b/proyectos/Muestra/image/2314.png diff --git a/proyectos/Muestra/image/2349.png b/proyectos/Muestra/image/2349.png Binary files differnew file mode 100644 index 0000000..0315d67 --- /dev/null +++ b/proyectos/Muestra/image/2349.png diff --git a/proyectos/Muestra/image/2367.png b/proyectos/Muestra/image/2367.png Binary files differnew file mode 100644 index 0000000..ecd0e0d --- /dev/null +++ b/proyectos/Muestra/image/2367.png diff --git a/proyectos/Muestra/image/2370.png b/proyectos/Muestra/image/2370.png Binary files differnew file mode 100644 index 0000000..06ac16f --- /dev/null +++ b/proyectos/Muestra/image/2370.png diff --git a/proyectos/Muestra/image/2374.png b/proyectos/Muestra/image/2374.png Binary files differnew file mode 100644 index 0000000..1a2ed1b --- /dev/null +++ b/proyectos/Muestra/image/2374.png diff --git a/proyectos/Muestra/image/2401.png b/proyectos/Muestra/image/2401.png Binary files differnew file mode 100644 index 0000000..519b232 --- /dev/null +++ b/proyectos/Muestra/image/2401.png diff --git a/proyectos/Muestra/image/2430.png b/proyectos/Muestra/image/2430.png Binary files differnew file mode 100644 index 0000000..dd722ef --- /dev/null +++ b/proyectos/Muestra/image/2430.png diff --git a/proyectos/Muestra/image/24735.png b/proyectos/Muestra/image/24735.png Binary files differnew file mode 100644 index 0000000..50c3ff9 --- /dev/null +++ b/proyectos/Muestra/image/24735.png diff --git a/proyectos/Muestra/image/24795.png b/proyectos/Muestra/image/24795.png Binary files differnew file mode 100644 index 0000000..0646d6d --- /dev/null +++ b/proyectos/Muestra/image/24795.png diff --git a/proyectos/Muestra/image/2487.png b/proyectos/Muestra/image/2487.png Binary files differnew file mode 100644 index 0000000..67c6a4f --- /dev/null +++ b/proyectos/Muestra/image/2487.png diff --git a/proyectos/Muestra/image/25191.png b/proyectos/Muestra/image/25191.png Binary files differnew file mode 100644 index 0000000..f700492 --- /dev/null +++ b/proyectos/Muestra/image/25191.png diff --git a/proyectos/Muestra/image/2586.png b/proyectos/Muestra/image/2586.png Binary files differnew file mode 100644 index 0000000..0204c17 --- /dev/null +++ b/proyectos/Muestra/image/2586.png diff --git a/proyectos/Muestra/image/2587.png b/proyectos/Muestra/image/2587.png Binary files differnew file mode 100644 index 0000000..d2e52d3 --- /dev/null +++ b/proyectos/Muestra/image/2587.png diff --git a/proyectos/Muestra/image/2606.png b/proyectos/Muestra/image/2606.png Binary files differnew file mode 100644 index 0000000..963b8ad --- /dev/null +++ b/proyectos/Muestra/image/2606.png diff --git a/proyectos/Muestra/image/2684.png b/proyectos/Muestra/image/2684.png Binary files differnew file mode 100644 index 0000000..f7f2665 --- /dev/null +++ b/proyectos/Muestra/image/2684.png diff --git a/proyectos/Muestra/image/3250.png b/proyectos/Muestra/image/3250.png Binary files differnew file mode 100644 index 0000000..e7c9562 --- /dev/null +++ b/proyectos/Muestra/image/3250.png diff --git a/proyectos/Muestra/image/4962.png b/proyectos/Muestra/image/4962.png Binary files differnew file mode 100644 index 0000000..58126c1 --- /dev/null +++ b/proyectos/Muestra/image/4962.png diff --git a/proyectos/Muestra/image/5441.png b/proyectos/Muestra/image/5441.png Binary files differnew file mode 100644 index 0000000..46930f5 --- /dev/null +++ b/proyectos/Muestra/image/5441.png diff --git a/proyectos/Muestra/image/5957_1.png b/proyectos/Muestra/image/5957_1.png Binary files differnew file mode 100644 index 0000000..e012fac --- /dev/null +++ b/proyectos/Muestra/image/5957_1.png diff --git a/proyectos/Muestra/image/6522.png b/proyectos/Muestra/image/6522.png Binary files differnew file mode 100644 index 0000000..c5991f1 --- /dev/null +++ b/proyectos/Muestra/image/6522.png diff --git a/proyectos/Muestra/image/6537.png b/proyectos/Muestra/image/6537.png Binary files differnew file mode 100644 index 0000000..70a0509 --- /dev/null +++ b/proyectos/Muestra/image/6537.png diff --git a/proyectos/Muestra/image/6625_1.png b/proyectos/Muestra/image/6625_1.png Binary files differnew file mode 100644 index 0000000..bbef981 --- /dev/null +++ b/proyectos/Muestra/image/6625_1.png diff --git a/proyectos/Muestra/image/6632_1.png b/proyectos/Muestra/image/6632_1.png Binary files differnew file mode 100644 index 0000000..f20147b --- /dev/null +++ b/proyectos/Muestra/image/6632_1.png diff --git a/proyectos/Muestra/image/7061.png b/proyectos/Muestra/image/7061.png Binary files differnew file mode 100644 index 0000000..3e7400d --- /dev/null +++ b/proyectos/Muestra/image/7061.png diff --git a/proyectos/Muestra/image/8662.png b/proyectos/Muestra/image/8662.png Binary files differnew file mode 100644 index 0000000..47920c6 --- /dev/null +++ b/proyectos/Muestra/image/8662.png diff --git a/proyectos/Muestra/image/controller-home.png b/proyectos/Muestra/image/controller-home.png Binary files differnew file mode 100644 index 0000000..5c12451 --- /dev/null +++ b/proyectos/Muestra/image/controller-home.png diff --git a/proyectos/Muestra/image/controller-home_1.png b/proyectos/Muestra/image/controller-home_1.png Binary files differnew file mode 100644 index 0000000..5c12451 --- /dev/null +++ b/proyectos/Muestra/image/controller-home_1.png diff --git a/proyectos/Muestra/image/teleton.png b/proyectos/Muestra/image/teleton.png Binary files differnew file mode 100644 index 0000000..f2fc1a2 --- /dev/null +++ b/proyectos/Muestra/image/teleton.png diff --git a/proyectos/Muestra/project.xml b/proyectos/Muestra/project.xml new file mode 100644 index 0000000..ae26f0b --- /dev/null +++ b/proyectos/Muestra/project.xml @@ -0,0 +1,888 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<project name="Muestra"> + <voice defaultVoiceName=""/> + <initial_board>board_0</initial_board> + <board name="board_0"> + <model> + <attributes> + <attribute key="orderedCellList" type="list"> + <element>cell_0</element> + <element>cell_1</element> + <element>cell_16</element> + <element>cell_17</element> + <element>cell_2</element> + <element>cell_3</element> + </attribute> + <attribute key="backgroundColor" type="color">ff3465a4</attribute> + <attribute key="unorderedCellList" type="list"> + <element>cell_19</element> + </attribute> + <attribute key="imageResizeStyle" type="integer">0</attribute> + <attribute key="size" type="size"> + <width>1024.0</width> + <height>600.0</height> + </attribute> + </attributes> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_0</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\6522.png</attribute> + <attribute key="text" type="string">HOLA</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">Hola</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>11.0</x> + <y>28.0</y> + <width>190.0</width> + <height>192.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_1</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\6625_1.png</attribute> + <attribute key="text" type="string">¿CÓMO ESTÁS?</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">¿Cómo estás?</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>271.0</x> + <y>28.0</y> + <width>190.0</width> + <height>192.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="followingBoard" type="string">board_1</attribute> + <attribute key="id" type="string">cell_2</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2684.png</attribute> + <attribute key="text" type="string">ESTOY...</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">Yo estoy</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>519.0</x> + <y>305.0</y> + <width>202.0</width> + <height>185.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ff73d216</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="followingBoard" type="string">board_2</attribute> + <attribute key="id" type="string">cell_3</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\5441.png</attribute> + <attribute key="text" type="string">QUIERO...</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">Quiero</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>779.0</x> + <y>305.0</y> + <width>202.0</width> + <height>186.0</height> + </attribute> + <attribute key="backgroundColor" type="color">fffcaf3e</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_16</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\6632_1.png</attribute> + <attribute key="text" type="string">ME LLAMO...</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">Me llamo ántony</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>531.0</x> + <y>28.0</y> + <width>190.0</width> + <height>192.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_17</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\7061.png</attribute> + <attribute key="text" type="string">¿CÓMO TE LLAMAS?</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">¿Cómo te llamas?</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>791.0</x> + <y>28.0</y> + <width>190.0</width> + <height>192.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_19</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\teleton.png</attribute> + <attribute key="text" type="string"/> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">Teletón Uruguay</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>86.0</x> + <y>304.0</y> + <width>237.0</width> + <height>237.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + </model> + </board> + <board name="board_1"> + <model> + <attributes> + <attribute key="orderedCellList" type="list"> + <element>cell_4</element> + <element>cell_5</element> + <element>cell_12</element> + <element>cell_11</element> + <element>cell_6</element> + <element>cell_7</element> + <element>cell_13</element> + <element>cell_14</element> + <element>cell_8</element> + <element>cell_9</element> + <element>cell_10</element> + <element>controller_cell_0</element> + </attribute> + <attribute key="backgroundColor" type="color">ff73d216</attribute> + <attribute key="unorderedCellList" type="list"/> + <attribute key="imageResizeStyle" type="integer">0</attribute> + <attribute key="size" type="size"> + <width>1024.0</width> + <height>600.0</height> + </attribute> + </attributes> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_4</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\3250.png</attribute> + <attribute key="text" type="string">FELIZ</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">feliz</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>19.0</x> + <y>15.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_5</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2606.png</attribute> + <attribute key="text" type="string">TRISTE</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">triste</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>291.3333333333333</x> + <y>15.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_6</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\24735.png</attribute> + <attribute key="text" type="string">DIVERTIDO</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">Divertido</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>19.0</x> + <y>215.5</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_7</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2245.png</attribute> + <attribute key="text" type="string">ABURRIDO</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">Aburrido</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>291.3333333333333</x> + <y>215.5</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_8</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2401.png</attribute> + <attribute key="text" type="string">CON FRÍO</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">con frío</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>19.0</x> + <y>416.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_9</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2300.png</attribute> + <attribute key="text" type="string">CALOR</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">con calor</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>291.3333333333333</x> + <y>416.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_10</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2314.png</attribute> + <attribute key="text" type="string">SUEÑO</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">con sueño</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>563.6666666666666</x> + <y>416.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_11</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2367.png</attribute> + <attribute key="text" type="string">DOLOR</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">con dolor</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>836.0</x> + <y>15.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_12</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2374.png</attribute> + <attribute key="text" type="string">ENOJADO</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">enojado</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>563.6666666666666</x> + <y>15.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_13</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\4962.png</attribute> + <attribute key="text" type="string">HAMBRE</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">con hambre</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>563.6666666666666</x> + <y>215.5</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_14</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\8662.png</attribute> + <attribute key="text" type="string">PREOCUPADO</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">preocupado</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>836.0</x> + <y>215.5</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="controllerCell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">controller_cell_0</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\controller-home.png</attribute> + <attribute key="text" type="string">Inicio</attribute> + <attribute key="actionCode" type="integer">7</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>836.0</x> + <y>416.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + </attributes> + </component> + </model> + </board> + <board name="board_2"> + <model> + <attributes> + <attribute key="orderedCellList" type="list"> + <element>cell_4</element> + <element>cell_5</element> + <element>cell_12</element> + <element>cell_11</element> + <element>cell_6</element> + <element>cell_7</element> + <element>cell_13</element> + <element>cell_14</element> + <element>cell_8</element> + <element>cell_9</element> + <element>cell_10</element> + <element>controller_cell_0</element> + </attribute> + <attribute key="backgroundColor" type="color">fffcaf3e</attribute> + <attribute key="unorderedCellList" type="list"/> + <attribute key="imageResizeStyle" type="integer">0</attribute> + <attribute key="size" type="size"> + <width>1024.0</width> + <height>600.0</height> + </attribute> + </attributes> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_4</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2349.png</attribute> + <attribute key="text" type="string">COMER</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">comer</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>19.0</x> + <y>15.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_5</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2430.png</attribute> + <attribute key="text" type="string">IR AL BAÑO</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">ir al baño</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>291.3333333333333</x> + <y>15.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_6</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\6537.png</attribute> + <attribute key="text" type="string">JUGAR</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">jugar</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>19.0</x> + <y>215.5</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_7</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2587.png</attribute> + <attribute key="text" type="string">VER TELE</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">ver tele</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>291.3333333333333</x> + <y>215.5</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_8</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2586.png</attribute> + <attribute key="text" type="string">USAR EL TELÉFONO</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">usar el teléfono</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>19.0</x> + <y>416.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_9</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\5957_1.png</attribute> + <attribute key="text" type="string">ir a casa</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">ir a casa</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>291.3333333333333</x> + <y>416.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_10</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\25191.png</attribute> + <attribute key="text" type="string">LEER</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">leer</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>563.6666666666666</x> + <y>416.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_11</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2304_1.png</attribute> + <attribute key="text" type="string">DORMIR</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">dormir</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>836.0</x> + <y>15.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_12</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2370.png</attribute> + <attribute key="text" type="string">BAÑARME</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">bañarme</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>563.6666666666666</x> + <y>15.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_13</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\24795.png</attribute> + <attribute key="text" type="string">ESCUCHAR MUSICA</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">escuchar música</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>563.6666666666666</x> + <y>215.5</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="cell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">cell_14</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\2487.png</attribute> + <attribute key="text" type="string">COMPUTADORA</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="voiceText" type="string">usar la computadora</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>836.0</x> + <y>215.5</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + <attribute key="accumulated" type="boolean">false</attribute> + </attributes> + </component> + <component type="controllerCell"> + <attributes> + <attribute key="font" type="font"> + <family>Arial</family> + <size>12</size> + </attribute> + <attribute key="alternativeBorderColor" type="color">ffff0000</attribute> + <attribute key="id" type="string">controller_cell_0</attribute> + <attribute key="verticalTextPosition" type="integer">3</attribute> + <attribute key="alternativeLinewidth" type="integer">4</attribute> + <attribute key="linewidth" type="float">1.0</attribute> + <attribute key="icon" type="icon">image\controller-home_1.png</attribute> + <attribute key="text" type="string">Inicio</attribute> + <attribute key="actionCode" type="integer">7</attribute> + <attribute key="foregroundColor" type="color">ff000000</attribute> + <attribute key="bordercolor" type="color">ff000000</attribute> + <attribute key="bounds" type="rectangle"> + <x>836.0</x> + <y>416.0</y> + <width>168.0</width> + <height>158.0</height> + </attribute> + <attribute key="backgroundColor" type="color">ffffffff</attribute> + </attributes> + </component> + </model> + </board> +</project>
\ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..6ea61a6 --- /dev/null +++ b/setup.py @@ -0,0 +1,3 @@ +#!/usr/bin/python +from sugar.activity import bundlebuilder +bundlebuilder.start() diff --git a/speak/GoogleTTS.py b/speak/GoogleTTS.py new file mode 100644 index 0000000..79a0ae0 --- /dev/null +++ b/speak/GoogleTTS.py @@ -0,0 +1,33 @@ +#!/usr/bin/python +import os +import os.path +import string +import urllib2 +from threads.TInterpreterPlaySound import TInterpreterPlaySound + + +def __internetOn(): + try: + urllib2.urlopen('http://www.google.com',timeout=1) + return True + except urllib2.URLError as err: + pass + return False + +def intentar(projectName, texto): + texto = texto.split(" ") + texto = string.join(texto, "+") + + destino = os.path.join("proyectos", projectName, texto + ".mp3") + if os.path.exists(destino): #ya lo tengo, lo reproduzco + t = TInterpreterPlaySound([destino, ]) + t.start() + return True + else: #no lo tengo + if __internetOn(): #hay internet + os.system("wget -q -U Mozilla -O \"" + destino + "\" \"http://translate.google.com/translate_tts?ie=UTF-8&tl=es&q=" + texto + "\"") + t = TInterpreterPlaySound([destino, ]) + t.start() + return True + else: #no hay internet y no lo tengo + return False diff --git a/speak/__init__.py b/speak/__init__.py new file mode 100644 index 0000000..431e730 --- /dev/null +++ b/speak/__init__.py @@ -0,0 +1,2 @@ +__author__="rodripf" +__date__ ="$28/09/2012 12:37:08 PM$"
\ No newline at end of file diff --git a/speak/espeak_cmd.py b/speak/espeak_cmd.py new file mode 100644 index 0000000..26116dd --- /dev/null +++ b/speak/espeak_cmd.py @@ -0,0 +1,64 @@ +# Adapted from the activity Speak http://activities.sugarlabs.org/es-ES/sugar/addon/4038 +# Copyright (C) 2009, Aleksey Lim +# +# 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 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import re +import subprocess + +PITCH_MAX = 99 +RATE_MAX = 99 +PITCH_DEFAULT = PITCH_MAX/2 +RATE_DEFAULT = RATE_MAX/3 + +import voice + +def speak(text, rate=RATE_DEFAULT, pitch=PITCH_DEFAULT, + voice="default"): + + # espeak uses 80 to 370 + rate = 80 + (370-80) * int(rate) / 100 + + subprocess.call(["espeak", "-p", str(pitch), + "-s", str(rate), "-v", voice, text], + stdout=subprocess.PIPE) + +def voices(): + out = [] + result = subprocess.Popen(["espeak", "--voices"], + stdout=subprocess.PIPE).communicate()[0] + + for line in result.split('\n'): + m = re.match( + r'\s*\d+\s+([\w-]+)\s+([MF])\s+([\w_-]+)\s+(.+)', + line) + if not m: + continue + language, gender, name, stuff = m.groups() + if stuff.startswith('mb/') or \ + name in ('en-rhotic','english_rp', + 'english_wmids'): + # these voices don't produce sound + continue + out.append((language, name)) + + return out + +def hablar(texto): + speak(texto, voice = voice.defaultVoice().name) + + +if __name__ == "__main__": + hablar("hola")
\ No newline at end of file diff --git a/speak/new_main.py b/speak/new_main.py new file mode 100644 index 0000000..f46cac7 --- /dev/null +++ b/speak/new_main.py @@ -0,0 +1,15 @@ +#! /usr/bin/python + +# To change this template, choose Tools | Templates +# and open the template in the editor. + +import urllib2 + +def internet_on(): + try: + response=urllib2.urlopen('http://74.125.113.99',timeout=1) + return True + except urllib2.URLError as err: pass + return False + +print internet_on()
\ No newline at end of file diff --git a/speak/voice.py b/speak/voice.py new file mode 100644 index 0000000..0cf2b8d --- /dev/null +++ b/speak/voice.py @@ -0,0 +1,169 @@ +# Adapted from the activity Speak http://activities.sugarlabs.org/es-ES/sugar/addon/4038 +# Copyright (C) 2008 Joshua Minor +# +# 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 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import re +import os +from gettext import gettext as _ + +import espeak_cmd as espeak + +import logging +logger = logging.getLogger('speak') + + + +# Lets trick gettext into generating entries +# for the voice names we expect espeak to have +# If espeak actually has new or different names +# then they won't get translated, but they +# should still show up in the interface. +expectedVoiceNames = [ + _("Brazil"), + _("Swedish"), + _("Icelandic"), + _("Romanian"), + _("Swahili"), + _("Hindi"), + _("Dutch"), + _("Latin"), + _("Hungarian"), + _("Macedonian"), + _("Welsh"), + _("French"), + _("Norwegian"), + _("Russian"), + _("Afrikaans"), + _("Finnish"), + _("Default"), + _("Cantonese"), + _("Scottish"), + _("Greek"), + _("Vietnam"), + _("English"), + _("Lancashire"), + _("Italian"), + _("Portugal"), + _("German"), + _("Whisper"), + _("Croatian"), + _("Czech"), + _("Slovak"), + _("Spanish"), + _("Polish"), + _("Esperanto") +] + +_allVoices = {} +_defaultVoice = None + + +class Voice: + def __init__(self, language, name): + self.language = language + self.name = name + friendlyname = name + friendlyname = friendlyname.replace('-test', '') + friendlyname = friendlyname.replace('_test', '') + friendlyname = friendlyname.replace('en-', '') + friendlyname = friendlyname.replace('english-wisper', 'whisper') + friendlyname = friendlyname.replace('english-us', 'us') + + friendlynameRP = name # friendlyname for RP + friendlynameRP = friendlynameRP.replace('english_rp', 'rp') + friendlynameRP = friendlynameRP.replace('english_wmids', 'wmids') + + parts = re.split('[ _-]', friendlyname) + partsRP = re.split('[ _]', friendlynameRP) # RE for english_RP + self.short_name = _(parts[0].capitalize()) + self.friendlyname = ' '.join([self.short_name] + parts[1:]) + + friendlynameRP1 = None + if friendlynameRP == 'rp': + + friendlynameRP1 = 'English (Received Pronunciation)' + self.friendlyname = 'English (Received Pronunciation)' + + friendlynameUS = None + if friendlyname == 'us': + friendlynameUS = 'English (USA)' + self.friendlyname = 'English (USA)' + + friendlynameWMIDS = None + if friendlynameRP == 'wmids': + friendlynameWMIDS = 'English (West Midlands)' + self.friendlyname = 'English (West Midlands)' + + def __cmp__(self, other): + return cmp(self.friendlyname, other.friendlyname if other else '') + + +def allVoices(): + if _allVoices: + return _allVoices + + for language, name in espeak.voices(): + voice = Voice(language, name) + _allVoices[voice.friendlyname] = voice + + return _allVoices + + +def by_name(name): + return allVoices().get(name, defaultVoice()) + + +def defaultVoice(): + """Try to figure out the default voice, from the current locale ($LANG). + Fall back to espeak's voice called Default.""" + + global _defaultVoice + + if _defaultVoice: + return _defaultVoice + + voices = allVoices() + + def fit(a, b): + "Compare two language ids to see if they are similar." + as_ = re.split(r'[^a-z]+', a.lower()) + bs = re.split(r'[^a-z]+', b.lower()) + for count in range(0, min(len(as_), len(bs))): + if as_[count] != bs[count]: + count -= 1 + break + return count + try: + lang = os.environ["LANG"] + except: + lang = "" + + best = voices[_("Default")] + for voice in voices.values(): + voiceMetric = fit(voice.language, lang) + bestMetric = fit(best.language, lang) + if lang == 'en_AU.UTF-8': + if voice.friendlyname == 'English (Received Pronunciation)': + best = voice + break + if voiceMetric > bestMetric: + best = voice + + print "Best voice for LANG %s seems to be %s %s" % (lang, + best.language, + best.friendlyname) + _defaultVoice = best + return best diff --git a/threads/TInterpreterPlaySound.py b/threads/TInterpreterPlaySound.py new file mode 100644 index 0000000..f3edf58 --- /dev/null +++ b/threads/TInterpreterPlaySound.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +import os +if os.name != "nt": + import pygst + pygst.require("0.10") + import gst + +import threading +import os + +class TInterpreterPlaySound (threading.Thread): + player = None + def __init__(self, sounds): + super(TInterpreterPlaySound, self).__init__() + self.sounds = [] + for s in sounds: + self.sounds.append("file://" + os.path.abspath(s)) + + if TInterpreterPlaySound.player == None: + TInterpreterPlaySound.player = gst.element_factory_make("playbin", "player") + + bus = TInterpreterPlaySound.player.get_bus() + bus.add_signal_watch() + bus.connect("message", self.onMessage) + + def onMessage(self, bus, message): + t = message.type + if t == gst.MESSAGE_EOS: + self.player.set_state(gst.STATE_NULL) + elif t == gst.MESSAGE_ERROR: + self.player.set_state(gst.STATE_NULL) + err, debug = message.parse_error() + print "Error: %s" % err, debug + + + def run (self): + #set the uri + print self.sounds[0] + TInterpreterPlaySound.player.set_property('uri', self.sounds[0]) + #start playing + TInterpreterPlaySound.player.set_state(gst.STATE_PLAYING) + +# #listen for tags on the message bus; tag event might be called more than once +# bus = player.get_bus() +# bus.enable_sync_message_emission() +# bus.add_signal_watch() +# bus.connect('message::tag', on_tag) diff --git a/threads/__init__.py b/threads/__init__.py new file mode 100644 index 0000000..dbaa255 --- /dev/null +++ b/threads/__init__.py @@ -0,0 +1,2 @@ +__author__="rodripf" +__date__ ="$24/09/2012 11:56:25 AM$"
\ No newline at end of file diff --git a/util/About.py b/util/About.py new file mode 100644 index 0000000..122067b --- /dev/null +++ b/util/About.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import gtk + +class About: + + + def show(self): + #base this on a message dialog + dialog = gtk.MessageDialog( + None, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_QUESTION, + gtk.BUTTONS_OK, + None) + dialog.set_markup("<b><big>TIXO</big></b>\n\nDepartamento de Ingenieria - rodripf\nFundacion Teleton - 2011") + + dialog.show_all() + #go go go + dialog.run() + dialog.destroy() + + + +if __name__ == '__main__': + d = About() + print d.show() + gtk.main() diff --git a/util/About.py~ b/util/About.py~ new file mode 100644 index 0000000..78d47b8 --- /dev/null +++ b/util/About.py~ @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import gtk + +class About: + + + def show(self): + #base this on a message dialog + dialog = gtk.MessageDialog( + None, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + gtk.MESSAGE_QUESTION, + gtk.BUTTONS_OK, + None) + dialog.set_markup("<b><big>Mateton</big></b>\n\nDepartamento de Ingenieria - rodripf\nFundacion Teleton - 2011") + + dialog.show_all() + #go go go + dialog.run() + dialog.destroy() + + + +if __name__ == '__main__': + d = About() + print d.show() + gtk.main()
\ No newline at end of file diff --git a/util/ChooseProject.py b/util/ChooseProject.py new file mode 100644 index 0000000..20469b5 --- /dev/null +++ b/util/ChooseProject.py @@ -0,0 +1,116 @@ +import os.path +# -*- coding: utf-8 -*- +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +__author__ = "rodripf" +__date__ = "$01/02/2012 10:45:52 AM$" + +import os +import pygtk +pygtk.require('2.0') +import gtk +import string + +class ChooseProject: + def limpiarNombres(self, text): + tmp = string.replace(text, "_", " ") + return string.replace(tmp, ".jpg", "") + + def __init__(self, dir): + self.onAbrir = [] + # Create a new window + self.window = gtk.Dialog("Abrir") + + self.window.set_size_request(400, 500) + + self.window.connect("delete_event", self.deleteEvent) + self.window.set_position(gtk.WIN_POS_CENTER) + + self.treestore = gtk.TreeStore(str, str) + + #dir = "./" + car = os.listdir(dir) + print car + for e in car: + if(os.path.isdir(os.path.join(dir, e))): + self.treestore.append(None, [e,e]) + + + self.treeview = gtk.TreeView(self.treestore) + self.tvcolumn = gtk.TreeViewColumn() + self.treeview.append_column(self.tvcolumn) + self.cell = gtk.CellRendererText() + self.tvcolumn.pack_start(self.cell, True) + + # set the cell "text" attribute to column 0 - retrieve text + # from that column in treestore + self.tvcolumn.add_attribute(self.cell, 'text', 0) + + # make it searchable + self.treeview.set_search_column(0) + + # Allow sorting on the column + self.tvcolumn.set_sort_column_id(0) + + self.window.vbox.add(self.treeview) + + abrir = gtk.Button("Abrir") + abrir.connect("clicked", self.abrirCB) + self.window.action_area.pack_start(abrir, True, True, 0) + + + cancelar = gtk.Button("Cancelar") + cancelar.connect("clicked", self.cancelarCB) + self.window.action_area.pack_start(cancelar, True, True, 0) + + def addOnAbrirListener(self, action): + self.onAbrir.append(action) + + def show(self): + self.window.show_all() + + def abrirCB(self, b): + treeselection = self.treeview.get_selection() + treeselection.set_mode(gtk.SELECTION_SINGLE) + (model, iter) = treeselection.get_selected() + + d = self.treestore.get_value(iter, 1) + + self.window.destroy() + for f in self.onAbrir: + f(d) + + return d + + + def cancelarCB(self, b): + self.window.destroy() + + def deleteEvent(self, widget, event, data=None): + self.window.destroy() +def main(): + gtk.main() + +if __name__ == "__main__": + tvexample = ChooseProject("../proyectos") + tvexample.show() + main() +
\ No newline at end of file diff --git a/util/ControlFactory.py b/util/ControlFactory.py new file mode 100644 index 0000000..8818925 --- /dev/null +++ b/util/ControlFactory.py @@ -0,0 +1,82 @@ +##########################Control Factory######################################## +# Control Factory extracted from Abacus, an activity by Walter Bender published # +# under the GNU General Public License v3 # +# Copyright (c) 2010-11, Walter Bender # +# http://activities.sugarlabs.org/es-ES/sugar/addon/4293 # +################################################################################# + +import gtk +from sugar.graphics.toolbutton import ToolButton + +def buttonFactory(icon_name, toolbar, callback, cb_arg=None, tooltip=None, + accelerator=None): + '''Factory for making toolbar buttons''' + button = ToolButton(icon_name) + if tooltip is not None: + button.set_tooltip(tooltip) + button.props.sensitive = True + if accelerator is not None: + button.props.accelerator = accelerator + if cb_arg is None: + button.connect('clicked', callback) + else: + button.connect('clicked', cb_arg) + if hasattr(toolbar, 'insert'): # the main toolbar + toolbar.insert(button, -1) + else: # or a secondary toolbar + toolbar.props.page.insert(button, -1) + button.show() + return button + + +def radioFactory(icon_name, toolbar, callback, cb_arg=None, + tooltip=None, group=None): + ''' Add a radio button to a toolbar ''' + button = RadioToolButton(group=group) + button.set_named_icon(icon_name) + if tooltip is not None: + button.set_tooltip(tooltip) + if cb_arg is None: + button.connect('clicked', callback) + else: + button.connect('clicked', callback, cb_arg) + if hasattr(toolbar, 'insert'): # the main toolbar + toolbar.insert(button, -1) + else: # or a secondary toolbar + toolbar.props.page.insert(button, -1) + button.show() + return button + + +def labelFactory(label_text, toolbar): + ''' Factory for adding a label to a toolbar ''' + label = gtk.Label(label_text) + label.set_line_wrap(True) + label.show() + toolitem = gtk.ToolItem() + toolitem.add(label) + toolbar.insert(toolitem, -1) + toolitem.show() + return label + + +def spinFactory(default, min, max, callback, toolbar): + spin_adj = gtk.Adjustment(default, min, max, 1, 32, 0) + spin = gtk.SpinButton(spin_adj, 0, 0) + spin_id = spin.connect('value-changed', callback) + spin.set_numeric(True) + spin.show() + toolitem = gtk.ToolItem() + toolitem.add(spin) + toolbar.insert(toolitem, -1) + toolitem.show() + return spin + + +def separatorFactory(toolbar, expand=False, visible=True): + ''' add a separator to a toolbar ''' + separator = gtk.SeparatorToolItem() + separator.props.draw = visible + separator.set_expand(expand) + toolbar.insert(separator, -1) + separator.show()
\ No newline at end of file diff --git a/util/OpenNewProject.py b/util/OpenNewProject.py new file mode 100644 index 0000000..c80bb1c --- /dev/null +++ b/util/OpenNewProject.py @@ -0,0 +1,54 @@ +import os +# Tixo - A Sugar interpreter for TICO projects +# Copyright (C) 2012 Rodrigo Perez Fulloni +# Fundacion Teleton Uruguay - Departamento de Ingenieria +# +# Based on TICO Project: http://www.proyectotico.com/ +# +# +# 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. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +__author__="Rodrigo" +__date__ ="$27-sep-2012 12:59:02$" + + +from zipfile import * +import os.path + + +class OpenNewProject: + PROYECTOS = "proyectos" + + def __init__(self, file, proyName): + proyName = os.path.splitext(proyName)[0] + destFolder = os.path.join(self.PROYECTOS, proyName) + if os.path.exists(destFolder): + raise Exception("El proyecto ya existe.") + else: + if is_zipfile(file): + os.makedirs(destFolder) + zip = ZipFile(file, 'r') + zip.extractall(destFolder) + self.carpeta = proyName + else: + raise Exception("El archivo no es valido o esta corrupto.") + + def getProjectName(self): + return self.carpeta + +if __name__ == "__main__": + try: + o = OpenNewProject("pruebaControl.tco", "pruebaControl") + except Exception as ex: + print ex diff --git a/util/Singleton.py b/util/Singleton.py new file mode 100644 index 0000000..c161866 --- /dev/null +++ b/util/Singleton.py @@ -0,0 +1,16 @@ +class Singleton(object): + _instance = None + def __new__(cls, * args, ** kwargs): + if not cls._instance: + cls._instance = super(Singleton, cls).__new__( + cls, * args, ** kwargs) + return cls._instance + + +if __name__ == '__main__': + s1 = Singleton() + s2 = Singleton() + if s1 == s2: + print "Same" + else: + print "Different"
\ No newline at end of file diff --git a/util/__init__.py b/util/__init__.py new file mode 100644 index 0000000..102ba58 --- /dev/null +++ b/util/__init__.py @@ -0,0 +1,2 @@ +__author__="Rodrigo" +__date__ ="$27-sep-2012 12:58:29$"
\ No newline at end of file |