1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
"""A translation of an example from the Java Tutorial
http://java.sun.com/docs/books/tutorial/
This example converts between metric and english units
"""
from java import awt
from java.applet import Applet
from java.awt.event import ActionListener, ItemListener, AdjustmentListener
from pawt import GridBag
basicUnits = [['Metric System', [('Centimeters', 0.01),
('Meters', 1.0),
('Kilometers', 1000.0)]],
['U.S. System', [('Inches', 0.0254),
('Feet', 0.305),
('Yards', 0.914),
('Miles', 1613.0)]]
]
class SimpleBorder:
def paint(self, g):
g.drawRect(0,0,self.size.width-1, self.size.height-1)
def getInsets(self):
return awt.Insets(5,5,5,5)
class Converter(Applet, SimpleBorder):
def init(self, unitSets=basicUnits):
self.setLayout(awt.GridLayout(2,0,5,5))
self.panels = []
for name, units in unitSets:
panel = ConversionPanel(name, units, self)
self.panels.append(panel)
self.add(panel)
def convert(self, master):
value = master.getValue()
multiplier = master.getMultiplier()
for panel in self.panels:
if panel is not master:
panel.setValue(multiplier/panel.getMultiplier()*value)
class ConversionPanel(awt.Panel, SimpleBorder,
ActionListener, AdjustmentListener, ItemListener):
max, block = 10000, 100
def __init__(self, title, units, controller):
self.units = units
self.controller = controller
bag = GridBag(self, fill='HORIZONTAL')
label = awt.Label(title, awt.Label.CENTER)
bag.addRow(label)
self.text = awt.TextField('0', 10, actionListener=self)
bag.add(self.text, weightx=1.0)
self.chooser = awt.Choice(itemListener=self)
for name, multiplier in units:
self.chooser.add(name)
bag.addRow(self.chooser)
self.slider = awt.Scrollbar(awt.Scrollbar.HORIZONTAL,
maximum=self.max+10,
blockIncrement=self.block,
adjustmentListener=self)
bag.add(self.slider)
def getMultiplier(self):
return self.units[self.chooser.selectedIndex][1]
def getValue(self):
try:
return float(self.text.getText())
except:
return 0.0
def actionPerformed(self, e):
self.setSlider(self.getValue())
self.controller.convert(self)
def itemStateChanged(self, e):
self.controller.convert(self)
def adjustmentValueChanged(self, e):
self.text.setText(str(e.getValue()))
self.controller.convert(self)
def setValue(self, v):
self.text.setText(str(v))
self.setSlider(v)
def setSlider(self, f):
if f > self.max:
f = self.max
if f < 0:
f = 0
self.slider.value = int(f)
if __name__ == '__main__':
import pawt
pawt.test(Converter())
|