Mercurial > code > home > repos > light9
comparison light8/ExtSliderMapper.py @ 102:e04f7b552bcd
- scroll wheel works everywhere
- scroll wheel works everywhere
- interface is white on black
- subs that start scenes are white
- more status information, startup process kinda cleaned up
author | dmcc |
---|---|
date | Sun, 14 Jul 2002 08:01:24 +0000 |
parents | a995fd1a8f03 |
children | ddd3c8f04640 |
comparison
equal
deleted
inserted
replaced
101:a995fd1a8f03 | 102:e04f7b552bcd |
---|---|
8 | 8 |
9 It lets functions take any number of arguments and throw them away. | 9 It lets functions take any number of arguments and throw them away. |
10 Callbacks do this, and we typically don't care about what they have to say. """ | 10 Callbacks do this, and we typically don't care about what they have to say. """ |
11 | 11 |
12 from Tix import * | 12 from Tix import * |
13 from uihelpers import FancyDoubleVar | 13 from uihelpers import FancyDoubleVar, get_selection |
14 | 14 |
15 stdfont = ('Arial', 8) | 15 stdfont = ('Arial', 8) |
16 | 16 |
17 class SliderMapping: | 17 class SliderMapping: |
18 def __init__(self, default='disconnected', synced=0, extinputlevel=0, | 18 def __init__(self, default='disconnected', synced=0, extinputlevel=0, |
31 # we hold on to it so we can change its | 31 # we hold on to it so we can change its |
32 # textvariable | 32 # textvariable |
33 self.statuslabel = None # tells us sync status | 33 self.statuslabel = None # tells us sync status |
34 self.lastbgcolor = None # last background color drawn to avoid | 34 self.lastbgcolor = None # last background color drawn to avoid |
35 # unnecessary redraws | 35 # unnecessary redraws |
36 self.subnames = [] # we need to keep track of this for idiotic reasons | |
36 def sync(self, *args): | 37 def sync(self, *args): |
37 self.synced.set(1) | 38 self.synced.set(1) |
38 self.color_bg() | 39 self.color_bg() |
39 def unsync(self, *args): | 40 def unsync(self, *args): |
40 self.synced.set(0) | 41 self.synced.set(0) |
72 'When a new external level is received, this incorporates it' | 73 'When a new external level is received, this incorporates it' |
73 self.extlevel.set(newlevel) | 74 self.extlevel.set(newlevel) |
74 self.check_synced() | 75 self.check_synced() |
75 self.color_bg() | 76 self.color_bg() |
76 def set_subname(self, newname): | 77 def set_subname(self, newname): |
78 try: | |
79 self.listbox.listbox.select_clear(0, END) | |
80 except IndexError: | |
81 pass | |
82 try: | |
83 newindex = self.subnames.index(newname) | |
84 self.listbox.listbox.select_set(newindex) | |
85 self.listbox.listbox.see(newindex) | |
86 except ValueError: | |
87 pass | |
88 | |
77 self.subname.set(newname) | 89 self.subname.set(newname) |
78 self.unsync() | 90 self.unsync() |
79 self.color_bg() | 91 self.color_bg() |
80 def color_bg(self): | 92 def color_bg(self): |
81 if self.widgets: | 93 if self.widgets: |
130 'Get name of submaster currently mapped' | 142 'Get name of submaster currently mapped' |
131 return self.subname.get() | 143 return self.subname.get() |
132 def get_level_pair(self): | 144 def get_level_pair(self): |
133 'Returns suitable output for ExtSliderMapper.get_levels()' | 145 'Returns suitable output for ExtSliderMapper.get_levels()' |
134 return (self.subname.get(), self.extlevel.get()) | 146 return (self.subname.get(), self.extlevel.get()) |
147 def listbox_cb(self, *args): | |
148 self.subname.set(self.subnames[get_selection(self.listbox.listbox)-0]) | |
135 def draw_interface(self, master, subnames): | 149 def draw_interface(self, master, subnames): |
136 'Draw interface into master, given a list of submaster names' | 150 'Draw interface into master, given a list of submaster names' |
137 frame = Frame(master) | 151 self.subnames = subnames |
138 c = ComboBox(frame, variable=self.subname, dropdown=0) | 152 frame = Frame(master, bg='black') |
139 c.slistbox.listbox.insert(END, "disconnected") | 153 self.listbox = ScrolledListBox(frame, scrollbar='y', bg='black') |
140 # c.listbox.insert(END, "disconnected") | 154 self.listbox.listbox.bind("<<ListboxSelect>>", self.listbox_cb, add=1) |
155 self.listbox.listbox.configure(font=stdfont, exportselection=0, | |
156 selectmode=BROWSE, bg='black', fg='white') | |
157 self.listbox.vsb.configure(troughcolor='black') | |
158 # self.listbox.listbox.insert(END, "disconnected") | |
141 for s in subnames: | 159 for s in subnames: |
142 c.slistbox.listbox.insert(END, s) | 160 self.listbox.listbox.insert(END, s) |
143 # c.listbox.insert(END, s) | 161 statframe = Frame(frame, bg='black') |
144 c.entry.configure(width=12, font=stdfont) | 162 |
145 c.slistbox.listbox.configure(font=stdfont, exportselection=0) | 163 self.statuslabel = Label(statframe, text="No sync", width=15, |
146 statframe = Frame(frame) | 164 font=stdfont) |
147 | |
148 self.statuslabel = Label(statframe, text="No sync", width=15, font=stdfont) | |
149 self.statuslabel.grid(columnspan=2, sticky=W) | 165 self.statuslabel.grid(columnspan=2, sticky=W) |
150 ilabel = Label(statframe, text="Input", fg='blue', font=stdfont) | 166 ilabel = Label(statframe, text="Input", fg='blue', font=stdfont) |
151 ilabel.grid(row=1, sticky=W) | 167 ilabel.grid(row=1, sticky=W) |
152 extlabel = Label(statframe, textvariable=self.extlevel, width=5, font=stdfont) | 168 extlabel = Label(statframe, textvariable=self.extlevel, width=5, |
169 font=stdfont) | |
153 extlabel.grid(row=1, column=1) | 170 extlabel.grid(row=1, column=1) |
154 rlabel = Label(statframe, text="Real", font=stdfont) | 171 rlabel = Label(statframe, text="Real", font=stdfont) |
155 rlabel.grid(row=2, sticky=W) | 172 rlabel.grid(row=2, sticky=W) |
156 self.sublabel = Label(statframe, text="N/A", width=5, font=stdfont) | 173 self.sublabel = Label(statframe, text="N/A", width=5, font=stdfont) |
157 self.sublabel.grid(row=2, column=1) | 174 self.sublabel.grid(row=2, column=1) |
158 disc_button = Button(statframe, text="Disconnect", | 175 disc_button = Button(statframe, text="Disconnect", |
159 command=self.disconnect, padx=0, pady=0, font=stdfont) | 176 command=self.disconnect, padx=0, pady=0, font=stdfont) |
160 disc_button.grid(row=3, columnspan=2) | 177 disc_button.grid(row=3, columnspan=2) |
161 statframe.pack(side=BOTTOM, expand=1, fill=BOTH) | 178 statframe.pack(side=BOTTOM, expand=1, fill=BOTH) |
162 c.pack(expand=1, fill=BOTH) | 179 self.listbox.pack(expand=1, fill=BOTH) |
163 frame.pack(side=LEFT, expand=1, fill=BOTH) | 180 frame.pack(side=LEFT, expand=1, fill=BOTH) |
164 | 181 |
165 self.widgets = [frame, c, statframe, self.statuslabel, ilabel, extlabel, | 182 self.widgets = [frame, self.listbox, statframe, self.statuslabel, |
166 rlabel, self.sublabel, disc_button] | 183 ilabel, extlabel, rlabel, self.sublabel, disc_button] |
167 | 184 |
168 class ExtSliderMapper(Frame): | 185 class ExtSliderMapper(Frame): |
169 def __init__(self, parent, sliderlevels, sliderinput, filename='slidermapping', | 186 def __init__(self, parent, sliderlevels, sliderinput, filename='slidermapping', |
170 numsliders=4): | 187 numsliders=4): |
171 'Slider levels is scalelevels, sliderinput is an ExternalInput object' | 188 'Slider levels is scalelevels, sliderinput is an ExternalInput object' |
172 Frame.__init__(self, parent) | 189 Frame.__init__(self, parent, bg='black') |
173 self.parent = parent | 190 self.parent = parent |
174 self.sliderlevels = sliderlevels | 191 self.sliderlevels = sliderlevels |
175 self.sliderinput = sliderinput | 192 self.sliderinput = sliderinput |
176 self.filename = filename | 193 self.filename = filename |
177 self.numsliders = numsliders | 194 self.numsliders = numsliders |
211 def load_scalelevels(self): | 228 def load_scalelevels(self): |
212 for slidermap in self.current_mappings: | 229 for slidermap in self.current_mappings: |
213 try: | 230 try: |
214 v = self.sliderlevels[slidermap.get_mapping()] | 231 v = self.sliderlevels[slidermap.get_mapping()] |
215 slidermap.set_sublevel_var(v) | 232 slidermap.set_sublevel_var(v) |
233 # print "ESM: Yes submaster named", slidermap.get_mapping() | |
216 except KeyError: | 234 except KeyError: |
217 name = slidermap.get_mapping() | 235 name = slidermap.get_mapping() |
218 if name != 'disconnected': | 236 if name != 'disconnected': |
219 print "ESM: No submaster named", name | 237 print "ESM: No submaster named", name |
220 | 238 |
231 return dict([m.get_level_pair() | 249 return dict([m.get_level_pair() |
232 for m in self.current_mappings | 250 for m in self.current_mappings |
233 if m.issynced()]) | 251 if m.issynced()]) |
234 def draw_interface(self): | 252 def draw_interface(self): |
235 self.reallevellabels = [] | 253 self.reallevellabels = [] |
236 subchoiceframe = Frame(self) | 254 subchoiceframe = Frame(self, bg='black') |
237 for m in self.current_mappings: | 255 for m in self.current_mappings: |
238 m.draw_interface(subchoiceframe, self.subnames) | 256 m.draw_interface(subchoiceframe, self.subnames) |
239 subchoiceframe.pack() | 257 subchoiceframe.pack() |
240 | 258 |
241 presetframe = Frame(self) | 259 presetframe = Frame(self, bg='black') |
242 Label(presetframe, text="Preset:").pack(side=LEFT) | 260 Label(presetframe, text="Preset:", font=('Arial', 10), bg='black', |
261 fg='white').pack(side=LEFT) | |
243 self.presetcombo = ComboBox(presetframe, variable=self.current_preset, | 262 self.presetcombo = ComboBox(presetframe, variable=self.current_preset, |
244 editable=1, command=self.apply_preset) | 263 editable=1, command=self.apply_preset, |
264 dropdown=1) | |
265 self.presetcombo.slistbox.configure(bg='black') | |
266 self.presetcombo.slistbox.listbox.configure(bg='black', fg='white') | |
267 self.presetcombo.entry.configure(bg='black', fg='white') | |
245 self.draw_presets() | 268 self.draw_presets() |
246 self.presetcombo.pack(side=LEFT) | 269 self.presetcombo.pack(side=LEFT) |
247 Button(presetframe, text="Add", padx=0, pady=0, | 270 Button(presetframe, text="Add", padx=0, pady=0, bg='black', |
271 fg='white', font=stdfont, | |
248 command=self.add_preset).pack(side=LEFT) | 272 command=self.add_preset).pack(side=LEFT) |
249 Button(presetframe, text="Delete", padx=0, pady=0, | 273 Button(presetframe, text="Delete", padx=0, pady=0, bg='black', |
274 fg='white', font=stdfont, | |
250 command=self.delete_preset).pack(side=LEFT) | 275 command=self.delete_preset).pack(side=LEFT) |
251 Button(presetframe, text="Disconnect", padx=0, pady=0, | 276 Button(presetframe, text="Disconnect", padx=0, pady=0, bg='black', |
277 fg='white', font=stdfont, | |
252 command=self.disconnect_all).pack(side=LEFT) | 278 command=self.disconnect_all).pack(side=LEFT) |
253 Button(presetframe, text="Reload", padx=0, pady=0, | 279 Button(presetframe, text="Reload", padx=0, pady=0, bg='black', |
280 fg='white', font=stdfont, | |
254 command=self.load_presets).pack(side=LEFT) | 281 command=self.load_presets).pack(side=LEFT) |
255 presetframe.pack(side=BOTTOM) | 282 presetframe.pack(side=BOTTOM) |
256 def apply_preset(self, preset): | 283 def apply_preset(self, preset): |
257 if not preset: return | 284 if not preset: return |
258 preset_mapping = self.presets.get(preset) | 285 preset_mapping = self.presets.get(preset) |