Mercurial > code > home > repos > light9
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 |