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)