# 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