Mercurial > code > home > repos > light9
comparison flax/CueFaders.py @ 163:e0c227168519
- LabelledScales allow for optional formatters
- LabelledScales allow for optional formatters
- more recoloring
- cuelist supports wheel scrolling now
- remove old inefficient cue redrawer
- basic geometry
- share changes to the dummy cuelist
author | dmcc |
---|---|
date | Tue, 08 Jul 2003 08:09:12 +0000 |
parents | 6c5753bad783 |
children | 79bc84310e80 |
comparison
equal
deleted
inserted
replaced
162:6c5753bad783 | 163:e0c227168519 |
---|---|
13 | 13 |
14 class LabelledScale(Tk.Frame): | 14 class LabelledScale(Tk.Frame): |
15 """Scale with two labels: a name and current value""" | 15 """Scale with two labels: a name and current value""" |
16 def __init__(self, master, label, **opts): | 16 def __init__(self, master, label, **opts): |
17 Tk.Frame.__init__(self, master, bd=2, relief='raised', bg='black') | 17 Tk.Frame.__init__(self, master, bd=2, relief='raised', bg='black') |
18 self.labelformatter = opts.get('labelformatter') | |
19 try: | |
20 del opts['labelformatter'] | |
21 except KeyError: | |
22 pass | |
23 | |
18 opts.setdefault('variable', Tk.DoubleVar()) | 24 opts.setdefault('variable', Tk.DoubleVar()) |
19 opts.setdefault('showvalue', 0) | 25 opts.setdefault('showvalue', 0) |
20 | 26 |
21 self.normaltrough = opts.get('troughcolor', 'black') | 27 self.normaltrough = opts.get('troughcolor', 'black') |
22 self.flashtrough = opts.get('flashtroughcolor', 'red') | 28 self.flashtrough = opts.get('flashtroughcolor', 'red') |
23 del opts['flashtroughcolor'] | 29 try: |
30 del opts['flashtroughcolor'] | |
31 except KeyError: | |
32 pass | |
24 | 33 |
25 self.scale_var = opts['variable'] | 34 self.scale_var = opts['variable'] |
26 self.scale = Tk.Scale(self, **opts) | 35 self.scale = Tk.Scale(self, **opts) |
27 self.scale.pack(side='top', expand=1, fill='both') | 36 self.scale.pack(side='top', expand=1, fill='both') |
28 self.name = Tk.Label(self, text=label, bg='black', fg='white') | 37 self.name = Tk.Label(self, text=label, bg='black', fg='white') |
29 self.name.pack(side='bottom') | 38 self.name.pack(side='bottom') |
30 self.scale_value = Tk.Label(self, width=6, bg='black', fg='white') | 39 self.scale_value = Tk.Label(self, bg='black', fg='white') |
31 self.scale_value.pack(side='bottom') | 40 self.scale_value.pack(side='bottom') |
32 self.scale_var.trace('w', self.update_value_label) | 41 self.scale_var.trace('w', self.update_value_label) |
33 self.update_value_label() | 42 self.update_value_label() |
34 self.disabled = (self.scale['state'] == 'disabled') | 43 self.disabled = (self.scale['state'] == 'disabled') |
35 def set_label(self, label): | 44 def set_label(self, label): |
36 self.name['text'] = label | 45 self.name['text'] = label |
37 def update_value_label(self, *args): | 46 def update_value_label(self, *args): |
38 val = self.scale_var.get() * 100 | 47 val = self.scale_var.get() * 100 |
39 self.scale_value['text'] = "%0.2f" % val | 48 if self.labelformatter: |
49 format = self.labelformatter(val) | |
50 else: | |
51 format = "%0.2f" % val | |
52 self.scale_value['text'] = format | |
40 if val != 0: | 53 if val != 0: |
41 self.scale['troughcolor'] = self.flashtrough | 54 self.scale['troughcolor'] = self.flashtrough |
42 else: | 55 else: |
43 self.scale['troughcolor'] = self.normaltrough | 56 self.scale['troughcolor'] = self.normaltrough |
44 def disable(self): | 57 def disable(self): |
99 if self.disabled: | 112 if self.disabled: |
100 self.button['state'] = 'normal' | 113 self.button['state'] = 'normal' |
101 self.disabled = 0 | 114 self.disabled = 0 |
102 def set_time(self, time): | 115 def set_time(self, time): |
103 self.timer_var.set(time) | 116 self.timer_var.set(time) |
117 def get_time(self): | |
118 return self.timer_var.get() | |
104 | 119 |
105 class CueFader(Tk.Frame): | 120 class CueFader(Tk.Frame): |
106 def __init__(self, master, cuelist): | 121 def __init__(self, master, cuelist): |
107 Tk.Frame.__init__(self, master, bg='black') | 122 Tk.Frame.__init__(self, master, bg='black') |
108 self.cuelist = cuelist | 123 self.cuelist = cuelist |
126 fg='white', bg='blue') | 141 fg='white', bg='blue') |
127 self.set_prev_button.pack(side='left') | 142 self.set_prev_button.pack(side='left') |
128 | 143 |
129 self.auto_shift_checkbutton = Tk.Checkbutton(topframe, | 144 self.auto_shift_checkbutton = Tk.Checkbutton(topframe, |
130 variable=self.auto_shift, text='Autoshift', | 145 variable=self.auto_shift, text='Autoshift', |
131 command=self.toggle_autoshift, bg='black', fg='white') | 146 command=self.toggle_autoshift, bg='black', fg='white', |
132 self.auto_shift_checkbutton.pack(side='left') | 147 highlightbackground='black') |
148 self.auto_shift_checkbutton.pack(fill='both', side='left') | |
133 | 149 |
134 self.set_next_button = Tk.Button(topframe, text='Set Next', | 150 self.set_next_button = Tk.Button(topframe, text='Set Next', |
135 command=lambda: cuelist.set_selection_as_next(), | 151 command=lambda: cuelist.set_selection_as_next(), |
136 fg='white', bg='red') | 152 fg='white', bg='red') |
137 self.set_next_button.pack(side='left') | 153 self.set_next_button.pack(side='left') |
142 self.direction_info = (('Prev', 1, 0, 'left', 'blue'), | 158 self.direction_info = (('Prev', 1, 0, 'left', 'blue'), |
143 ('Next', 0, 1, 'right', 'red')) | 159 ('Next', 0, 1, 'right', 'red')) |
144 for name, start, end, side, color in self.direction_info: | 160 for name, start, end, side, color in self.direction_info: |
145 frame = Tk.Frame(self, bg='black') | 161 frame = Tk.Frame(self, bg='black') |
146 scale = LabelledScale(frame, name, from_=start, to_=end, | 162 scale = LabelledScale(frame, name, from_=start, to_=end, |
147 res=0.0001, orient='horiz', flashtroughcolor=color) | 163 res=0.0001, orient='horiz', flashtroughcolor=color, |
164 labelformatter=lambda val, name=name: self.get_scale_desc(val, | |
165 name)) | |
148 scale.pack(fill='x', expand=0) | 166 scale.pack(fill='x', expand=0) |
149 go = TimedGoButton(frame, 'Go %s' % name, scale, bg=color, | 167 go = TimedGoButton(frame, 'Go %s' % name, scale, bg=color, |
150 fg='white') | 168 fg='white') |
151 go.pack(fill='both', expand=1) | 169 go.pack(fill='both', expand=1) |
152 frame.pack(side=side, fill='both', expand=1) | 170 frame.pack(side=side, fill='both', expand=1) |
169 self.autoshift(name, scale) | 187 self.autoshift(name, scale) |
170 | 188 |
171 scale.scale.bind("<ButtonPress>", button_press) | 189 scale.scale.bind("<ButtonPress>", button_press) |
172 scale.scale.bind("<ButtonRelease>", button_release) | 190 scale.scale.bind("<ButtonRelease>", button_release) |
173 faderframe.pack(side='bottom', fill='both', expand=1) | 191 faderframe.pack(side='bottom', fill='both', expand=1) |
192 def get_scale_desc(self, val, name): | |
193 go_button = self.go_buttons.get(name) | |
194 if go_button: | |
195 time = go_button.get_time() | |
196 return "%0.2f%%, %0.1fs left" % (val, time - ((val / 100.0) * time)) | |
197 else: | |
198 return "%0.2f%%" % val | |
174 def toggle_autoshift(self): | 199 def toggle_autoshift(self): |
175 for name, button in self.shift_buttons.items(): | 200 for name, button in self.shift_buttons.items(): |
176 if not self.auto_shift.get(): | 201 if not self.auto_shift.get(): |
177 button.pack(side='bottom', fill='both', expand=1) | 202 button.pack(side='bottom', fill='both', expand=1) |
178 else: | 203 else: |
318 self.scrolled_hlist = Tk.ScrolledHList(self, | 343 self.scrolled_hlist = Tk.ScrolledHList(self, |
319 options='hlist.columns %d hlist.header 1' % len(self.columns)) | 344 options='hlist.columns %d hlist.header 1' % len(self.columns)) |
320 self.hlist = self.scrolled_hlist.hlist | 345 self.hlist = self.scrolled_hlist.hlist |
321 self.hlist.configure(fg='white', bg='black', | 346 self.hlist.configure(fg='white', bg='black', |
322 command=self.select_callback, browsecmd=edit_cue) | 347 command=self.select_callback, browsecmd=edit_cue) |
348 self.hlist.bind("<4>", self.wheelscroll) | |
349 self.hlist.bind("<5>", self.wheelscroll) | |
323 self.scrolled_hlist.pack(fill='both', expand=1) | 350 self.scrolled_hlist.pack(fill='both', expand=1) |
324 | 351 |
325 boldfont = self.tk.call('tix', 'option', 'get', | 352 boldfont = self.tk.call('tix', 'option', 'get', |
326 'bold_font') | 353 'bold_font') |
327 header_style = Tk.DisplayStyle('text', refwindow=self, | 354 header_style = Tk.DisplayStyle('text', refwindow=self, |
333 | 360 |
334 self.cue_label_windows = {} | 361 self.cue_label_windows = {} |
335 for count, cue in enumerate(self.cues): | 362 for count, cue in enumerate(self.cues): |
336 self.display_cue(count, cue) | 363 self.display_cue(count, cue) |
337 self.update_cue_indicators() | 364 self.update_cue_indicators() |
338 | 365 def wheelscroll(self, evt): |
366 """Perform mouse wheel scrolling""" | |
367 amount = 2 | |
368 if evt.num == 4: | |
369 amount = -2 | |
370 self.hlist.yview('scroll', amount, 'units') | |
339 def redraw_cue(self, cue): | 371 def redraw_cue(self, cue): |
340 if 0: | 372 path = self.cues.index(cue) |
341 # TODO: this is really inefficient | 373 for col, header in enumerate(self.columns): |
342 self.hlist.delete_all() | 374 try: |
343 for count, cue in enumerate(self.cues): | 375 text = getattr(cue, header) |
344 self.display_cue(count, cue) | 376 except AttributeError: |
345 self.update_cue_indicators() | 377 text = '' |
346 else: | 378 |
347 path = self.cues.index(cue) | 379 if col == 0: |
348 for col, header in enumerate(self.columns): | 380 self.cue_label_windows[path]['text'] = text |
349 try: | 381 else: |
350 text = getattr(cue, header) | 382 self.hlist.item_configure(path, col, text=text) |
351 except AttributeError: | |
352 text = '' | |
353 | |
354 if col == 0: | |
355 self.cue_label_windows[path]['text'] = text | |
356 else: | |
357 self.hlist.item_configure(path, col, text=text) | |
358 def display_cue(self, path, cue): | 383 def display_cue(self, path, cue): |
359 for col, header in enumerate(self.columns): | 384 for col, header in enumerate(self.columns): |
360 try: | 385 try: |
361 text = getattr(cue, header) | 386 text = getattr(cue, header) |
362 except AttributeError: | 387 except AttributeError: |
474 self.enable_callbacks = 1 | 499 self.enable_callbacks = 1 |
475 | 500 |
476 if __name__ == "__main__": | 501 if __name__ == "__main__": |
477 root = Tk.Tk() | 502 root = Tk.Tk() |
478 root.title("ShowMaster 9000") | 503 root.title("ShowMaster 9000") |
504 root.geometry("500x555") | |
479 cl = TkCueList(root, 'cues/cuelist1') | 505 cl = TkCueList(root, 'cues/cuelist1') |
480 cl.pack(fill='both', expand=1) | 506 cl.pack(fill='both', expand=1) |
481 | 507 |
482 fader = CueFader(root, cl) | 508 fader = CueFader(root, cl) |
483 fader.pack(fill='both', expand=1) | 509 fader.pack(fill='both', expand=1) |