Mercurial > code > home > repos > light9
comparison light8/panels.py @ 79:233fe8cefa36
ExtSliderMapping moved to new file
author | dmcc |
---|---|
date | Fri, 12 Jul 2002 10:38:25 +0000 |
parents | 0969d8a6729d |
children | d5deeed83228 |
comparison
equal
deleted
inserted
replaced
78:0969d8a6729d | 79:233fe8cefa36 |
---|---|
76 f.pack(side='top') | 76 f.pack(side='top') |
77 | 77 |
78 self.channel_levels = channel_levels | 78 self.channel_levels = channel_levels |
79 # channel_levels is an output - changelevel will use it to access | 79 # channel_levels is an output - changelevel will use it to access |
80 # 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 | |
217 | 81 |
218 class Subpanels: | 82 class Subpanels: |
219 def __init__(self, scenesparent, effectsparent, scenes, lightboard, | 83 def __init__(self, scenesparent, effectsparent, scenes, lightboard, |
220 scalelevels, Subs, xfader, | 84 scalelevels, Subs, xfader, |
221 changelevel, subediting, longestname): | 85 changelevel, subediting, longestname): |
326 cb=Togglebutton(f,text=axis.upper(),variable=cvar,font=stdfont, | 190 cb=Togglebutton(f,text=axis.upper(),variable=cvar,font=stdfont, |
327 padx=3, pady=0, bd=1, downcolor=eb_color) | 191 padx=3, pady=0, bd=1, downcolor=eb_color) |
328 cb.pack(side=side1,fill='both', padx=0, pady=0) | 192 cb.pack(side=side1,fill='both', padx=0, pady=0) |
329 s.bind('<Key-%s>'%axis, lambda ev,cb=cb: cb.invoke) | 193 s.bind('<Key-%s>'%axis, lambda ev,cb=cb: cb.invoke) |
330 xfader.registerbutton(name,axis,cvar) | 194 xfader.registerbutton(name,axis,cvar) |
331 | |
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() |