comparison light8/Lightboard.py @ 74:2dfae9ed1cda

jostle feature, use it to shake levels mildly
author dmcc
date Thu, 11 Jul 2002 15:54:24 +0000
parents 609cb9ae53b1
children 0969d8a6729d
comparison
equal deleted inserted replaced
73:c74fe7efabc1 74:2dfae9ed1cda
1 from __future__ import nested_scopes 1 from __future__ import nested_scopes
2 2
3 from Tix import * 3 from Tix import *
4 from time import sleep 4 import random
5 from signal import signal, SIGINT 5 from signal import signal, SIGINT
6 import sys, cPickle 6 import sys, cPickle
7 # import shelve
8 7
9 import io 8 import io
10 from uihelpers import * 9 from uihelpers import *
11 from panels import * 10 from panels import *
12 from Xfader import * 11 from Xfader import *
26 class Lightboard: 25 class Lightboard:
27 def __init__(self, master, parportdmx, DUMMY): 26 def __init__(self, master, parportdmx, DUMMY):
28 self.master = master 27 self.master = master
29 self.parportdmx = parportdmx 28 self.parportdmx = parportdmx
30 self.DUMMY = DUMMY 29 self.DUMMY = DUMMY
30 self.jostle_mode = 0
31 31
32 self.channel_levels = [] 32 self.channel_levels = []
33 self.scalelevels = {} 33 self.scalelevels = {}
34 self.xfader = Xfader(self.scalelevels) # doesn't draw any UI yet-- look for self.xfader.setupwidget() 34 self.xfader = Xfader(self.scalelevels) # doesn't draw any UI yet-- look for self.xfader.setupwidget()
35 self.oldlevels = [None] * 68 # never replace this; just clear it 35 self.oldlevels = [None] * 68 # never replace this; just clear it
36 self.subediting = Subediting(currentoutputlevels=self.oldlevels) 36 self.subediting = Subediting(currentoutputlevels=self.oldlevels)
37 37
38 # self.shelf = shelve.open('/tmp/light9.newprefs')
39 # self.windowpos = self.shelf.get('window', {})
40 self.windowpos = 0 38 self.windowpos = 0
41 self.get_data() 39 self.get_data()
42 self.buildinterface() 40 self.buildinterface()
43 self.load() 41 self.load()
44 self.backgroundloop() 42 self.backgroundloop()
72 colorlabel(self.channel_levels[i]) 70 colorlabel(self.channel_levels[i])
73 71
74 Console(self) 72 Console(self)
75 73
76 # root frame 74 # root frame
77 controlpanel = Controlpanel(self.master, self.xfader, self.refresh, self.quit) 75 controlpanel = Controlpanel(self.master, self.xfader, self.refresh,
76 self.quit, self.toggle_jostle)
78 77
79 xf=Frame(self.master) 78 xf=Frame(self.master)
80 xf.pack(side='right') 79 xf.pack(side='right')
81 80
82 self.master.bind('<q>', self.quit) 81 self.master.bind('<q>', self.quit)
148 newlevels = s.get_levels(level=self.scalelevels[name].get()) 147 newlevels = s.get_levels(level=self.scalelevels[name].get())
149 for (ch, fadelev) in newlevels.items(): 148 for (ch, fadelev) in newlevels.items():
150 levels[ch-1] = max(levels[ch-1], fadelev) 149 levels[ch-1] = max(levels[ch-1], fadelev)
151 150
152 levels = [int(l) for l in levels] 151 levels = [int(l) for l in levels]
153 152
154 for lev,lab,oldlev,numlab in zip(levels, self.channel_levels, 153 for lev,lab,oldlev,numlab in zip(levels, self.channel_levels,
155 self.oldlevels, 154 self.oldlevels,
156 self.leveldisplay.number_labels): 155 self.leveldisplay.number_labels):
157 if lev != oldlev: 156 if lev != oldlev:
158 lab.config(text="%d" % lev) # update labels in lev display 157 lab.config(text="%d" % lev) # update labels in lev display
164 else: 163 else:
165 numlab['bg'] = 'lightPink' 164 numlab['bg'] = 'lightPink'
166 165
167 self.oldlevels[:] = levels[:] # replace the elements in oldlevels - don't make a new list (Subediting is watching it) 166 self.oldlevels[:] = levels[:] # replace the elements in oldlevels - don't make a new list (Subediting is watching it)
168 167
168 if self.jostle_mode:
169 delta = random.randrange(-1, 2, 1) # (-1, 0, or 1)
170 # print "delta", delta
171 levels = [min(100, max(x + delta, 0)) for x in levels]
172 # print "jostled", levels
173
169 self.parportdmx.sendlevels(levels) 174 self.parportdmx.sendlevels(levels)
170 175
171 def updatestagelevels(self): 176 def updatestagelevels(self):
172 self.master.after(100, self.updatestagelevels) 177 self.master.after(100, self.updatestagelevels)
173 for lev, idx in zip(self.oldlevels, xrange(0, 68 + 1)): 178 for lev, idx in zip(self.oldlevels, xrange(0, 68 + 1)):
204 def quit(self, *args): 209 def quit(self, *args):
205 self.save() 210 self.save()
206 self.master.destroy() 211 self.master.destroy()
207 sys.exit() 212 sys.exit()
208 def save(self, *args): 213 def save(self, *args):
209
210
211 filename = '/tmp/light9.prefs' 214 filename = '/tmp/light9.prefs'
212 if self.DUMMY: 215 if self.DUMMY:
213 filename += '.dummy' 216 filename += '.dummy'
214 print "Saving to", filename 217 print "Saving to", filename
215 file = open(filename, 'w') 218 file = open(filename, 'w')
216 219
217 '''
218 # {name : (tkname, geom)}
219 windowitems = self.windowpos.items()
220 windowmapping = dict([(pair[0], name) for name, pair in windowitems])
221 # print "windowmapping", windowmapping
222 # print "windowpos", self.windowpos
223
224 for w in self.master.winfo_children():
225 tkname, geom = str(w), w.winfo_geometry()
226 try:
227 name = windowmapping[tkname]
228 self.windowpos[name] = (tkname, geom)
229 # print name, "geom is", geom
230 except:
231 # print "failed to save windowpos"
232 pass
233 # self.shelf['window'] = self.windowpos
234 # self.shelf.close()
235 '''
236
237 try: 220 try:
238 cPickle.dump(Pickles(self.scalelevels, Subs.subs.items()), file) 221 cPickle.dump(Pickles(self.scalelevels, Subs.subs.items()), file)
239 except cPickle.UnpickleableError: 222 except cPickle.UnpickleableError:
240 print "UnpickleableError! There's yer problem." 223 print "UnpickleableError! There's yer problem."
224 def toggle_jostle(self, *args):
225 self.jostle_mode = not self.jostle_mode