annotate light8/Subs.py @ 28:b0342f9ee328

attempts to save params, better loading behavior
author dmcc
date Sun, 07 Jul 2002 10:17:00 +0000
parents dea1e1d6d439
children f595fdd4c548
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 from Patch import *
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 from time import time
4
f974a462133f added light8 from the posted light8-1.0.tgz
drewp
parents: 0
diff changeset
3 from Tkinter import *
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 from types import TupleType
45b12307c695 Initial revision
drewp
parents:
diff changeset
5
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 stdfont = ('Arial', 8)
45b12307c695 Initial revision
drewp
parents:
diff changeset
7
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 class Param: # abstract
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 def get_value(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 pass
28
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
11 def set_value(self, v):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 pass
28
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
15 def __getstate__(self):
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
16 print "get_state:", self.get_value()
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
17 return {'value' : self.get_value()}
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
18 def __setstate__(self, dict):
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
19 print "set_state to", dict
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
20 self.value = StringVar()
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
21 self.set_value(dict['value'])
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
22
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 class CheckboxParam(Param):
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 def __init__(self, initial=0):
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 self.value = IntVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 self.value.set(initial)
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 def get_value(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 return self.value.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 self.c = Checkbutton(frame, variable=self.value)
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 self.c.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
32
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 class SliderParam(Param):
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 def __init__(self, range=(0, 1), res=0.01, initial=0, orient='v',
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 **options):
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.value = DoubleVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 self.value.set(initial)
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 self.options = {'res' : res, 'to' : range[0], 'from' : range[1],
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 'orient' : orient,
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 'font' : stdfont, 'length' : 50, 'sliderlength' : 10,
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 'width' : 10}
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 self.options.update(options)
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 def get_value(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 return self.value.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 s = Scale(frame, variable=self.value, **self.options)
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 s.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
48
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 class TextParam(Param):
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 def __init__(self, initial=''):
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 self.value = StringVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 self.value.set(initial)
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 def get_value(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 return self.value.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 def select_all(self, evt):
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 self.e.select_range(0, END)
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 def unfocus(self, evt):
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 self.frame.focus()
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 self.frame = frame
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 self.e = Entry(frame, textvariable=self.value)
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 self.e.bind("<Return>", self.unfocus)
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 self.e.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
64
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 class ListParam(Param):
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 def __init__(self, options=(), multiple=0, initial=''):
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 self.value = StringVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 self.value.set(initial)
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 self.options = options
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 if multiple:
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 self.selectmode = 'MULTIPLE'
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 self.selectmode = 'SINGLE'
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 def get_value(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 return self.l.get(self.l.curselection())
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 except:
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 return ''
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 self.l = Listbox(frame, selectmode=self.selectmode, font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 width=max([len(o) for o in self.options]),
21
dea1e1d6d439 shared Listbox problem solved. exportselection=0!
dmcc
parents: 4
diff changeset
82 height=len(self.options), exportselection=0)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 for o in self.options:
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 self.l.insert(END, o)
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 self.l.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
86
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 class LabelParam(Param):
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 def __init__(self, initial=''):
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 self.value = StringVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 self.value.set(initial)
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 def get_value(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 return self.value.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 def set_value(self, v):
28
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
94 if 'value' not in self.__dict__:
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
95 self.value = StringVar()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 self.value.set(v)
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 l = Label(frame, textvariable=self.value, font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 l.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
100
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 class ButtonParam(Param):
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 def __init__(self, text, **options):
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 self.options = {'text' : text}
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 self.options.update(options)
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 self.pressed = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 self.unread = 0 # unread button presses
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 b = Button(frame, **self.options)
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 b.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 b.bind('<ButtonPress>', self.activate)
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 b.bind('<ButtonRelease>', self.deactivate)
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 def get_value(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 if self.unread:
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 self.unread = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
115 return 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
116
45b12307c695 Initial revision
drewp
parents:
diff changeset
117 return self.pressed
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 def activate(self, evt):
45b12307c695 Initial revision
drewp
parents:
diff changeset
119 self.pressed = 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
120 self.unread = 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
121 def deactivate(self, evt):
45b12307c695 Initial revision
drewp
parents:
diff changeset
122 self.pressed = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
123
45b12307c695 Initial revision
drewp
parents:
diff changeset
124 class Params:
45b12307c695 Initial revision
drewp
parents:
diff changeset
125 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
126 self.params = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
127 def add_param(self, name, param):
45b12307c695 Initial revision
drewp
parents:
diff changeset
128 self.params[name] = param
45b12307c695 Initial revision
drewp
parents:
diff changeset
129 def get_param_value(self, name):
45b12307c695 Initial revision
drewp
parents:
diff changeset
130 return self.params[name].get_value()
45b12307c695 Initial revision
drewp
parents:
diff changeset
131 def __getitem__(self, name):
45b12307c695 Initial revision
drewp
parents:
diff changeset
132 return self.params[name].get_value()
45b12307c695 Initial revision
drewp
parents:
diff changeset
133 def __setitem__(self, name, value):
45b12307c695 Initial revision
drewp
parents:
diff changeset
134 self.params[name].set_value(value)
45b12307c695 Initial revision
drewp
parents:
diff changeset
135 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
136 for name,param in self.params.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
137 f = Frame(frame)
45b12307c695 Initial revision
drewp
parents:
diff changeset
138 l = Label(f, text=name, font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
139 l.pack(side='left')
45b12307c695 Initial revision
drewp
parents:
diff changeset
140 pframe = Frame(f)
45b12307c695 Initial revision
drewp
parents:
diff changeset
141 param.draw_tk(pframe)
45b12307c695 Initial revision
drewp
parents:
diff changeset
142 pframe.pack(side='right')
45b12307c695 Initial revision
drewp
parents:
diff changeset
143 f.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
144
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 class SliderAdjuster:
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 self.var = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
148 self.atzero = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 def set(self, level):
45b12307c695 Initial revision
drewp
parents:
diff changeset
150 if self.var is not None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
151 self.var.set(level)
45b12307c695 Initial revision
drewp
parents:
diff changeset
152 def get(self, level):
45b12307c695 Initial revision
drewp
parents:
diff changeset
153 if self.var is not None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
154 return self.var.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
155 return None
45b12307c695 Initial revision
drewp
parents:
diff changeset
156 def justturnedon(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
157 return self.atzero
28
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
158 def __getstate__(self):
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
159 state = self.__dict__.copy()
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
160 # remove var (non-pickleable)
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
161 try:
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
162 del state['var']
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
163 except KeyError:
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
164 pass
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
165 return state
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
166 # no setstate needed
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
167
45b12307c695 Initial revision
drewp
parents:
diff changeset
168 class Sub:
4
f974a462133f added light8 from the posted light8-1.0.tgz
drewp
parents: 0
diff changeset
169 def __init__(self, levels, dimmers=68, color=None):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
170 self.levels = levels
28
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
171 self.dimmers = dimmers # needed?
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
172 self.is_effect = callable(self.levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
173 self.slideradjuster = SliderAdjuster()
45b12307c695 Initial revision
drewp
parents:
diff changeset
174 if self.is_effect:
45b12307c695 Initial revision
drewp
parents:
diff changeset
175 self.params = Params()
45b12307c695 Initial revision
drewp
parents:
diff changeset
176 self.generator = self.levels(self.params, self.slideradjuster)
45b12307c695 Initial revision
drewp
parents:
diff changeset
177 self.generator.next()
45b12307c695 Initial revision
drewp
parents:
diff changeset
178 self.color = color
45b12307c695 Initial revision
drewp
parents:
diff changeset
179 def set_slider_var(self, slidervar):
45b12307c695 Initial revision
drewp
parents:
diff changeset
180 if self.is_effect:
45b12307c695 Initial revision
drewp
parents:
diff changeset
181 self.slideradjuster.var = slidervar
45b12307c695 Initial revision
drewp
parents:
diff changeset
182 def draw_tk(self, frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
183 if self.is_effect:
45b12307c695 Initial revision
drewp
parents:
diff changeset
184 self.params.draw_tk(frame)
45b12307c695 Initial revision
drewp
parents:
diff changeset
185 def get_state(self):
28
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
186 state = self.__dict__.copy()
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
187 if self.is_effect:
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
188 del state['levels']
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
189 del state['generator']
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
190
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
191 return state
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
192 def set_state(self, statedict):
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
193 self.__dict__.update(statedict)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
194 def get_levels(self, level):
45b12307c695 Initial revision
drewp
parents:
diff changeset
195 d = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
196 if level == 0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
197 self.slideradjuster.atzero = 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
198 return d
4
f974a462133f added light8 from the posted light8-1.0.tgz
drewp
parents: 0
diff changeset
199 if self.is_effect:
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
200 d = self.generator.next()
45b12307c695 Initial revision
drewp
parents:
diff changeset
201 self.slideradjuster.atzero = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
202 else: # dictionary (standard)
45b12307c695 Initial revision
drewp
parents:
diff changeset
203 d = self.levels
4
f974a462133f added light8 from the posted light8-1.0.tgz
drewp
parents: 0
diff changeset
204 return dict([(get_dmx_channel(ch), float(lev) * float(level))
f974a462133f added light8 from the posted light8-1.0.tgz
drewp
parents: 0
diff changeset
205 for ch, lev in d.items()])
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
206
45b12307c695 Initial revision
drewp
parents:
diff changeset
207 def reload_data(dummy):
4
f974a462133f added light8 from the posted light8-1.0.tgz
drewp
parents: 0
diff changeset
208 global subs
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
209 if dummy:
45b12307c695 Initial revision
drewp
parents:
diff changeset
210 import ConfigDummy as Config
45b12307c695 Initial revision
drewp
parents:
diff changeset
211 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
212 import Config
45b12307c695 Initial revision
drewp
parents:
diff changeset
213
45b12307c695 Initial revision
drewp
parents:
diff changeset
214 reload(Config)
45b12307c695 Initial revision
drewp
parents:
diff changeset
215
45b12307c695 Initial revision
drewp
parents:
diff changeset
216 subs = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
217 for name, levels in Config.subs.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
218 if type(name) == TupleType:
45b12307c695 Initial revision
drewp
parents:
diff changeset
219 name, color = name
45b12307c695 Initial revision
drewp
parents:
diff changeset
220 else:
28
b0342f9ee328 attempts to save params, better loading behavior
dmcc
parents: 21
diff changeset
221 color = None
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
222
4
f974a462133f added light8 from the posted light8-1.0.tgz
drewp
parents: 0
diff changeset
223 subs[name] = Sub(levels, color=color)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
224
45b12307c695 Initial revision
drewp
parents:
diff changeset
225 # subs = dict([(name, Sub(levels)) for name, levels in Config.subs.items()])