Mercurial > code > home > repos > light9
comparison light8/Subs.py @ 4:f974a462133f
added light8 from the posted light8-1.0.tgz
author | drewp |
---|---|
date | Sun, 07 Jul 2002 01:16:10 +0000 |
parents | 45b12307c695 |
children | dea1e1d6d439 |
comparison
equal
deleted
inserted
replaced
3:8856efb6516c | 4:f974a462133f |
---|---|
1 from Patch import * | 1 from Patch import * |
2 from time import time | 2 from time import time |
3 from Tix import * | 3 from Tkinter import * |
4 from types import TupleType | 4 from types import TupleType |
5 | 5 |
6 stdfont = ('Arial', 8) | 6 stdfont = ('Arial', 8) |
7 | 7 |
8 class Param: # abstract | 8 class Param: # abstract |
9 def get_value(self): | 9 def get_value(self): |
10 pass | 10 pass |
11 def set_value(self, v): | 11 def set_value(self): |
12 pass | 12 pass |
13 def draw_tk(self, frame): | 13 def draw_tk(self, frame): |
14 pass | 14 pass |
15 def __getstate__(self): | |
16 return {'value' : self.get_value()} | |
17 def __setstate__(self, dict): | |
18 self.value = StringVar() | |
19 self.set_value(dict['value']) | |
20 | 15 |
21 class CheckboxParam(Param): | 16 class CheckboxParam(Param): |
22 def __init__(self, initial=0): | 17 def __init__(self, initial=0): |
23 self.value = IntVar() | 18 self.value = IntVar() |
24 self.value.set(initial) | 19 self.value.set(initial) |
75 except: | 70 except: |
76 return '' | 71 return '' |
77 def draw_tk(self, frame): | 72 def draw_tk(self, frame): |
78 self.l = Listbox(frame, selectmode=self.selectmode, font=stdfont, | 73 self.l = Listbox(frame, selectmode=self.selectmode, font=stdfont, |
79 width=max([len(o) for o in self.options]), | 74 width=max([len(o) for o in self.options]), |
80 height=len(self.options), exportselection=0) | 75 height=len(self.options)) |
81 for o in self.options: | 76 for o in self.options: |
82 self.l.insert(END, o) | 77 self.l.insert(END, o) |
83 self.l.pack() | 78 self.l.pack() |
84 | 79 |
85 class LabelParam(Param): | 80 class LabelParam(Param): |
87 self.value = StringVar() | 82 self.value = StringVar() |
88 self.value.set(initial) | 83 self.value.set(initial) |
89 def get_value(self): | 84 def get_value(self): |
90 return self.value.get() | 85 return self.value.get() |
91 def set_value(self, v): | 86 def set_value(self, v): |
92 if 'value' not in self.__dict__: | |
93 self.value = StringVar() | |
94 self.value.set(v) | 87 self.value.set(v) |
95 def draw_tk(self, frame): | 88 def draw_tk(self, frame): |
96 l = Label(frame, textvariable=self.value, font=stdfont) | 89 l = Label(frame, textvariable=self.value, font=stdfont) |
97 l.pack() | 90 l.pack() |
98 | 91 |
148 if self.var is not None: | 141 if self.var is not None: |
149 self.var.set(level) | 142 self.var.set(level) |
150 def get(self, level): | 143 def get(self, level): |
151 if self.var is not None: | 144 if self.var is not None: |
152 return self.var.get() | 145 return self.var.get() |
146 | |
153 return None | 147 return None |
154 def justturnedon(self): | 148 def justturnedon(self): |
155 return self.atzero | 149 return self.atzero |
156 def __getstate__(self): | |
157 state = self.__dict__.copy() | |
158 # remove var (non-pickleable) | |
159 try: | |
160 del state['var'] | |
161 except KeyError: | |
162 pass | |
163 return state | |
164 # no setstate needed | |
165 | 150 |
166 class Sub: | 151 class Sub: |
167 def __init__(self, name, levels, dimmers=68, color=None): | 152 def __init__(self, levels, dimmers=68, color=None): |
168 self.name = name # keep this consistent please | |
169 self.levels = levels | 153 self.levels = levels |
170 self.dimmers = dimmers # needed? | 154 self.dimmers = dimmers |
171 self.is_effect = callable(self.levels) | 155 self.is_effect = callable(self.levels) |
172 self.slideradjuster = SliderAdjuster() | 156 self.slideradjuster = SliderAdjuster() |
173 self.namecache = {} | |
174 if self.is_effect: | 157 if self.is_effect: |
175 self.params = Params() | 158 self.params = Params() |
176 self.generator = self.levels(self.params, self.slideradjuster) | 159 self.generator = self.levels(self.params, self.slideradjuster) |
177 self.generator.next() | 160 self.generator.next() |
178 self.color = color | 161 self.color = color |
179 def resolve_name(self, ch_name): | |
180 if ch_name in self.namecache: | |
181 return self.namecache[ch_name] | |
182 else: | |
183 resolved = get_dmx_channel(ch_name) | |
184 self.namecache[ch_name] = resolved | |
185 return resolved | |
186 def set_slider_var(self, slidervar): | 162 def set_slider_var(self, slidervar): |
187 if self.is_effect: | 163 if self.is_effect: |
188 self.slideradjuster.var = slidervar | 164 self.slideradjuster.var = slidervar |
189 def draw_tk(self, frame): | 165 def draw_tk(self, frame): |
190 if self.is_effect: | 166 if self.is_effect: |
191 self.params.draw_tk(frame) | 167 self.params.draw_tk(frame) |
192 def get_state(self): | 168 def get_state(self): |
193 state = self.__dict__.copy() | 169 pass |
194 if self.is_effect: | |
195 del state['levels'] | |
196 del state['generator'] | |
197 | |
198 return state | |
199 def set_state(self, statedict): | |
200 self.__dict__.update(statedict) | |
201 def get_levels(self, level): | 170 def get_levels(self, level): |
202 """returns a scaled version of the levels in the sub; channel names | |
203 are resolved to numbers""" | |
204 d = {} | 171 d = {} |
205 if level == 0: | 172 if level == 0: |
206 self.slideradjuster.atzero = 1 | 173 self.slideradjuster.atzero = 1 |
207 return d | 174 return d |
208 if self.is_effect: # effect | 175 if self.is_effect: |
209 d = self.generator.next() | 176 d = self.generator.next() |
210 self.slideradjuster.atzero = 0 | 177 self.slideradjuster.atzero = 0 |
211 return dict([(get_dmx_channel(ch), float(lev) * float(level)) | |
212 for ch, lev in d.items()]) | |
213 else: # dictionary (standard) | 178 else: # dictionary (standard) |
214 d = self.levels | 179 d = self.levels |
215 return dict([(self.resolve_name(ch), float(lev) * float(level)) | 180 return dict([(get_dmx_channel(ch), float(lev) * float(level)) |
216 for ch, lev in d.items()]) | 181 for ch, lev in d.items()]) |
217 | |
218 # | |
219 # methods for Subediting to use | |
220 # | |
221 def getlevels(self): | |
222 return self.levels.copy() | |
223 def reviselevels(self,levels): | |
224 # we can accept these new levels; subediting has done all the work | |
225 self.levels.update(levels) | |
226 | |
227 | |
228 | 182 |
229 def reload_data(dummy): | 183 def reload_data(dummy): |
230 global subs, cues | 184 global subs |
231 if dummy: | 185 if dummy: |
232 import ConfigDummy as Config | 186 import ConfigDummy as Config |
233 else: | 187 else: |
234 import Config | 188 import Config |
235 | 189 |
238 subs = {} | 192 subs = {} |
239 for name, levels in Config.subs.items(): | 193 for name, levels in Config.subs.items(): |
240 if type(name) == TupleType: | 194 if type(name) == TupleType: |
241 name, color = name | 195 name, color = name |
242 else: | 196 else: |
243 color = None | 197 color=None |
244 | 198 |
245 subs[name] = Sub(name, levels, color=color) | 199 subs[name] = Sub(levels, color=color) |
246 | 200 |
247 # subs = dict([(name, Sub(levels)) for name, levels in Config.subs.items()]) | 201 # subs = dict([(name, Sub(levels)) for name, levels in Config.subs.items()]) |
248 | |
249 cues = Config.cues | |
250 | |
251 def longestsubname(): | |
252 return max([len(x) for x in subs.keys()]) |