Mercurial > code > home > repos > light9
comparison light8/panels.py @ 78:0969d8a6729d
support for external sliders. fill in ExternalInput with real IO
author | dmcc |
---|---|
date | Fri, 12 Jul 2002 10:05:57 +0000 |
parents | 2dfae9ed1cda |
children | 233fe8cefa36 |
comparison
equal
deleted
inserted
replaced
77:5649f5d9c798 | 78:0969d8a6729d |
---|---|
3 | 3 |
4 from Tix import * | 4 from Tix import * |
5 from uihelpers import * | 5 from uihelpers import * |
6 import Patch | 6 import Patch |
7 from FlyingFader import FlyingFader | 7 from FlyingFader import FlyingFader |
8 import Pmw | |
9 | 8 |
10 stdfont = ('Arial', 8) | 9 stdfont = ('Arial', 8) |
11 monofont = ('Courier', 8) | 10 monofont = ('Courier', 8) |
12 | 11 |
13 class Controlpanel(Frame): | 12 class Controlpanel(Frame): |
20 ('Clear all', xfader.clearallbuttons), | 19 ('Clear all', xfader.clearallbuttons), |
21 ('On -> X', lambda: xfader.grab('x')), | 20 ('On -> X', lambda: xfader.grab('x')), |
22 ('Clear X', lambda: xfader.clearallbuttons('x')), | 21 ('Clear X', lambda: xfader.clearallbuttons('x')), |
23 ('On -> Y', lambda: xfader.grab('y')), | 22 ('On -> Y', lambda: xfader.grab('y')), |
24 ('Clear Y', lambda: xfader.clearallbuttons('y'))): | 23 ('Clear Y', lambda: xfader.clearallbuttons('y'))): |
25 # ('Jostle', jostle_cb)): | |
26 Button(controlpanel, text=txt, command=cmd).pack(side='top', | 24 Button(controlpanel, text=txt, command=cmd).pack(side='top', |
27 fill='x') | 25 fill='x') |
26 # jostle button | |
28 Checkbutton(controlpanel, text="Jostle", | 27 Checkbutton(controlpanel, text="Jostle", |
29 command=jostle_cb).pack(side=TOP, fill=X) | 28 command=jostle_cb).pack(side=TOP, fill=X) |
30 | 29 |
31 class Console: | 30 class Console: |
32 def __init__(self,lightboard): | 31 def __init__(self,lightboard): |
33 print "Light 8: Everything's under control" | 32 print "Light 8: Everything's under control" |
34 t=toplevelat('console', lightboard.windowpos) | 33 t=toplevelat('console') |
35 self.frame = Frame(t) | 34 self.frame = Frame(t) |
36 self.entry=Entry(self.frame) | 35 self.entry=Entry(self.frame) |
37 self.entry.pack(expand=1, fill='x') | 36 self.entry.pack(expand=1, fill='x') |
38 self.entry.bind('<Return>', | 37 self.entry.bind('<Return>', |
39 lambda evt: self.execute(evt, self.entry.get())) | 38 lambda evt: self.execute(evt, self.entry.get())) |
77 f.pack(side='top') | 76 f.pack(side='top') |
78 | 77 |
79 self.channel_levels = channel_levels | 78 self.channel_levels = channel_levels |
80 # channel_levels is an output - changelevel will use it to access | 79 # channel_levels is an output - changelevel will use it to access |
81 # these labels | 80 # these labels |
81 | |
82 class ExtSliderMapper(Frame): | |
83 def __init__(self, parent, sliderlevels, sliderinput, filename='slidermapping', | |
84 numsliders=4): | |
85 'Slider levels is scalelevels, sliderinput is an ExternalInput object' | |
86 Frame.__init__(self, parent) | |
87 self.parent = parent | |
88 self.sliderlevels = sliderlevels | |
89 self.sliderinput = sliderinput | |
90 self.filename = filename | |
91 self.numsliders = numsliders | |
92 self.file = None | |
93 | |
94 # self.setup() | |
95 def setup(self): | |
96 self.subnames = self.sliderlevels.keys() | |
97 self.subnames.sort() | |
98 self.presets = {} | |
99 self.load_presets() | |
100 | |
101 self.current_mapping_name = StringVar() | |
102 self.current_mapping = [] | |
103 self.attached = [] | |
104 self.levels_read = [] | |
105 for i in range(self.numsliders): | |
106 self.current_mapping.append(StringVar()) | |
107 self.attached.append(BooleanVar()) | |
108 self.levels_read.append(DoubleVar()) | |
109 | |
110 self.reallevellabels = [] | |
111 self.draw_interface() | |
112 def load_presets(self): | |
113 self.file = open(self.filename, 'r') | |
114 lines = self.file.readlines() | |
115 for l in lines: | |
116 tokens = l[:-1].split('\t') | |
117 name = tokens.pop(0) | |
118 self.presets[name] = tokens | |
119 self.file.close() | |
120 def save_presets(self): | |
121 self.file = open(self.filename, 'w') | |
122 self.file.seek(0) | |
123 preset_names = self.presets.keys() | |
124 preset_names.sort() | |
125 for p in preset_names: | |
126 s = '\t'.join([p] + self.presets[p]) + '\n' | |
127 self.file.write(s) | |
128 self.file.close() | |
129 def load_scalelevels(self): | |
130 for m, rll in zip(self.current_mapping, self.reallevellabels): | |
131 try: | |
132 v = self.sliderlevels[m.get()] | |
133 rll.configure(textvariable=v) | |
134 except KeyError: | |
135 pass | |
136 | |
137 def get_levels(self): | |
138 'To be called by changelevels, I think' | |
139 if not self.current_mapping_name: return {} | |
140 if not self.sliderinput: return {} | |
141 | |
142 self.load_scalelevels() | |
143 | |
144 rawlevels = self.sliderinput.get_levels() | |
145 for rawlev, levlabvar in zip(rawlevels, self.levels_read): | |
146 levlabvar.set(rawlev) | |
147 outputlevels = {} | |
148 return dict([(name.get(), lev) | |
149 for name, lev, att in zip(self.current_mapping, | |
150 rawlevels, | |
151 self.attached) | |
152 if att.get()]) | |
153 | |
154 def draw_interface(self): | |
155 self.reallevellabels = [] | |
156 subchoiceframe = Frame(self) | |
157 for i, mapping, isattached, lev in zip(range(self.numsliders), | |
158 self.current_mapping, | |
159 self.attached, | |
160 self.levels_read): | |
161 f = Frame(subchoiceframe) | |
162 # Label(f, text="Slider %d" % (i+1)).pack(side=LEFT) | |
163 c = ComboBox(f, variable=mapping) | |
164 for s in self.subnames: | |
165 c.slistbox.listbox.insert(END, s) | |
166 c.entry.configure(width=12) | |
167 statframe = Frame(f) | |
168 Checkbutton(statframe, variable=isattached, | |
169 text="Attached").grid(columnspan=2, sticky=W) | |
170 Label(statframe, text="Input", fg='red').grid(row=1, sticky=W) | |
171 Label(statframe, textvariable=lev, fg='red', width=5).grid(row=1, column=1) | |
172 Label(statframe, text="Real").grid(row=2, sticky=W) | |
173 l = Label(statframe, text="N/A", width=5) | |
174 l.grid(row=2, column=1) | |
175 self.reallevellabels.append(l) | |
176 statframe.pack(side=BOTTOM, expand=1, fill=X) | |
177 c.pack() | |
178 f.pack(side=LEFT) | |
179 subchoiceframe.pack() | |
180 | |
181 presetframe = Frame(self) | |
182 Label(presetframe, text="Preset:").pack(side=LEFT) | |
183 self.presetcombo = ComboBox(presetframe, variable=self.current_mapping_name, | |
184 editable=1, command=self.apply_preset) | |
185 self.draw_presets() | |
186 self.presetcombo.pack(side=LEFT) | |
187 Button(presetframe, text="Add", padx=0, pady=0, | |
188 command=self.add_preset).pack(side=LEFT) | |
189 Button(presetframe, text="Delete", padx=0, pady=0, | |
190 command=self.delete_preset).pack(side=LEFT) | |
191 presetframe.pack(side=BOTTOM) | |
192 def apply_preset(self, preset): | |
193 if not preset: return | |
194 mapping = self.presets.get(preset) | |
195 if not mapping: return | |
196 for name, var, att in zip(mapping, self.current_mapping, self.attached): | |
197 var.set(name) | |
198 att.set(0) # detach all sliders | |
199 def delete_preset(self, *args): | |
200 del self.presets[self.current_mapping_name.get()] | |
201 self.presetcombo.slistbox.listbox.delete(0, END) | |
202 self.draw_presets() | |
203 self.save_presets() | |
204 def add_preset(self, *args): | |
205 self.presets[self.current_mapping_name.get()] = [m.get() | |
206 for m in self.current_mapping] | |
207 self.presetcombo.slistbox.listbox.delete(0, END) | |
208 self.draw_presets() | |
209 self.save_presets() | |
210 def draw_presets(self): | |
211 preset_names = self.presets.keys() | |
212 preset_names.sort() | |
213 for p in preset_names: | |
214 self.presetcombo.slistbox.listbox.insert(END, p) | |
215 | |
216 | |
82 | 217 |
83 class Subpanels: | 218 class Subpanels: |
84 def __init__(self, scenesparent, effectsparent, scenes, lightboard, | 219 def __init__(self, scenesparent, effectsparent, scenes, lightboard, |
85 scalelevels, Subs, xfader, | 220 scalelevels, Subs, xfader, |
86 changelevel, subediting, longestname): | 221 changelevel, subediting, longestname): |
193 cb.pack(side=side1,fill='both', padx=0, pady=0) | 328 cb.pack(side=side1,fill='both', padx=0, pady=0) |
194 s.bind('<Key-%s>'%axis, lambda ev,cb=cb: cb.invoke) | 329 s.bind('<Key-%s>'%axis, lambda ev,cb=cb: cb.invoke) |
195 xfader.registerbutton(name,axis,cvar) | 330 xfader.registerbutton(name,axis,cvar) |
196 | 331 |
197 | 332 |
333 if __name__ == '__main__': | |
334 print "testing external sliders" | |
335 root = Tk() | |
336 fakesliderlevels = dict([('sub%d' % n, DoubleVar()) for n in range(12)]) | |
337 esm = ExtSliderMapper(root, fakesliderlevels, None) | |
338 esm.pack() | |
339 | |
340 mainloop() |