Mercurial > code > home > repos > light9
diff light8/panels.py @ 0:45b12307c695
Initial revision
author | drewp |
---|---|
date | Wed, 03 Jul 2002 09:37:57 +0000 |
parents | |
children | 7adc65771676 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/light8/panels.py Wed Jul 03 09:37:57 2002 +0000 @@ -0,0 +1,201 @@ +"""some of the panels""" +from __future__ import nested_scopes + +from Tix 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 + for txt,cmd in ( + ('Quit', quit_cb), + ('Refresh', refresh_cb), + ('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')), + ("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) + +class Console: + def __init__(self,lightboard): + t=toplevelat('console') + self.frame = Frame(t, bg='black') + self.entry=Entry(self.frame, bg='black', fg='white') + self.entry.pack(expand=1, fill='x') + self.entry.bind('<Return>', + 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()) + else: + print '>>>', str + print eval(str) + self.frame.focus() + +class Leveldisplay: + def __init__(self, parent, channel_levels, num_channels=68): + 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) + 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): + + 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("<ButtonPress-%s>"%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) + + + # 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'} + if sub.color: + scaleopts['troughcolor'] = sub.color + + 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') + + # 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) + + # 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('<Key-%s>'%axis, lambda ev,cb=cb: cb.invoke) + xfader.registerbutton(name,axis,cvar)