File: Converter.py

package info (click to toggle)
jython 2.2.1-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 18,708 kB
  • ctags: 46,200
  • sloc: python: 150,937; java: 86,267; xml: 1,080; perl: 104; sh: 93; makefile: 81; ansic: 24
file content (113 lines) | stat: -rw-r--r-- 2,651 bytes parent folder | download | duplicates (7)
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())