Mercurial > code > home > repos > light9
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): |