annotate light8/Lightboard.py @ 54:3011c1028eb7

Cue math error fixed. Cue math error fixed. Bad cues in ConfigDummy fixed, not fixed in Config yet. Cue fader back in rsn. Oh yeah.
author dmcc
date Mon, 08 Jul 2002 15:50:00 +0000
parents 45b12307c695
children 2af6698b0566
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 from __future__ import nested_scopes,division
45b12307c695 Initial revision
drewp
parents:
diff changeset
2
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 from Tix import *
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 from signal import signal, SIGINT
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 from time import time
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 import sys, cPickle, random
45b12307c695 Initial revision
drewp
parents:
diff changeset
7
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 from uihelpers import *
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 from panels import *
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 from Xfader import *
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 from subediting import Subediting
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 from Fader import Fader
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 from ExternalInput import ExternalSliders
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 import io, stage, Subs, Patch, ExtSliderMapper
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 import dmxclient
45b12307c695 Initial revision
drewp
parents:
diff changeset
16
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 class Pickles:
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 def __init__(self, scalelevels, subs=None, windowpos=None):
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 self.scalelevels = dict([(name, lev.get())
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 for name, lev in scalelevels.items()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 self.substate = dict([(name, subobj.get_state())
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 for name, subobj in subs])
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 self.windowpos = windowpos
45b12307c695 Initial revision
drewp
parents:
diff changeset
24
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 class Lightboard:
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 def __init__(self, master, DUMMY):
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 self.master = master
45b12307c695 Initial revision
drewp
parents:
diff changeset
28
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.DUMMY = DUMMY
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 self.jostle_mode = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 self.lastline = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
32
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 self.channel_levels = [] # these are actually the labels for the
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 # channel levels, and should probably be moved
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 # to panels.Leveldisplay
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.scalelevels = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
37
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 self.lastsublevels = {} # to determine which subs changed
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 self.unchangedeffect = {} # dict of levels for lights that didn't
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 # change last time
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 self.lastunchangedgroup = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
42
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 # doesn't draw any UI yet-- look for self.xfader.setupwidget()
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 self.xfader = Xfader(self.scalelevels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 self.oldlevels = [None] * 68 # never replace this; just clear it
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 self.subediting = Subediting(currentoutputlevels=self.oldlevels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 self.windowpos = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 self.get_data()
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 self.buildinterface()
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 self.load()
45b12307c695 Initial revision
drewp
parents:
diff changeset
52
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 print "Light 8.8: Entering backgroundloop"
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 self.backgroundloop()
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 self.updatestagelevels()
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 self.rec_file = open('light9.log', 'a')
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 self.record_start()
45b12307c695 Initial revision
drewp
parents:
diff changeset
58
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 def buildinterface(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 print "Light 8.8: Constructing interface..."
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 for w in self.master.winfo_children():
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 w.destroy()
45b12307c695 Initial revision
drewp
parents:
diff changeset
63
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 print "\tstage"
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 stage_tl = toplevelat('stage')
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 s = stage.Stage(stage_tl)
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 stage.createlights(s)
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 s.setsubediting(self.subediting)
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 s.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 self.stage = s # save it
45b12307c695 Initial revision
drewp
parents:
diff changeset
71
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 sub_tl = toplevelat('sub')
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 scene_tl = toplevelat('scenes')
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 effect_tl = toplevelat('effect')
45b12307c695 Initial revision
drewp
parents:
diff changeset
75
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 print "\tslider patching -- It can't be turned off!"
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 mapping_tl = toplevelat('mapping')
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 self.slidermapper = ExtSliderMapper.ExtSliderMapper(mapping_tl,
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 self.scalelevels,
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 ExternalSliders(),
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 self)
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 self.slidermapper.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
83
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 print "\tsubmaster control"
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 self.subpanels = Subpanels(sub_tl, effect_tl, scene_tl, self,
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 self.scalelevels, Subs, self.xfader,
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 self.changelevel, self.subediting,
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 Subs.longestsubname())
45b12307c695 Initial revision
drewp
parents:
diff changeset
89
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 for n, lev in self.scalelevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 self.lastsublevels[n] = lev.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
92
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 print "\tlevel display"
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 leveldisplay_tl = toplevelat('leveldisplay')
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 leveldisplay_tl.bind('<Escape>', sys.exit)
45b12307c695 Initial revision
drewp
parents:
diff changeset
96
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 self.leveldisplay = Leveldisplay(leveldisplay_tl, self.channel_levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 # I don't think we need this
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 # for i in range(0,len(self.channel_levels)):
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 # self.channel_levels[i].config(text=self.oldlevels[i])
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 # colorlabel(self.channel_levels[i])
45b12307c695 Initial revision
drewp
parents:
diff changeset
102
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 print "\tconsole"
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 Console(self)
45b12307c695 Initial revision
drewp
parents:
diff changeset
105
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 # root frame
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 print "\tcontrol panel"
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 self.master.configure(bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 controlpanel = Controlpanel(self.master, self.xfader, self.refresh,
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 self.quit, self.toggle_jostle, self.nonzerosubs)
45b12307c695 Initial revision
drewp
parents:
diff changeset
111
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 print "\tcrossfader"
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 xf=Frame(self.master)
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 xf.pack(side='right')
45b12307c695 Initial revision
drewp
parents:
diff changeset
115
45b12307c695 Initial revision
drewp
parents:
diff changeset
116 self.master.bind('<q>', self.quit)
45b12307c695 Initial revision
drewp
parents:
diff changeset
117 self.master.bind('<r>', self.refresh)
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 leveldisplay_tl.bind('<q>', self.quit)
45b12307c695 Initial revision
drewp
parents:
diff changeset
119 leveldisplay_tl.bind('<r>', self.refresh)
45b12307c695 Initial revision
drewp
parents:
diff changeset
120
45b12307c695 Initial revision
drewp
parents:
diff changeset
121 self.xfader.setupwidget(xf)
45b12307c695 Initial revision
drewp
parents:
diff changeset
122 controlpanel.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
123
45b12307c695 Initial revision
drewp
parents:
diff changeset
124 print "\tcue fader (skipped)"
45b12307c695 Initial revision
drewp
parents:
diff changeset
125 # cuefader_tl = toplevelat('cuefader')
45b12307c695 Initial revision
drewp
parents:
diff changeset
126 # cuefader = Fader(cuefader_tl, Subs.cues, self.scalelevels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
127 # cuefader.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
128 print "Light 8.8: Everything's under control"
45b12307c695 Initial revision
drewp
parents:
diff changeset
129
45b12307c695 Initial revision
drewp
parents:
diff changeset
130
45b12307c695 Initial revision
drewp
parents:
diff changeset
131 def get_data(self,*args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
132 Subs.reload_data(self.DUMMY)
45b12307c695 Initial revision
drewp
parents:
diff changeset
133 Patch.reload_data(self.DUMMY)
45b12307c695 Initial revision
drewp
parents:
diff changeset
134 print "Light 8.8:", len(Patch.patch), "dimmers patched"
45b12307c695 Initial revision
drewp
parents:
diff changeset
135 print "Light 8.8:", len(Subs.subs), "submasters loaded"
45b12307c695 Initial revision
drewp
parents:
diff changeset
136
45b12307c695 Initial revision
drewp
parents:
diff changeset
137 def refresh(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
138 'rebuild interface, reload data'
45b12307c695 Initial revision
drewp
parents:
diff changeset
139 print "Light 8.8: Refresh initiated. Cross your fingers."
45b12307c695 Initial revision
drewp
parents:
diff changeset
140 self.get_data()
45b12307c695 Initial revision
drewp
parents:
diff changeset
141 print "Light 8.8: Subediting refreshed"
45b12307c695 Initial revision
drewp
parents:
diff changeset
142 self.subediting.refresh()
45b12307c695 Initial revision
drewp
parents:
diff changeset
143 print "Light 8.8: Rebuilding interface..."
45b12307c695 Initial revision
drewp
parents:
diff changeset
144 self.buildinterface()
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 bindkeys(self.master,'<Escape>', self.quit)
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 print "Light 8.8: Setting up slider patching..."
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 self.slidermapper.setup()
45b12307c695 Initial revision
drewp
parents:
diff changeset
148 # self.master.tk_setPalette('gray40')
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 print "Light 8.8: Now back to your regularly scheduled Light 8"
45b12307c695 Initial revision
drewp
parents:
diff changeset
150
45b12307c695 Initial revision
drewp
parents:
diff changeset
151 def stageassub(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
152 """returns the current onstage lighting as a levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
153 dictionary, skipping the zeros, and using names where
45b12307c695 Initial revision
drewp
parents:
diff changeset
154 possible"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
155 levs=self.oldlevels
45b12307c695 Initial revision
drewp
parents:
diff changeset
156
45b12307c695 Initial revision
drewp
parents:
diff changeset
157 return dict([(Patch.get_channel_name(i),l) for i,l
45b12307c695 Initial revision
drewp
parents:
diff changeset
158 in zip(range(1,len(levs)+1),levs)
45b12307c695 Initial revision
drewp
parents:
diff changeset
159 if l>0])
45b12307c695 Initial revision
drewp
parents:
diff changeset
160 def save_sub(self, name, levels, refresh=1):
45b12307c695 Initial revision
drewp
parents:
diff changeset
161 if not name:
45b12307c695 Initial revision
drewp
parents:
diff changeset
162 print "Enter sub name in console."
45b12307c695 Initial revision
drewp
parents:
diff changeset
163 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
164
45b12307c695 Initial revision
drewp
parents:
diff changeset
165 st = ''
45b12307c695 Initial revision
drewp
parents:
diff changeset
166 linebuf = 'subs["%s"] = {' % name
45b12307c695 Initial revision
drewp
parents:
diff changeset
167 for channame,lev in levels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
168 if len(linebuf) > 60:
45b12307c695 Initial revision
drewp
parents:
diff changeset
169 st += linebuf + '\n '
45b12307c695 Initial revision
drewp
parents:
diff changeset
170 linebuf = ''
45b12307c695 Initial revision
drewp
parents:
diff changeset
171
45b12307c695 Initial revision
drewp
parents:
diff changeset
172 linebuf += ' "%s" : %d,' % (channame, lev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
173 st += linebuf + '}\n'
45b12307c695 Initial revision
drewp
parents:
diff changeset
174 if self.DUMMY:
45b12307c695 Initial revision
drewp
parents:
diff changeset
175 filename = 'ConfigDummy.py'
45b12307c695 Initial revision
drewp
parents:
diff changeset
176 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
177 filename = 'Config.py'
45b12307c695 Initial revision
drewp
parents:
diff changeset
178 f = open(filename, 'a')
45b12307c695 Initial revision
drewp
parents:
diff changeset
179 f.write(st)
45b12307c695 Initial revision
drewp
parents:
diff changeset
180 f.close()
45b12307c695 Initial revision
drewp
parents:
diff changeset
181 print 'Added sub:', st
45b12307c695 Initial revision
drewp
parents:
diff changeset
182 if refresh:
45b12307c695 Initial revision
drewp
parents:
diff changeset
183 self.refresh()
45b12307c695 Initial revision
drewp
parents:
diff changeset
184
45b12307c695 Initial revision
drewp
parents:
diff changeset
185 # this is called on a loop, and ALSO by the Scales
45b12307c695 Initial revision
drewp
parents:
diff changeset
186 def changelevel(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
187 'Amp trims slider'
45b12307c695 Initial revision
drewp
parents:
diff changeset
188
45b12307c695 Initial revision
drewp
parents:
diff changeset
189 # load levels from external sliders
45b12307c695 Initial revision
drewp
parents:
diff changeset
190 extlevels = self.slidermapper.get_levels()
45b12307c695 Initial revision
drewp
parents:
diff changeset
191 for name, val in extlevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
192 if name in self.scalelevels:
45b12307c695 Initial revision
drewp
parents:
diff changeset
193 sl = self.scalelevels[name]
45b12307c695 Initial revision
drewp
parents:
diff changeset
194 sl.set(val)
45b12307c695 Initial revision
drewp
parents:
diff changeset
195
45b12307c695 Initial revision
drewp
parents:
diff changeset
196 # newstart = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
197
45b12307c695 Initial revision
drewp
parents:
diff changeset
198 # learn what changed
45b12307c695 Initial revision
drewp
parents:
diff changeset
199 unchangedgroup = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
200 changedgroup = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
201 for name, lastlevel in self.lastsublevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
202 newlevel = self.scalelevels[name].get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
203 if lastlevel != newlevel:
45b12307c695 Initial revision
drewp
parents:
diff changeset
204 changedgroup[name] = newlevel
45b12307c695 Initial revision
drewp
parents:
diff changeset
205 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
206 unchangedgroup[name] = newlevel
45b12307c695 Initial revision
drewp
parents:
diff changeset
207
45b12307c695 Initial revision
drewp
parents:
diff changeset
208 changedeffect = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
209 if not changedgroup:
45b12307c695 Initial revision
drewp
parents:
diff changeset
210 # should load levels from last time
45b12307c695 Initial revision
drewp
parents:
diff changeset
211 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
212 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
213 # calculate effect of new group. this should take no time if
45b12307c695 Initial revision
drewp
parents:
diff changeset
214 # nothing changed
45b12307c695 Initial revision
drewp
parents:
diff changeset
215 for name, level in changedgroup.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
216 newlevels = Subs.subs[name].get_levels(level=level)
45b12307c695 Initial revision
drewp
parents:
diff changeset
217 for (ch, fadelev) in newlevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
218 changedeffect[ch-1] = \
45b12307c695 Initial revision
drewp
parents:
diff changeset
219 max(changedeffect.get(ch-1, 0), fadelev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
220
45b12307c695 Initial revision
drewp
parents:
diff changeset
221 if unchangedgroup != self.lastunchangedgroup:
45b12307c695 Initial revision
drewp
parents:
diff changeset
222 # unchanged group changed! (confusing, huh?)
45b12307c695 Initial revision
drewp
parents:
diff changeset
223 # this means: the static subs from the last time are not the same
45b12307c695 Initial revision
drewp
parents:
diff changeset
224 # as they are this time, so we recalculate effect of unchanged group
45b12307c695 Initial revision
drewp
parents:
diff changeset
225 self.unchangedeffect = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
226 for name, level in unchangedgroup.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
227 newlevels = Subs.subs[name].get_levels(level=level)
45b12307c695 Initial revision
drewp
parents:
diff changeset
228 for (ch, fadelev) in newlevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
229 self.unchangedeffect[ch-1] = \
45b12307c695 Initial revision
drewp
parents:
diff changeset
230 max(self.unchangedeffect.get(ch-1, 0), fadelev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
231 self.lastunchangedgroup = unchangedgroup
45b12307c695 Initial revision
drewp
parents:
diff changeset
232
45b12307c695 Initial revision
drewp
parents:
diff changeset
233 # record sublevels for future generations (iterations, that is)
45b12307c695 Initial revision
drewp
parents:
diff changeset
234 for name in self.lastsublevels:
45b12307c695 Initial revision
drewp
parents:
diff changeset
235 self.lastsublevels[name] = self.scalelevels[name]
45b12307c695 Initial revision
drewp
parents:
diff changeset
236
45b12307c695 Initial revision
drewp
parents:
diff changeset
237 # merge effects together
45b12307c695 Initial revision
drewp
parents:
diff changeset
238 levels = [0] * 68
45b12307c695 Initial revision
drewp
parents:
diff changeset
239 if changedeffect:
45b12307c695 Initial revision
drewp
parents:
diff changeset
240 levels = [int(max(changedeffect.get(ch, 0),
45b12307c695 Initial revision
drewp
parents:
diff changeset
241 self.unchangedeffect.get(ch, 0)))
45b12307c695 Initial revision
drewp
parents:
diff changeset
242 for ch in range(0, 68)]
45b12307c695 Initial revision
drewp
parents:
diff changeset
243 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
244 levels = [int(self.unchangedeffect.get(ch, 0))
45b12307c695 Initial revision
drewp
parents:
diff changeset
245 for ch in range(0, 68)]
45b12307c695 Initial revision
drewp
parents:
diff changeset
246
45b12307c695 Initial revision
drewp
parents:
diff changeset
247 '''
45b12307c695 Initial revision
drewp
parents:
diff changeset
248 newend = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
249
45b12307c695 Initial revision
drewp
parents:
diff changeset
250 levels_opt = levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
251
45b12307c695 Initial revision
drewp
parents:
diff changeset
252 oldstart = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
253 # i tried to optimize this to a dictionary, but there was no speed
45b12307c695 Initial revision
drewp
parents:
diff changeset
254 # improvement
45b12307c695 Initial revision
drewp
parents:
diff changeset
255 levels = [0] * 68
45b12307c695 Initial revision
drewp
parents:
diff changeset
256 for name, s in Subs.subs.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
257 sublevel = self.scalelevels[name].get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
258 newlevels = s.get_levels(level=sublevel)
45b12307c695 Initial revision
drewp
parents:
diff changeset
259 self.lastsublevels[name] = sublevel # XXX remove
45b12307c695 Initial revision
drewp
parents:
diff changeset
260 for (ch, fadelev) in newlevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
261 levels[ch-1] = max(levels[ch-1], fadelev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
262 levels = [int(l) for l in levels]
45b12307c695 Initial revision
drewp
parents:
diff changeset
263 oldend = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
264
45b12307c695 Initial revision
drewp
parents:
diff changeset
265 newtime = newend - newstart
45b12307c695 Initial revision
drewp
parents:
diff changeset
266 oldtime = oldend - oldstart
45b12307c695 Initial revision
drewp
parents:
diff changeset
267 print "new", newtime, 'old', (oldend - oldstart), 'sup', \
45b12307c695 Initial revision
drewp
parents:
diff changeset
268 oldtime / newtime
45b12307c695 Initial revision
drewp
parents:
diff changeset
269
45b12307c695 Initial revision
drewp
parents:
diff changeset
270 if levels != levels_opt:
45b12307c695 Initial revision
drewp
parents:
diff changeset
271 raise "not equal"
45b12307c695 Initial revision
drewp
parents:
diff changeset
272 # for l, lo in zip(levels, levels_opt):
45b12307c695 Initial revision
drewp
parents:
diff changeset
273 # print l, lo
45b12307c695 Initial revision
drewp
parents:
diff changeset
274 '''
45b12307c695 Initial revision
drewp
parents:
diff changeset
275
45b12307c695 Initial revision
drewp
parents:
diff changeset
276 for lev,lab,oldlev,numlab in zip(levels, self.channel_levels,
45b12307c695 Initial revision
drewp
parents:
diff changeset
277 self.oldlevels,
45b12307c695 Initial revision
drewp
parents:
diff changeset
278 self.leveldisplay.number_labels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
279 if lev != oldlev:
45b12307c695 Initial revision
drewp
parents:
diff changeset
280 lab.config(text="%d" % lev) # update labels in lev display
45b12307c695 Initial revision
drewp
parents:
diff changeset
281 colorlabel(lab) # recolor labels
45b12307c695 Initial revision
drewp
parents:
diff changeset
282 if lev < oldlev:
45b12307c695 Initial revision
drewp
parents:
diff changeset
283 numlab['bg'] = 'blue'
45b12307c695 Initial revision
drewp
parents:
diff changeset
284 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
285 numlab['bg'] = 'red'
45b12307c695 Initial revision
drewp
parents:
diff changeset
286 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
287 numlab['bg'] = 'grey40'
45b12307c695 Initial revision
drewp
parents:
diff changeset
288
45b12307c695 Initial revision
drewp
parents:
diff changeset
289 # replace the elements in oldlevels - don't make a new list
45b12307c695 Initial revision
drewp
parents:
diff changeset
290 # (Subediting is watching it)
45b12307c695 Initial revision
drewp
parents:
diff changeset
291 self.oldlevels[:] = levels[:]
45b12307c695 Initial revision
drewp
parents:
diff changeset
292
45b12307c695 Initial revision
drewp
parents:
diff changeset
293 if self.jostle_mode:
45b12307c695 Initial revision
drewp
parents:
diff changeset
294 delta = random.randrange(-1, 2, 1) # (-1, 0, or 1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
295 # print "delta", delta
45b12307c695 Initial revision
drewp
parents:
diff changeset
296 levels = [min(100, max(x + delta, 0)) for x in levels]
45b12307c695 Initial revision
drewp
parents:
diff changeset
297 # print "jostled", levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
298
45b12307c695 Initial revision
drewp
parents:
diff changeset
299 dmxclient.outputlevels([l/100 for l in levels])
45b12307c695 Initial revision
drewp
parents:
diff changeset
300 # self.parportdmx.sendlevels(levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
301
45b12307c695 Initial revision
drewp
parents:
diff changeset
302 def updatestagelevels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
303 self.master.after(100, self.updatestagelevels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
304 for lev, idx in zip(self.oldlevels, xrange(0, 68 + 1)):
45b12307c695 Initial revision
drewp
parents:
diff changeset
305 self.stage.updatelightlevel(Patch.get_channel_name(idx + 1), lev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
306
45b12307c695 Initial revision
drewp
parents:
diff changeset
307 def load(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
308 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
309 filename = '/tmp/light9.prefs'
45b12307c695 Initial revision
drewp
parents:
diff changeset
310 if self.DUMMY:
45b12307c695 Initial revision
drewp
parents:
diff changeset
311 filename += '.dummy'
45b12307c695 Initial revision
drewp
parents:
diff changeset
312 print "Light 8.8: Loading from", filename
45b12307c695 Initial revision
drewp
parents:
diff changeset
313 file = open(filename, 'r')
45b12307c695 Initial revision
drewp
parents:
diff changeset
314 p = cPickle.load(file)
45b12307c695 Initial revision
drewp
parents:
diff changeset
315 for s, v in p.scalelevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
316 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
317 self.scalelevels[s].set(v)
45b12307c695 Initial revision
drewp
parents:
diff changeset
318 except Exception,e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
319 print "Couldn't set %s -> %s: %s" % (s, v,e)
45b12307c695 Initial revision
drewp
parents:
diff changeset
320 for name, substate in p.substate.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
321 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
322 Subs.subs[name].set_state(substate)
45b12307c695 Initial revision
drewp
parents:
diff changeset
323 except Exception, e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
324 print "Couldn't set sub %s state: %s" % (name,e)
45b12307c695 Initial revision
drewp
parents:
diff changeset
325 except IOError, e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
326 print "IOError: Couldn't load prefs (%s): %s" % (filename,e)
45b12307c695 Initial revision
drewp
parents:
diff changeset
327 except EOFError, e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
328 print "EOFrror: Couldn't load prefs (%s): %s" % (filename,e)
45b12307c695 Initial revision
drewp
parents:
diff changeset
329 except Exception,e:
45b12307c695 Initial revision
drewp
parents:
diff changeset
330 print "Couldn't load prefs (%s): %s" % (filename,e)
45b12307c695 Initial revision
drewp
parents:
diff changeset
331 self.slidermapper.setup()
45b12307c695 Initial revision
drewp
parents:
diff changeset
332
45b12307c695 Initial revision
drewp
parents:
diff changeset
333 def backgroundloop(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
334 self.master.after(150, self.backgroundloop, ())
45b12307c695 Initial revision
drewp
parents:
diff changeset
335 self.changelevel()
45b12307c695 Initial revision
drewp
parents:
diff changeset
336 def quit(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
337 print "Light 8.8: And that's my cue to exit..."
45b12307c695 Initial revision
drewp
parents:
diff changeset
338 self.save()
45b12307c695 Initial revision
drewp
parents:
diff changeset
339 self.record_end()
45b12307c695 Initial revision
drewp
parents:
diff changeset
340 self.master.destroy()
45b12307c695 Initial revision
drewp
parents:
diff changeset
341 sys.exit()
45b12307c695 Initial revision
drewp
parents:
diff changeset
342 def save(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
343 filename = '/tmp/light9.prefs'
45b12307c695 Initial revision
drewp
parents:
diff changeset
344 if self.DUMMY:
45b12307c695 Initial revision
drewp
parents:
diff changeset
345 filename += '.dummy'
45b12307c695 Initial revision
drewp
parents:
diff changeset
346 print "Light 8.8: Saving to", filename
45b12307c695 Initial revision
drewp
parents:
diff changeset
347 file = open(filename, 'w')
45b12307c695 Initial revision
drewp
parents:
diff changeset
348
45b12307c695 Initial revision
drewp
parents:
diff changeset
349 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
350 cPickle.dump(Pickles(self.scalelevels, Subs.subs.items()), file)
45b12307c695 Initial revision
drewp
parents:
diff changeset
351 except cPickle.UnpickleableError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
352 print "UnpickleableError! There's yer problem."
45b12307c695 Initial revision
drewp
parents:
diff changeset
353 def toggle_jostle(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
354 self.jostle_mode = not self.jostle_mode
45b12307c695 Initial revision
drewp
parents:
diff changeset
355 if self.jostle_mode:
45b12307c695 Initial revision
drewp
parents:
diff changeset
356 print 'Light 8.8: Perhaps we can jost-le your memory?'
45b12307c695 Initial revision
drewp
parents:
diff changeset
357 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
358 print 'Light 8.8: He remembers! (jostle off)'
45b12307c695 Initial revision
drewp
parents:
diff changeset
359 def nonzerosubs(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
360 print "Light 8.8: Active subs:"
45b12307c695 Initial revision
drewp
parents:
diff changeset
361 for n, dv in self.scalelevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
362 if dv.get() > 0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
363 print "%-.4f: %s" % (dv.get(), n)
45b12307c695 Initial revision
drewp
parents:
diff changeset
364 def record_start(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
365 print "Light 8.8: Recorder started"
45b12307c695 Initial revision
drewp
parents:
diff changeset
366 self.rec_file.write("%s:\t%s\n" % (time(), "--- Start ---"))
45b12307c695 Initial revision
drewp
parents:
diff changeset
367 self.record_stamp()
45b12307c695 Initial revision
drewp
parents:
diff changeset
368 def record_end(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
369 print "Light 8.8: Recorder shutdown"
45b12307c695 Initial revision
drewp
parents:
diff changeset
370 self.rec_file.write("%s:\t%s\n" % (time(), "--- End ---"))
45b12307c695 Initial revision
drewp
parents:
diff changeset
371 def record_stamp(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
372 'Record the current submaster levels, continue this loop'
45b12307c695 Initial revision
drewp
parents:
diff changeset
373 levels = []
45b12307c695 Initial revision
drewp
parents:
diff changeset
374 for n, v in self.scalelevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
375 lev = v.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
376 if lev:
45b12307c695 Initial revision
drewp
parents:
diff changeset
377 levels.append('%s\t%s' % (n, lev))
45b12307c695 Initial revision
drewp
parents:
diff changeset
378
45b12307c695 Initial revision
drewp
parents:
diff changeset
379
45b12307c695 Initial revision
drewp
parents:
diff changeset
380 newdata = '\t'.join(levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
381 if newdata!=self.lastline:
45b12307c695 Initial revision
drewp
parents:
diff changeset
382 template = "%s:\t%s\n" % (time(), newdata)
45b12307c695 Initial revision
drewp
parents:
diff changeset
383 self.rec_file.write(template)
45b12307c695 Initial revision
drewp
parents:
diff changeset
384 self.lastline = newdata
45b12307c695 Initial revision
drewp
parents:
diff changeset
385 self.master.after(100, self.record_stamp)
45b12307c695 Initial revision
drewp
parents:
diff changeset
386 def highlight_sub(self, name, color):
45b12307c695 Initial revision
drewp
parents:
diff changeset
387 self.subediting.colorsub(name, color)