• Facebook
  • Twitter
  • Reddit
  • StumbleUpon
  • Digg
  • email

# Prototype definition file written out by PataPata version Version 0.2.01
from PataPataSupport import *
 
def define_prototype(world):
    """returns a world of morphs"""
 
    world.worldLibraries = [world.newWorldFromFile("WorldCommon.py")]
 
    # THE WORLD ITSELF
    class CurrencyConversion: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class MorseCodeConversion: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class TemperatureConversion: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class world("World"):
        __metaclass__ = world.buildPrototype
        currencyConversion = CurrencyConversion
        morseCodeConversion = MorseCodeConversion
        temperatureConversion = TemperatureConversion
        changeUnfinishedWarning = 1
        sourceFileName = 'WorldConversionsSampleTK.py'
        widget = None
        worldPreambleCodeForImports = 'from PataPataSupport import *\n'
        writer = None
 
    # WORLD GLOBALS
    class Conversion:
        __metaclass__ = world.buildPrototype
        def init(self, components):
            pass
            return self
 
        def toDown(self, value):
            pass
 
        def toUp(self, value):
            pass
 
    world.worldGlobals['Conversion'] = Conversion
 
    # WORLD MORPHS
    class staticlineH("StaticLine"):
        __metaclass__ = world.buildPrototype
        name = 'staticlineH'
        position = (0, 0)
        size = (400, 1)
        widget = None
 
    class labelUp("StaticText"):
        __metaclass__ = world.buildPrototype
        name = 'labelUp'
        position = (5, 5)
        size = (70, 13)
        text = 'Fahrenheit'
        widget = None
 
    class labelDown("StaticText"):
        __metaclass__ = world.buildPrototype
        name = 'labelDown'
        position = (5, 165)
        size = (49, 13)
        text = 'Celsius'
        widget = None
 
    class field1("TextArea"):
        __metaclass__ = world.buildPrototype
        name = 'field1'
        position = (5, 25)
        size = (390, 100)
        text = ''
        widget = None
 
    class field2("TextArea"):
        __metaclass__ = world.buildPrototype
        name = 'field2'
        position = (5, 190)
        size = (390, 100)
        text = ''
        widget = None
 
    class btnConvertUp("Button"):
        __metaclass__ = world.buildPrototype
        name = 'btnConvertUp'
        position = (175, 160)
        size = (200, 20)
        text = 'Celsius to Fahrenheit'
        widget = None
        def mouseClick(self):
            self.components.field1.text = self.containingWindow().conversion.toUp(self.components.field2.text)
 
 
    class btnConvertDown("Button"):
        __metaclass__ = world.buildPrototype
        name = 'btnConvertDown'
        position = (175, 130)
        size = (200, 20)
        text = 'Fahrenheit to Celsius'
        widget = None
        def mouseClick(self):
            self.components.field2.text = self.containingWindow().conversion.toDown(self.components.field1.text)
 
 
    class menubar: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class window("Window"):
        __metaclass__ = world.buildPrototype
        _layoutNeedsUpdating = 0
        conversion = TemperatureConversion
        currentPosition = None
        downPosition = None
        draggedWindow = None
        inspectorForViewer = None
        inspectorWorld = None
        isMetaEvent = 0
        menuBar = menubar
        morphs = []
        name = 'window'
        originalDraggedMorphOffset = None
        position = (0, 0)
        previousPosition = None
        size = (401, 304)
        upPosition = None
        widget = None
        def on_menuConvertCurrency_select(self):
            "We only enable this option if the SOAP module is installed"
            try:
                import SOAP
            except ImportError:
                self.menuBar.setChecked('menuConvertCurrency', 0) 
                self.alertUser("SOAP is needed for currency conversion.", "Missing library")
                #self.menuBar.setEnabled('menuConvertCurrency', 0)
                return
            self.conversion = self.world.currencyConversion(self.components)
 
        def on_menuConvertMorseCode_select(self):
            self.conversion = self.world.morseCodeConversion.init(self.components)
 
        def on_menuConvertTemperature_select(self):
            self.conversion = self.world.temperatureConversion.init(self.components)
 
    window.addMorph(staticlineH)
    window.addMorph(labelUp)
    window.addMorph(labelDown)
    window.addMorph(field1)
    window.addMorph(field2)
    window.addMorph(btnConvertUp)
    window.addMorph(btnConvertDown)
    world.addMorph(window)
 
    class CurrencyConversion("Conversion"):
        __metaclass__ = world.buildPrototype
        name = 'CurrencyConversion'
        def convert(self):
            import SOAP
            server = SOAP.SOAPProxy('http://services.xmethods.net/soap', \
                            namespace='urn:xmethods-CurrencyExchange')
            try:
                dummy = float(txt)
            except:
                return "Cannot convert anything but numbers"
            try:
                rate = server.getRate(fromCur, toCur)
            except:
                return "Error getting exchange rate"
            return str(float(txt) * rate)
 
        def convertToAus(self):
            return self.convert('US', 'Australia', txt)
 
        def convertToUS(self):
            return self.convert('Australia', 'US', txt)
 
        def init(self, components):
            components.labelUp.text = 'Aussie Dollars'
            components.btnConvertUp.label = 'US Dollars to Aussie Dollars'
            components.btnConvertDown.label = 'Aussie Dollars to US Dollars'
            components.labelDown.text = 'US Dollars'
            return self
 
        def toDown(self, value):
            return self.convertToUS(txt)
 
        def toUp(self, value):
            return self.convertToAus(txt)
 
 
    class MorseCodeConversion("Conversion"):
        __metaclass__ = world.buildPrototype
        morseAlphabet = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..']
        name = 'MorseCodeConversion'
        def convertFromMorse(self, txt):
            a = ord('A')
            converted = ''
            words = txt.split('  ')
            for w in words:
                letters = w.split(' ')
                for c in letters:
                    if c == '':
                        continue
                    try:
                        ordC = self.morseAlphabet.index(c)
                    except:
                        return converted + "\n\nmorse out of bounds error, unable to complete conversion"
                    converted += chr(ordC + a)
                converted += ' '
            return converted
 
        def convertToMorse(self, txt):
            a = ord('A')
            z = ord('Z')
            converted = ''
            for c in txt[:]:
                ordC = ord(c.upper())
                if c == ' ':
                    # three spaces between words
                    # when you include the space after each character
                    converted = converted + '  '
                elif ordC < a or ordC > z:
                    return converted + "\n\ncharacter out of bounds, unable to complete conversion"
                else:
                    converted += self.morseAlphabet[ordC - a] + ' '
            return converted[:-1]
 
        def init(self, components):
            """
            A B C D E F G
            H I J K L M N
            O P Q R S T U
            V W X Y Z
            """
            self.morseAlphabet = ['.-', '-...', '-.-.', '-..', '.', '..-.', '--.',
                                  '....', '..', '.---', '-.-', '.-..', '--', '-.',
                                  '---', '.--.', '--.-', '.-.', '...', '-', '..-',
                                  '...-', '.--', '-..-', '-.--', '--..']
 
            components.labelUp.text = 'English'
            components.btnConvertUp.label = 'Morse code to English'
            components.btnConvertDown.label = 'English to Morse code'
            components.labelDown.text = 'Morse code'
            return self
 
        def toDown(self, value):
            return self.convertToMorse(value)
 
        def toUp(self, value):
            return self.convertFromMorse(value)
 
 
    class TemperatureConversion("Conversion"):
        __metaclass__ = world.buildPrototype
        name = 'TemperatureConversion'
        def CelsiusToFahrenheit(self, degrees):
            return degrees * 9.0 / 5.0 + 32.0
 
        def FahrenheitToCelsius(self, degrees):
            return (degrees - 32.0) / 9.0 * 5.0
 
        def init(self, components):
            components.labelUp.text = 'Fahrenheit'
            components.btnConvertUp.label = 'Celsius to Fahrenheit'
            components.btnConvertDown.label = 'Fahrenheit to Celsius'
            components.labelDown.text = 'Celsius'
            return self
 
        def toDown(self, value):
            return str(self.FahrenheitToCelsius(float(value)))
 
        def toUp(self, value):
            return str(self.CelsiusToFahrenheit(float(value)))
 
 
    class mnuFile: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class mnuConvert: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class menubar("Menu"):
        __metaclass__ = world.buildPrototype
        items = [mnuFile, mnuConvert]
        name = 'menubar'
 
    class menuConvertMorseCode: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class menuConvertTemperature: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class menuConvertCurrency: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class mnuConvert("Menu"):
        __metaclass__ = world.buildPrototype
        items = [menuConvertMorseCode, menuConvertTemperature, menuConvertCurrency]
        label = '&Convert'
        name = 'mnuConvert'
 
    class menuFileExit: __metaclass__ = world.buildPrototype # FORWARD REFERENCE
    class mnuFile("Menu"):
        __metaclass__ = world.buildPrototype
        items = [menuFileExit]
        label = '&File'
        name = 'mnuFile'
 
    class menuConvertCurrency("Menu"):
        __metaclass__ = world.buildPrototype
        _variable = None
        checkable = 1
        checked = False
        command = 'on_menuConvertCurrency_select'
        items = []
        label = 'Currency'
        name = 'menuConvertCurrency'
        radioGroup = 'conversions'
        value = 'Currency'
 
    class menuConvertMorseCode("Menu"):
        __metaclass__ = world.buildPrototype
        _variable = None
        checkable = 1
        checked = False
        command = 'on_menuConvertMorseCode_select'
        items = []
        label = 'Morse Code'
        name = 'menuConvertMorseCode'
        radioGroup = 'conversions'
        value = 'morse code'
 
    class menuConvertTemperature("Menu"):
        __metaclass__ = world.buildPrototype
        _variable = None
        checkable = 1
        checked = True
        command = 'on_menuConvertTemperature_select'
        items = []
        label = 'Temperature'
        name = 'menuConvertTemperature'
        radioGroup = 'conversions'
        value = 'Temperature'
 
    class menuFileExit("Menu"):
        __metaclass__ = world.buildPrototype
        command = 'exit'
        items = []
        label = 'E&xit'
        name = 'menuFileExit'
 
    return world