annotate Lib/lib-stdwin/Sliders.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents 1d06b1499eb9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Module 'Sliders'
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
2
28
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 import stdwin
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 from stdwinevents import *
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 import rect
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
7 from Buttons import *
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
8 from HVSplit import HSplit
28
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 # Field indices in event detail
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 #
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 _HV = 0
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 _CLICKS = 1
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 _BUTTON = 2
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 _MASK = 3
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
19 # DragSlider is the simplest possible slider.
28
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # It looks like a button but dragging the mouse left or right
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 # changes the controlled value.
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
22 # It does not support any of the triggers or hooks defined by Buttons,
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
23 # but defines its own setval_trigger and setval_hook.
28
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 #
531
8331076cfe15 New class syntax.
Guido van Rossum <guido@python.org>
parents: 350
diff changeset
25 class DragSliderReactivity(BaseReactivity):
28
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 #
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 def mouse_down(self, detail):
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 h, v = hv = detail[_HV]
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 if self.enabled and self.mousetest(hv):
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 self.anchor = h
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 self.oldval = self.val
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 self.active = 1
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 #
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 def mouse_move(self, detail):
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 if self.active:
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 h, v = detail[_HV]
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 self.setval(self.oldval + (h - self.anchor))
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 #
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def mouse_up(self, detail):
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 if self.active:
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 h, v = detail[_HV]
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 self.setval(self.oldval + (h - self.anchor))
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 self.active = 0
e5c50c688117 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 #
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
45
531
8331076cfe15 New class syntax.
Guido van Rossum <guido@python.org>
parents: 350
diff changeset
46 class DragSliderAppearance(ButtonAppearance):
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
47 #
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
48 # INVARIANTS maintained by the setval method:
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
49 #
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
50 # self.min <= self.val <= self.max
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
51 # self.text = self.pretext + `self.val` + self.postext
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
52 #
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
53 # (Notice that unlike Python ranges, the end point belongs
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
54 # to the range.)
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
55 #
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
56 def init_appearance(self):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
57 ButtonAppearance.init_appearance(self)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
58 self.min = 0
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
59 self.val = 0
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
60 self.max = 100
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
61 self.hook = 0
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
62 self.pretext = self.postext = ''
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
63 self.recalctext()
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
64 #
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
65 # The 'get*' and 'set*' methods belong to the generic slider interface
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
66 #
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
67 def getval(self): return self.val
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
68 #
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
69 def sethook(self, hook):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
70 self.hook = hook
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
71 #
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
72 def setminvalmax(self, min, val, max):
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
73 self.min = min
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
74 self.max = max
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
75 self.setval(val)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
76 #
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
77 def settexts(self, pretext, postext):
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
78 self.pretext = pretext
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
79 self.postext = postext
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
80 self.recalctext()
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
81 #
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
82 def setval(self, val):
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
83 val = min(self.max, max(self.min, val))
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
84 if val <> self.val:
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
85 self.val = val
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
86 self.recalctext()
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
87 self.trigger()
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
88 #
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
89 def trigger(self):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
90 if self.hook:
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
91 self.hook(self)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
92 #
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
93 def recalctext(self):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
94 self.settext(self.pretext + `self.val` + self.postext)
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
95 #
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
96
531
8331076cfe15 New class syntax.
Guido van Rossum <guido@python.org>
parents: 350
diff changeset
97 class DragSlider(DragSliderReactivity, DragSliderAppearance, Define):
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
98 def definetext(self, parent, text):
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
99 raise RuntimeError, 'DragSlider.definetext() not supported'
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
100
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
101
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
102 # Auxiliary class for PushButton incorporated in ComplexSlider
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
103 #
531
8331076cfe15 New class syntax.
Guido van Rossum <guido@python.org>
parents: 350
diff changeset
104 class _StepButton(PushButton):
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
105 def define(self, parent):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
106 self = PushButton.define(self, parent)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
107 self.step = 0
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
108 return self
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
109 def setstep(self, step):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
110 self.step = step
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
111 def definetextstep(self, parent, text, step):
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
112 self = self.definetext(parent, text)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
113 self.setstep(step)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
114 return self
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
115 def init_reactivity(self):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
116 PushButton.init_reactivity(self)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
117 self.parent.need_timer(self)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
118 def step_trigger(self):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
119 self.parent.setval(self.parent.getval() + self.step)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
120 def down_trigger(self):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
121 self.step_trigger()
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
122 self.parent.settimer(5)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
123 def timer(self):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
124 if self.hilited:
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
125 self.step_trigger()
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
126 if self.active:
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
127 self.parent.settimer(1)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
128
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
129
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
130 # A complex slider is an HSplit initialized to three buttons:
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
131 # one to step down, a dragslider, and one to step up.
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
132 #
531
8331076cfe15 New class syntax.
Guido van Rossum <guido@python.org>
parents: 350
diff changeset
133 class ComplexSlider(HSplit):
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
134 #
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
135 # Override Slider define() method
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
136 #
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
137 def define(self, parent):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
138 self = self.create(parent) # HSplit
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
139 #
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
140 self.downbutton = _StepButton().definetextstep(self, '-', -1)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
141 self.dragbutton = DragSlider().define(self)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
142 self.upbutton = _StepButton().definetextstep(self, '+', 1)
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
143 #
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
144 return self
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
145 #
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
146 # Override HSplit methods
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
147 #
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
148 def getminsize(self, m, (width, height)):
350
3dfaa093d96e minsize --> getminsize; new implementation of getminsize
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
149 w1, h1 = self.downbutton.getminsize(m, (0, height))
3dfaa093d96e minsize --> getminsize; new implementation of getminsize
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
150 w3, h3 = self.upbutton.getminsize(m, (0, height))
3dfaa093d96e minsize --> getminsize; new implementation of getminsize
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
151 w1 = max(w1, h1)
3dfaa093d96e minsize --> getminsize; new implementation of getminsize
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
152 w3 = max(w3, h3)
3dfaa093d96e minsize --> getminsize; new implementation of getminsize
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
153 w2, h2 = self.dragbutton.getminsize(m, (width-w1-w3, height))
3dfaa093d96e minsize --> getminsize; new implementation of getminsize
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
154 return w1+w2+w3, max(h1, h2, h3)
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
155 #
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
156 def setbounds(self, bounds):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
157 (left, top), (right, bottom) = self.bounds = bounds
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
158 size = bottom - top
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
159 self.downbutton.setbounds(((left, top), (left+size, bottom)))
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
160 self.dragbutton.setbounds(((left+size, top), \
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
161 (right-size, bottom)))
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
162 self.upbutton.setbounds(((right-size, top), (right, bottom)))
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
163 #
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
164 # Pass other Slider methods on to dragbutton
32
b643eade6544 Generalized.
Guido van Rossum <guido@python.org>
parents: 28
diff changeset
165 #
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
166 def getval(self): return self.dragbutton.getval()
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
167 def sethook(self, hook): self.dragbutton.sethook(hook)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
168 def setminvalmax(self, args): self.dragbutton.setminvalmax(args)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
169 def settexts(self, args): self.dragbutton.settexts(args)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
170 def setval(self, val): self.dragbutton.setval(val)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
171 def enable(self, flag):
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
172 self.downbutton.enable(flag)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
173 self.dragbutton.enable(flag)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 54
diff changeset
174 self.upbutton.enable(flag)