diff --git a/light8/panels.py b/light8/panels.py --- a/light8/panels.py +++ b/light8/panels.py @@ -1,19 +1,18 @@ """some of the panels""" -from __future__ import nested_scopes -from Tix import * +from Tkinter import * from uihelpers import * import Patch -from FlyingFader import FlyingFader stdfont = ('Arial', 8) monofont = ('Courier', 8) + + class Controlpanel(Frame): - def __init__(self, parent, xfader, refresh_cb, quit_cb, jostle_cb, - whatsup_cb=None): - Frame.__init__(self,parent, bg='black') - controlpanel = self + def __init__(self,parent,xfader,refresh_cb,quit_cb): + Frame.__init__(self,parent) + controlpanel=self for txt,cmd in ( ('Quit', quit_cb), ('Refresh', refresh_cb), @@ -21,181 +20,92 @@ class Controlpanel(Frame): ('On -> X', lambda: xfader.grab('x')), ('Clear X', lambda: xfader.clearallbuttons('x')), ('On -> Y', lambda: xfader.grab('y')), - ('Clear Y', lambda: xfader.clearallbuttons('y')), - ("What's up?", whatsup_cb)): - Button(controlpanel, text=txt, command=cmd, bg='black', - fg='white',font=stdfont, padx=0, pady=0).pack(side='top', fill='x') - # jostle button - Checkbutton(controlpanel, text="Jostle", bg='black', fg='white', - command=jostle_cb).pack(side=TOP, fill=X) + ('Clear Y', lambda: xfader.clearallbuttons('y'))): + Button(controlpanel, text=txt, command=cmd).pack(side='top', fill='x') + class Console: - def __init__(self,lightboard): - t=toplevelat('console') - self.frame = Frame(t, bg='black') - self.entry=Entry(self.frame, bg='black', fg='white') + def __init__(self): + print "Light 8: Everything's under control" + t=toplevelat(267,717,w=599,h=19) + 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) - self.lightboard=lightboard - def execute(self, evt, str): - if str[0] == '*': # make a new sub from the current levels - self.lightboard.save_sub(str,self.lightboard.stageassub()) + def execute(evt, str): + if str[0] == '*': # make a new sub + make_sub(str) else: print '>>>', str print eval(str) - self.frame.focus() + self.frame.focus() class Leveldisplay: - def __init__(self, parent, channel_levels, num_channels=68): + def __init__(self,parent,_oldlevels): + global channel_levels + frames = (make_frame(parent), make_frame(parent)) - channel_levels[:]=[] - 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='grey40', - fg='white', font=stdfont, padx=0, pady=0, bd=0, height=1) - num_lab.pack(side='left') - self.number_labels.append(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, bg='black', fg='white').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) + 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') - 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, scenes, lightboard, - scalelevels, Subs, xfader, - changelevel, subediting, longestname): + def __init__(self,scenesparent,effectsparent,scalelevels,Subs,xfader,changelevel): sublist = Subs.subs.items() sublist.sort() - for p in scenesparent,effectsparent,scenes: - sw = ScrolledWindow(p, bg='black') - for but,units in ( (4,-4),(5,4) ): - sw.window.bind(""%but,lambda ev,s=sw.vsb,u=units: s.tk.call('tkScrollByUnits',s,'hv',u)) - - sw.pack(expand=1,fill=BOTH) - if p==scenesparent: - scenesparent = sw.window - elif p==effectsparent: - effectsparent = sw.window - else: - scenes=sw.window - for name, sub in sublist: - # choose one of the sub panels to add to if sub.is_effect: parent=effectsparent - side1='bottom' - side2='left' - orient1='vert' - end1=0 - end2=1 - width1=len(name) - elif name.startswith("*") and name[1].isdigit(): - parent=scenes - side1='right' - side2='top' - orient1='horiz' - end1=1 - end2=0 - width1=longestname else: parent=scenesparent - side1='right' - side2='top' - orient1='horiz' - end1=1 - end2=0 - width1=longestname - # make frame that surrounds the whole submaster - f=Frame(parent, bd=1, relief='raised', bg='black') - f.pack(fill='both',exp=1,side=side2) - + f=Frame(parent, bd=1, relief='raised') + f.pack(fill='both',exp=1,side='left') - # make DoubleVar (there might be one left around from - # before a refresh) if name not in scalelevels: - # scalelevels[name]=FancyDoubleVar() scalelevels[name]=DoubleVar() sub.set_slider_var(scalelevels[name]) - scaleopts = {'troughcolor' : 'grey70'} + 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') - s = FlyingFader(f, label=str(name), variable=scalelevels[name], - showvalue=0, length=100, - width=14, sliderlength=14, - to=end1,res=.001,from_=end2,bd=1, font=stdfont, - orient=orient1, - labelwidth=width1, - **scaleopts) - s.configure(bg='black') - s.label.configure(bg='black', fg='white') - s.vlabel.configure(bg='black', fg='white') - s.scale.configure(bg='black', fg='white') + 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) - # tell subediting what widgets to highlight when it's - # editing a sub - for w in (s,s.label,s.vlabel, s.scale): - subediting.register(subname=name,widget=w) - - if not sub.is_effect: - self.subeditingbuttons(f,side1,sub,name,lightboard,subediting) - - self.axisbuttons(f,s,xfader,stdfont,side1,name) - - s.pack(side='left', fill=BOTH, expand=1) + s.pack(side='left') + s.bind('<3>', lambda evt, v=scalelevels[name]: toggle_slider(v))\ # effects frame? sframe = Frame(f,bd=2,relief='groove') sub.draw_tk(sframe) sframe.pack(side='left',fill='y') - def subediting_edit(self,subediting,sub): - subediting.setsub(sub) - - def subediting_save(self,name,sub,lightboard): - lightboard.save_sub(name,sub.getlevels(),refresh=0) - - def subeditingbuttons(self,f,side1,sub,name,lightboard,subediting): - for txt,cmd in (("Edit",lambda subediting=subediting,sub=sub: self.subediting_edit(subediting,sub)), - ("Save",lambda sub=sub,name=name,lightboard=lightboard: self.subediting_save(name,sub,lightboard)), - ("SaveStg",lambda l=lightboard,name=name: l.save_sub(name,l.stageassub(),refresh=1)), - ): - eb = Button(f,text=txt,font=stdfont,padx=0,pady=0, - bd=1,command=cmd, bg='black', fg='white') - eb.pack(side=side1,fill='both',padx=0,pady=0) - - def axisbuttons(self,f,s,xfader,stdfont,side1,name): - for axis in ('y','x'): - cvar=IntVar() - eb_color = ('red', 'green')[axis == 'y'] - cb=Togglebutton(f,text=axis.upper(),variable=cvar,font=stdfont, - padx=3, pady=0, bd=1, downcolor=eb_color, - bg='black', fg='white') - cb.pack(side=side1,fill='both', padx=0, pady=0) - s.bind(''%axis, lambda ev,cb=cb: cb.invoke) - xfader.registerbutton(name,axis,cvar) +