comparison light8/rsn.py @ 12:7adc65771676

big restructuring - moved lots of things (including most panels) to other files
author drewp
date Sun, 07 Jul 2002 06:16:11 +0000
parents f974a462133f
children 7dbe8067acea
comparison
equal deleted inserted replaced
11:c65119b66b00 12:7adc65771676
5 from parport import * 5 from parport import *
6 from time import sleep 6 from time import sleep
7 from signal import * 7 from signal import *
8 import sys, thread, cPickle 8 import sys, thread, cPickle
9 9
10 import io
11 from uihelpers import *
12 from panels import *
10 from Xfader import * 13 from Xfader import *
14 import stage
11 15
12 if len(sys.argv) >= 2: 16 if len(sys.argv) >= 2:
13 DUMMY = 0 17 DUMMY = 0
14 print "This is the real thing, baby" 18 print "This is the real thing, baby"
15 window_title = "Light 8.8 (On Air)" 19 window_title = "Light 8.8 (On Air)"
30 print "Patch:", Patch.patch 34 print "Patch:", Patch.patch
31 print "Subs:", ', '.join(Subs.subs.keys()) 35 print "Subs:", ', '.join(Subs.subs.keys())
32 36
33 get_data() 37 get_data()
34 38
35 if not DUMMY: 39 io.init(DUMMY)
36 getparport()
37
38 def sendlevels(levels):
39 if DUMMY: return
40 levels = list(levels) + [0]
41 if levels[14] > 0: levels[14] = 100
42 # print "levels", ' '.join(["%3.1f" % l for l in levels])
43 outstart()
44 for p in range(1,70):
45 outbyte(levels[p-1]*255/100)
46 40
47 channel_levels = [] 41 channel_levels = []
48 scalelevels = {} 42 scalelevels = {}
49 fades = {} 43 fades = {}
50 stdfont = ('Arial', 8)
51 monofont = ('Courier', 8)
52
53 def colorlabel(label):
54 txt=label['text'] or "0"
55 lev=float(txt)/100
56 low=(80,80,180)
57 high=(255,55,050)
58 out = [int(l+lev*(h-l)) for h,l in zip(high,low)]
59 col="#%02X%02X%02X" % tuple(out)
60 label.config(bg=col)
61 44
62 _oldlevels=[None] * 68 45 _oldlevels=[None] * 68
63 46
64 def changelevel(*args): 47 def changelevel(*args):
65 'Amp trims slider' 48 'Amp trims slider'
78 lab.config(text="%d" % lev) 61 lab.config(text="%d" % lev)
79 colorlabel(lab) 62 colorlabel(lab)
80 63
81 _oldlevels = levels[:] 64 _oldlevels = levels[:]
82 65
83 sendlevels(levels) 66 io.sendlevels(levels)
84 67
85 def backgroundloop(*args): 68 def backgroundloop(*args):
86 root.after(50, backgroundloop, ()) 69 root.after(50, backgroundloop, ())
87 changelevel() 70 changelevel()
88
89 def make_frame(parent):
90 f = Frame(parent, bd=0)
91 f.pack(side='left')
92 return f
93
94 def add_fade(slider, evt):
95 print 'b3!'
96
97 def execute(evt, str):
98 if str[0] == '*': # make a new sub
99 make_sub(str)
100 else:
101 print '>>>', str
102 print eval(str)
103 console_frame.focus()
104
105 def console():
106 global console_entry, console_frame
107 print "Light 8: Everything's under control"
108 t=Toplevel(root)
109 console_frame = Frame(t)
110 console_entry=Entry(console_frame)
111 console_entry.pack(expand=1, fill='x')
112 console_entry.bind('<Return>', lambda evt: execute(evt,
113 console_entry.get()))
114 console_frame.pack(fill=BOTH, expand=1)
115 t.wm_geometry("599x19+267+717")
116 71
117 buildinterface = None # temporary 72 buildinterface = None # temporary
118 def refresh(*args): 73 def refresh(*args):
119 get_data() 74 get_data()
120 buildinterface() 75 buildinterface()
121 bindkeys('<Escape>', quit) 76 bindkeys(root,'<Escape>', quit)
122 77
123 def quit(*args): 78 def quit(*args):
124 filename = '/tmp/light9.prefs' 79 filename = '/tmp/light9.prefs'
125 if DUMMY: 80 if DUMMY:
126 filename += '.dummy' 81 filename += '.dummy'
128 file = open(filename, 'w') 83 file = open(filename, 'w')
129 cPickle.dump(Pickles(scalelevels), file) 84 cPickle.dump(Pickles(scalelevels), file)
130 root.destroy() 85 root.destroy()
131 sys.exit() 86 sys.exit()
132 87
133 def bindkeys(key, func): 88
134 root.bind(key, func) 89 xfader=Xfader(scalelevels)
135 for w in root.winfo_children():
136 w.bind(key, func)
137 90
138 91
139 def toggle_slider(s):
140 if s.get() == 0:
141 s.set(100)
142 else:
143 s.set(0)
144 def printout(t):
145 print t
146
147 xfader=Xfader(scalelevels)
148 92
149 def buildinterface(*args): 93 def buildinterface(*args):
150 global channel_levels, _oldlevels, leveldisplay, stdfont, monofnt, xfader 94 global channel_levels, _oldlevels, leveldisplay, xfader
151 for w in root.winfo_children(): 95 for w in root.winfo_children():
152 w.destroy() 96 w.destroy()
153 97
154 sublist = Subs.subs.items() 98 stage_tl=toplevelat(165,90)
155 sublist.sort() 99 s=stage.Stage(stage_tl)
100 stage.createlights(s)
101 s.pack()
156 102
157 sub_tl = Toplevel() 103 sub_tl = toplevelat(0,0)
158 sub_tl.wm_geometry("+0+0") 104 effect_tl = toplevelat(0,352)
159 effect_tl = Toplevel()
160 effect_tl.wm_geometry("+0+352")
161 105
162 for name, sub in sublist: 106 Subpanels(sub_tl,effect_tl,scalelevels,Subs,xfader,changelevel)
163 if sub.is_effect:
164 f=Frame(effect_tl, bd=1, relief='raised')
165 else:
166 f=Frame(sub_tl, bd=1, relief='raised')
167
168 f.pack(fill='both',exp=1,side='left')
169
170 if name not in scalelevels:
171 scalelevels[name]=DoubleVar()
172
173 sub.set_slider_var(scalelevels[name])
174
175 scaleopts = {}
176 if sub.color:
177 scaleopts['troughcolor'] = sub.color
178 s=Scale(f,command=lambda l,name=name: changelevel(name,l),showvalue=0,
179 length=300-17,variable=scalelevels[name],width=20,
180 to=0,res=.001,from_=1,bd=1, **scaleopts)
181 l=Label(f,text=str(name), font=stdfont, padx=0, pady=0)
182 v=Label(f,textvariable=scalelevels[name], font=stdfont, padx=0, pady=0)
183 l.pack(side='bottom')
184 v.pack(side='bottom')
185
186 for axis in ('y','x'):
187 cvar=IntVar()
188 cb=Checkbutton(f,text=axis,variable=cvar,font=stdfont, padx=0, pady=0, bd=1)
189 button = ('Alt','Control')[axis=='y'] # unused?
190 # s.bind('<Key-%s>'%axis, lambda ev,cb=cb: cb.invoke)
191 cb.pack(side='bottom',fill='both', padx=0, pady=0)
192 xfader.registerbutton(name,axis,cvar)
193
194 s.pack(side='left')
195 s.bind('<3>', lambda evt, v=scalelevels[name]: toggle_slider(v))\
196
197 sframe = Frame(f,bd=2,relief='groove')
198 sub.draw_tk(sframe)
199 sframe.pack(side='left',fill='y')
200 107
201 # def event_printer(evt): 108 # def event_printer(evt):
202 # print dir(evt) 109 # print dir(evt)
203 110
204 # sub_tl.bind('<b>', event_printer) 111 # sub_tl.bind('<b>', event_printer)
205 leveldisplay=Toplevel(root) 112 leveldisplay=toplevelat(873,400)
206 leveldisplay.bind('<Escape>', sys.exit) 113 leveldisplay.bind('<Escape>', sys.exit)
207 leveldisplay.wm_geometry('+873+400') 114
208 frames = (make_frame(leveldisplay), make_frame(leveldisplay)) 115 Leveldisplay(leveldisplay,_oldlevels)
209 channel_levels=[] 116
210 for channel in range(1, 69): 117 Console()
211 f=Frame(frames[channel > 34])
212 Label(f,text=str(channel), width=3, bg='lightPink',
213 font=stdfont, padx=0, pady=0, bd=0, height=1).pack(side='left')
214 Label(f,text=Patch.get_channel_name(channel), width=8,
215 font=stdfont, anchor='w', padx=0, pady=0, bd=0, height=1).pack(side='left')
216 l=Label(f,text=_oldlevels[channel-1], width=3, bg='lightBlue',
217 font=stdfont, anchor='e', padx=1, pady=0, bd=0, height=1)
218 l.pack(side='left')
219 colorlabel(l)
220 channel_levels.append(l)
221 f.pack(side='top')
222
223 console()
224 118
225 # root frame 119 # root frame
226 controlpanel = Frame(root) 120 controlpanel = Controlpanel(root,xfader,refresh,quit)
227 xf=Frame(controlpanel) 121
122 xf=Frame(root)
228 xf.pack(side='right') 123 xf.pack(side='right')
229 for txt,cmd in (
230 ('Quit', quit),
231 ('Refresh', refresh),
232 ('Clear all', xfader.clearallbuttons),
233 ('On -> X', lambda: xfader.grab('x')),
234 ('Clear X', lambda: xfader.clearallbuttons('x')),
235 ('On -> Y', lambda: xfader.grab('y')),
236 ('Clear Y', lambda: xfader.clearallbuttons('y'))):
237 Button(controlpanel, text=txt, command=cmd).pack(side='top', fill='x')
238
239 # Button(controlpanel, text='Quit', command=quit).pack(side='left')
240 # Button(controlpanel, text='Refresh', command=refresh).pack(side='left')
241 # Button(controlpanel, text='Clearxfade', command=xfader.clearallbuttons).pack(side='left')
242 # Button(controlpanel, text='Grab x', command=lambda: xfader.grab('x')).pack(side='left')
243 # Button(controlpanel, text='Grab y', command=lambda: xfader.grab('y')).pack(side='left')
244 124
245 root.bind('<q>', quit) 125 root.bind('<q>', quit)
246 root.bind('<r>', refresh) 126 root.bind('<r>', refresh)
247 leveldisplay.bind('<q>', quit) 127 leveldisplay.bind('<q>', quit)
248 leveldisplay.bind('<r>', refresh) 128 leveldisplay.bind('<r>', refresh)
249 129
250 xfader.setupwidget(xf) 130 xfader.setupwidget(xf)
251 controlpanel.pack() 131 controlpanel.pack()
132
252 133
253 buildinterface() 134 buildinterface()
254 135
255 class Pickles: 136 class Pickles:
256 def __init__(self, scalelevels): 137 def __init__(self, scalelevels):
302 print 'Added sub:', st 183 print 'Added sub:', st
303 refresh() 184 refresh()
304 185
305 load() 186 load()
306 signal(SIGINT, quit) 187 signal(SIGINT, quit)
307 bindkeys('<Escape>', quit) 188 bindkeys(root,'<Escape>', quit)
308 189
309 # bindkeys('<q>', quit) 190 # bindkeys(root,'<q>', quit)
310 # bindkeys('<r>', refresh) 191 # bindkeys(root,'<r>', refresh)
311 # bindkeys('<s>', make_sub) 192 # bindkeys(root,'<s>', make_sub)
312 backgroundloop() 193 backgroundloop()
313 root.mainloop() # Receiver switches main 194 root.mainloop() # Receiver switches main
314 195
315 while 1: 196 while 1:
316 for lev in range(0,255,25)+range(255,0,-25): 197 for lev in range(0,255,25)+range(255,0,-25):