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()])