diff --git a/light8/rsn.py b/light8/rsn.py --- a/light8/rsn.py +++ b/light8/rsn.py @@ -7,7 +7,11 @@ from time import sleep from signal import * import sys, thread, cPickle +import io +from uihelpers import * +from panels import * from Xfader import * +import stage if len(sys.argv) >= 2: DUMMY = 0 @@ -32,32 +36,11 @@ def get_data(*args): get_data() -if not DUMMY: - getparport() - -def sendlevels(levels): - if DUMMY: return - levels = list(levels) + [0] - if levels[14] > 0: levels[14] = 100 - # print "levels", ' '.join(["%3.1f" % l for l in levels]) - outstart() - for p in range(1,70): - outbyte(levels[p-1]*255/100) +io.init(DUMMY) channel_levels = [] scalelevels = {} fades = {} -stdfont = ('Arial', 8) -monofont = ('Courier', 8) - -def colorlabel(label): - txt=label['text'] or "0" - lev=float(txt)/100 - low=(80,80,180) - high=(255,55,050) - out = [int(l+lev*(h-l)) for h,l in zip(high,low)] - col="#%02X%02X%02X" % tuple(out) - label.config(bg=col) _oldlevels=[None] * 68 @@ -80,45 +63,17 @@ def changelevel(*args): _oldlevels = levels[:] - sendlevels(levels) + io.sendlevels(levels) def backgroundloop(*args): root.after(50, backgroundloop, ()) changelevel() - -def make_frame(parent): - f = Frame(parent, bd=0) - f.pack(side='left') - return f - -def add_fade(slider, evt): - print 'b3!' - -def execute(evt, str): - if str[0] == '*': # make a new sub - make_sub(str) - else: - print '>>>', str - print eval(str) - console_frame.focus() - -def console(): - global console_entry, console_frame - print "Light 8: Everything's under control" - t=Toplevel(root) - console_frame = Frame(t) - console_entry=Entry(console_frame) - console_entry.pack(expand=1, fill='x') - console_entry.bind('', lambda evt: execute(evt, - console_entry.get())) - console_frame.pack(fill=BOTH, expand=1) - t.wm_geometry("599x19+267+717") buildinterface = None # temporary def refresh(*args): get_data() buildinterface() - bindkeys('', quit) + bindkeys(root,'', quit) def quit(*args): filename = '/tmp/light9.prefs' @@ -130,117 +85,42 @@ def quit(*args): root.destroy() sys.exit() -def bindkeys(key, func): - root.bind(key, func) - for w in root.winfo_children(): - w.bind(key, func) + +xfader=Xfader(scalelevels) -def toggle_slider(s): - if s.get() == 0: - s.set(100) - else: - s.set(0) -def printout(t): - print t - -xfader=Xfader(scalelevels) def buildinterface(*args): - global channel_levels, _oldlevels, leveldisplay, stdfont, monofnt, xfader + global channel_levels, _oldlevels, leveldisplay, xfader for w in root.winfo_children(): w.destroy() - sublist = Subs.subs.items() - sublist.sort() - - sub_tl = Toplevel() - sub_tl.wm_geometry("+0+0") - effect_tl = Toplevel() - effect_tl.wm_geometry("+0+352") - - for name, sub in sublist: - if sub.is_effect: - f=Frame(effect_tl, bd=1, relief='raised') - else: - f=Frame(sub_tl, bd=1, relief='raised') - - f.pack(fill='both',exp=1,side='left') - - if name not in scalelevels: - scalelevels[name]=DoubleVar() - - sub.set_slider_var(scalelevels[name]) + stage_tl=toplevelat(165,90) + s=stage.Stage(stage_tl) + stage.createlights(s) + s.pack() - scaleopts = {} - if sub.color: - scaleopts['troughcolor'] = sub.color - s=Scale(f,command=lambda l,name=name: changelevel(name,l),showvalue=0, - length=300-17,variable=scalelevels[name],width=20, - to=0,res=.001,from_=1,bd=1, **scaleopts) - l=Label(f,text=str(name), font=stdfont, padx=0, pady=0) - v=Label(f,textvariable=scalelevels[name], font=stdfont, padx=0, pady=0) - l.pack(side='bottom') - v.pack(side='bottom') + sub_tl = toplevelat(0,0) + effect_tl = toplevelat(0,352) - for axis in ('y','x'): - cvar=IntVar() - cb=Checkbutton(f,text=axis,variable=cvar,font=stdfont, padx=0, pady=0, bd=1) - button = ('Alt','Control')[axis=='y'] # unused? -# s.bind(''%axis, lambda ev,cb=cb: cb.invoke) - cb.pack(side='bottom',fill='both', padx=0, pady=0) - xfader.registerbutton(name,axis,cvar) - - s.pack(side='left') - s.bind('<3>', lambda evt, v=scalelevels[name]: toggle_slider(v))\ - - sframe = Frame(f,bd=2,relief='groove') - sub.draw_tk(sframe) - sframe.pack(side='left',fill='y') + Subpanels(sub_tl,effect_tl,scalelevels,Subs,xfader,changelevel) # def event_printer(evt): # print dir(evt) # sub_tl.bind('', event_printer) - leveldisplay=Toplevel(root) + leveldisplay=toplevelat(873,400) leveldisplay.bind('', sys.exit) - leveldisplay.wm_geometry('+873+400') - frames = (make_frame(leveldisplay), make_frame(leveldisplay)) - 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,text=_oldlevels[channel-1], 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') - - console() + + Leveldisplay(leveldisplay,_oldlevels) + + Console() # root frame - controlpanel = Frame(root) - xf=Frame(controlpanel) + controlpanel = Controlpanel(root,xfader,refresh,quit) + + xf=Frame(root) xf.pack(side='right') - for txt,cmd in ( - ('Quit', quit), - ('Refresh', refresh), - ('Clear all', xfader.clearallbuttons), - ('On -> X', lambda: xfader.grab('x')), - ('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='Quit', command=quit).pack(side='left') - # Button(controlpanel, text='Refresh', command=refresh).pack(side='left') - # Button(controlpanel, text='Clearxfade', command=xfader.clearallbuttons).pack(side='left') - # Button(controlpanel, text='Grab x', command=lambda: xfader.grab('x')).pack(side='left') - # Button(controlpanel, text='Grab y', command=lambda: xfader.grab('y')).pack(side='left') root.bind('', quit) root.bind('', refresh) @@ -250,6 +130,7 @@ def buildinterface(*args): xfader.setupwidget(xf) controlpanel.pack() + buildinterface() class Pickles: @@ -304,11 +185,11 @@ def make_sub(name): load() signal(SIGINT, quit) -bindkeys('', quit) +bindkeys(root,'', quit) -# bindkeys('', quit) -# bindkeys('', refresh) -# bindkeys('', make_sub) +# bindkeys(root,'', quit) +# bindkeys(root,'', refresh) +# bindkeys(root,'', make_sub) backgroundloop() root.mainloop() # Receiver switches main