# HG changeset patch # User dmcc # Date 2002-07-07 08:33:52 # Node ID 219d6fcbc28d698358b9e5733915c8a4d4bdf41f # Parent f0e1dde35aec8937d176f1222d9739b350d09b48 Reclassification, minor cleanups Reclassification, minor cleanups No more global variables in rsn! They are all in a class called LightBoard. diff --git a/light8/panels.py b/light8/panels.py --- a/light8/panels.py +++ b/light8/panels.py @@ -8,12 +8,10 @@ from FlyingFader import FlyingFader stdfont = ('Arial', 8) monofont = ('Courier', 8) - - class Controlpanel(Frame): - def __init__(self,parent,xfader,refresh_cb,quit_cb): + def __init__(self, parent, xfader, refresh_cb, quit_cb): Frame.__init__(self,parent) - controlpanel=self + controlpanel = self for txt,cmd in ( ('Quit', quit_cb), ('Refresh', refresh_cb), @@ -22,8 +20,8 @@ class Controlpanel(Frame): ('Clear X', lambda: xfader.clearallbuttons('x')), ('On -> Y', lambda: xfader.grab('y')), ('Clear Y', lambda: xfader.clearallbuttons('y'))): - Button(controlpanel, text=txt, command=cmd).pack(side='top', fill='x') - + Button(controlpanel, text=txt, command=cmd).pack(side='top', + fill='x') class Console: def __init__(self): @@ -32,7 +30,8 @@ class Console: self.frame = Frame(t) self.entry=Entry(self.frame) self.entry.pack(expand=1, fill='x') - self.entry.bind('', lambda evt: self.execute(evt, self.entry.get())) + self.entry.bind('', lambda evt: self.execute(evt, + self.entry.get())) self.frame.pack(fill=BOTH, expand=1) def execute(evt, str): @@ -44,23 +43,36 @@ class Console: self.frame.focus() class Leveldisplay: - def __init__(self,parent,_oldlevels,channel_levels): - + def __init__(self, parent, channel_levels, num_channels=68): frames = (make_frame(parent), make_frame(parent)) channel_levels[:]=[] - for channel in range(1, 69): - f=Frame(frames[channel > 34]) - Label(f,text=str(channel), width=3, bg='lightPink', - font=stdfont, padx=0, pady=0, bd=0, height=1).pack(side='left') - Label(f,text=Patch.get_channel_name(channel), width=8, - font=stdfont, anchor='w', padx=0, pady=0, bd=0, height=1).pack(side='left') - l=Label(f, width=3, bg='lightBlue', #text=_oldlevels[channel-1], - font=stdfont, anchor='e', padx=1, pady=0, bd=0, height=1) + self.number_labels = {} + for channel in range(1, num_channels+1): + + # frame for this channel + f = Frame(frames[channel > (num_channels/2)]) + # channel number -- will turn yellow when being altered + num_lab = Label(f, text=str(channel), width=3, bg='lightPink', + font=stdfont, padx=0, pady=0, bd=0, height=1) + num_lab.pack(side='left') + self.number_labels[channel] = num_lab + + # text description of channel + Label(f, text=Patch.get_channel_name(channel), width=8, + font=stdfont, anchor='w', padx=0, pady=0, bd=0, + height=1).pack(side='left') + + # current level of channel, shows intensity with color + l = Label(f, width=3, bg='lightBlue', font=stdfont, anchor='e', + padx=1, pady=0, bd=0, height=1) l.pack(side='left') colorlabel(l) channel_levels.append(l) f.pack(side='top') - # channel_levels is an output - changelevel will use it to access these labels + + self.channel_levels = channel_levels + # channel_levels is an output - changelevel will use it to access + # these labels class Subpanels: def __init__(self, scenesparent, effectsparent, scalelevels, Subs, xfader, diff --git a/light8/rsn.py b/light8/rsn.py --- a/light8/rsn.py +++ b/light8/rsn.py @@ -38,156 +38,149 @@ get_data() io.init(DUMMY) -channel_levels = [] -scalelevels = {} -fades = {} +class Lightboard: + def __init__(self, master): + self.master = master -_oldlevels=[None] * 68 + self.channel_levels = [] + self.scalelevels = {} + self.oldlevels = [None] * 68 + + self.buildinterface() + self.load() + self.backgroundloop() + def buildinterface(self): + for w in self.master.winfo_children(): + w.destroy() -# this is called on a loop, and ALSO by the Scales -def changelevel(*args): - 'Amp trims slider' - global _oldlevels + stage_tl = toplevelat(165,90) + s = stage.Stage(stage_tl) + stage.createlights(s) + s.pack() + + sub_tl = toplevelat(0,0) + effect_tl = toplevelat(0,352) - levels = [0] * 68 - for name, s in Subs.subs.items(): - newlevels = s.get_levels(level=scalelevels[name].get()) - for (ch, fadelev) in newlevels.items(): - levels[ch-1] = max(levels[ch-1], fadelev) + self.xfader = Xfader(self.scalelevels) - levels = [int(l) for l in levels] + self.subpanels = Subpanels(sub_tl, effect_tl, self.scalelevels, Subs, + self.xfader, self.changelevel) + + leveldisplay_tl = toplevelat(873,400) + leveldisplay_tl.bind('', sys.exit) - for lev,lab,oldlev in zip(levels, channel_levels, _oldlevels): - if lev != oldlev: - lab.config(text="%d" % lev) - colorlabel(lab) + leveldisplay = Leveldisplay(leveldisplay_tl, self.channel_levels) + + Console() - _oldlevels = levels[:] + # root frame + controlpanel = Controlpanel(root, self.xfader, self.refresh, quit) - io.sendlevels(levels) + xf=Frame(root) + xf.pack(side='right') + + root.bind('', quit) + root.bind('', self.refresh) + leveldisplay_tl.bind('', quit) + leveldisplay_tl.bind('', self.refresh) -def backgroundloop(*args): - root.after(50, backgroundloop, ()) - changelevel() + self.xfader.setupwidget(xf) + controlpanel.pack() + + def refresh(self, *args): + 'rebuild interface, reload data' + get_data() + self.buildinterface() + bindkeys(root,'', quit) -buildinterface = None # temporary -def refresh(*args): - get_data() - buildinterface() - bindkeys(root,'', quit) + # this is called on a loop, and ALSO by the Scales + def changelevel(self, *args): + 'Amp trims slider' + + levels = [0] * 68 + for name, s in Subs.subs.items(): + newlevels = s.get_levels(level=self.scalelevels[name].get()) + for (ch, fadelev) in newlevels.items(): + levels[ch-1] = max(levels[ch-1], fadelev) -def quit(*args): - filename = '/tmp/light9.prefs' - if DUMMY: - filename += '.dummy' - print "Saving to", filename - file = open(filename, 'w') - cPickle.dump(Pickles(scalelevels), file) - root.destroy() - sys.exit() + levels = [int(l) for l in levels] + for lev,lab,oldlev in zip(levels, self.channel_levels, self.oldlevels): + if lev != oldlev: + lab.config(text="%d" % lev) + colorlabel(lab) -xfader=Xfader(scalelevels) + self.oldlevels = levels[:] + + io.sendlevels(levels) -def buildinterface(*args): - global channel_levels, _oldlevels, leveldisplay, xfader - for w in root.winfo_children(): - w.destroy() - - stage_tl=toplevelat(165,90) - s=stage.Stage(stage_tl) - stage.createlights(s) - s.pack() - - sub_tl = toplevelat(0,0) - effect_tl = toplevelat(0,352) - - Subpanels(sub_tl,effect_tl,scalelevels,Subs,xfader,changelevel) + def load(self): + try: + filename = '/tmp/light9.prefs' + if DUMMY: + filename += '.dummy' + print "Loading from", filename + file = open(filename, 'r') + p = cPickle.load(file) + for s, v in p.scalelevels.items(): + try: + self.scalelevels[s].set(v) + except: + print "Couldn't set %s -> %s" % (s, v) + except: + print "Couldn't load prefs (%s)" % filename - # def event_printer(evt): - # print dir(evt) + def make_sub(self, name): + i = 1 + # name = console_entry.get() # read from console + if not name: + print "Enter sub name in console." + return - # sub_tl.bind('', event_printer) - leveldisplay=toplevelat(873,400) - leveldisplay.bind('', sys.exit) - - Leveldisplay(leveldisplay,_oldlevels,channel_levels) - - Console() + st = '' + linebuf = 'subs["%s"] = {' % name + for l in self.oldlevels: + if l: + if len(linebuf) > 60: + st += linebuf + '\n ' + linebuf = '' - # root frame - controlpanel = Controlpanel(root,xfader,refresh,quit) - - xf=Frame(root) - xf.pack(side='right') - - root.bind('', quit) - root.bind('', refresh) - leveldisplay.bind('', quit) - leveldisplay.bind('', refresh) - - xfader.setupwidget(xf) - controlpanel.pack() - - -buildinterface() + linebuf += ' "%s" : %d,' % (Patch.get_channel_name(i), l) + i += 1 + st += linebuf + '}\n' + if DUMMY: + filename = 'ConfigDummy.py' + else: + filename = 'Config.py' + f = open(filename, 'a') + f.write(st) + f.close() + print 'Added sub:', st + self.refresh() + def backgroundloop(self, *args): + self.master.after(50, self.backgroundloop, ()) + self.changelevel() + def quit(self, *args): + filename = '/tmp/light9.prefs' + if DUMMY: + filename += '.dummy' + print "Saving to", filename + file = open(filename, 'w') + cPickle.dump(Pickles(self.scalelevels), file) + root.destroy() + sys.exit() class Pickles: def __init__(self, scalelevels): self.scalelevels = dict([(name, lev.get()) for name,lev in scalelevels.items()]) -def load(): - try: - filename = '/tmp/light9.prefs' - if DUMMY: - filename += '.dummy' - print "Loading from", filename - file = open(filename, 'r') - p = cPickle.load(file) - for s, v in p.scalelevels.items(): - try: - scalelevels[s].set(v) - except: - print "Couldn't set %s -> %s" % (s, v) - except: - print "Couldn't load prefs (%s)" % filename - -def make_sub(name): - global _oldlevels - i = 1 - # name = console_entry.get() # read from console - if not name: - print "Enter sub name in console." - return +mr_lightboard = Lightboard(root) - st = '' - linebuf = 'subs["%s"] = {' % name - for l in _oldlevels: - if l: - if len(linebuf) > 60: - st += linebuf + '\n ' - linebuf = '' - - linebuf += ' "%s" : %d,' % (Patch.get_channel_name(i), l) - i += 1 - st += linebuf + '}\n' - if DUMMY: - filename = 'ConfigDummy.py' - else: - filename = 'Config.py' - f = open(filename, 'a') - f.write(st) - f.close() - print 'Added sub:', st - refresh() - -load() -signal(SIGINT, quit) -bindkeys(root,'', quit) +signal(SIGINT, mr_lightboard.quit) +bindkeys(root,'', mr_lightboard.quit) # bindkeys(root,'', quit) # bindkeys(root,'', refresh) # bindkeys(root,'', make_sub) -backgroundloop() root.mainloop() # Receiver switches main diff --git a/light8/uihelpers.py b/light8/uihelpers.py --- a/light8/uihelpers.py +++ b/light8/uihelpers.py @@ -7,13 +7,11 @@ def make_frame(parent): f.pack(side='left') return f - def bindkeys(root,key, func): root.bind(key, func) for w in root.winfo_children(): w.bind(key, func) - def toplevelat(x,y,w=None,h=None): tl=Toplevel() if w and h: @@ -22,7 +20,6 @@ def toplevelat(x,y,w=None,h=None): tl.wm_geometry("+%d+%d"%(x,y)) return tl - def toggle_slider(s): if s.get() == 0: s.set(100) @@ -33,7 +30,6 @@ def toggle_slider(s): def printout(t): print t - def colorlabel(label): """color a label based on its own text""" txt=label['text'] or "0"