Mercurial > code > home > repos > light9
comparison flax/CueFaders.py @ 158:5c7ac46e33d3
more disabling of stuff that make no sense at certain times and some
more disabling of stuff that make no sense at certain times and some
bug fixes. still haven't fixed the scale problem
author | dmcc |
---|---|
date | Mon, 07 Jul 2003 07:39:40 +0000 |
parents | 7d3a0f9107a8 |
children | 0803fb42109d |
comparison
equal
deleted
inserted
replaced
157:7d3a0f9107a8 | 158:5c7ac46e33d3 |
---|---|
16 self.name.pack(side='bottom') | 16 self.name.pack(side='bottom') |
17 self.scale_value = Tk.Label(self, width=6) | 17 self.scale_value = Tk.Label(self, width=6) |
18 self.scale_value.pack(side='bottom') | 18 self.scale_value.pack(side='bottom') |
19 self.scale_var.trace('w', self.update_value_label) | 19 self.scale_var.trace('w', self.update_value_label) |
20 self.update_value_label() | 20 self.update_value_label() |
21 self.disabled = (self.scale['state'] == 'disabled') | |
21 def set_label(self, label): | 22 def set_label(self, label): |
22 self.name['text'] = label | 23 self.name['text'] = label |
23 def update_value_label(self, *args): | 24 def update_value_label(self, *args): |
24 val = self.scale_var.get() * 100 | 25 val = self.scale_var.get() * 100 |
25 self.scale_value['text'] = "%0.2f" % val | 26 self.scale_value['text'] = "%0.2f" % val |
27 def disable(self): | |
28 if not self.disabled: | |
29 self.scale['state'] = 'disabled' | |
30 self.scale_var.set(0) | |
31 self.disabled = 1 | |
32 def enable(self): | |
33 if self.disabled: | |
34 self.scale['state'] = 'normal' | |
35 self.disabled = 0 | |
26 | 36 |
27 class TimedGoButton(Tk.Frame): | 37 class TimedGoButton(Tk.Frame): |
28 """Go button, fade time entry, and time fader""" | 38 """Go button, fade time entry, and time fader""" |
29 def __init__(self, master, name, scale_to_fade): | 39 def __init__(self, master, name, scale_to_fade): |
30 Tk.Frame.__init__(self, master) | 40 Tk.Frame.__init__(self, master) |
34 self.button.pack(fill='both', expand=1, side='left') | 44 self.button.pack(fill='both', expand=1, side='left') |
35 self.timer_var = Tk.StringVar() | 45 self.timer_var = Tk.StringVar() |
36 self.timer_entry = Tk.Entry(self, textvariable=self.timer_var, width=5) | 46 self.timer_entry = Tk.Entry(self, textvariable=self.timer_var, width=5) |
37 self.timer_entry.pack(fill='y', side='left') | 47 self.timer_entry.pack(fill='y', side='left') |
38 self.timer_var.set("2") | 48 self.timer_var.set("2") |
49 self.disabled = (self.button['state'] == 'disabled') | |
39 def start_fade(self, end_level=1): | 50 def start_fade(self, end_level=1): |
40 try: | 51 try: |
41 fade_time = float(self.timer_var.get()) | 52 fade_time = float(self.timer_var.get()) |
42 except ValueError: | 53 except ValueError: |
43 # TODO figure out how to handle this | 54 # TODO figure out how to handle this |
59 | 70 |
60 if newlevel != self.end_level: | 71 if newlevel != self.end_level: |
61 self.after(10, self.do_fade) | 72 self.after(10, self.do_fade) |
62 else: | 73 else: |
63 self.scale_to_fade.scale_var.set(self.end_level) | 74 self.scale_to_fade.scale_var.set(self.end_level) |
75 def disable(self): | |
76 if not self.disabled: | |
77 self.button['state'] = 'disabled' | |
78 self.disabled = 1 | |
79 def enable(self): | |
80 if self.disabled: | |
81 self.button['state'] = 'normal' | |
82 self.disabled = 0 | |
64 | 83 |
65 class CueFader(Tk.Frame): | 84 class CueFader(Tk.Frame): |
66 def __init__(self, master, cuelist): | 85 def __init__(self, master, cuelist): |
67 Tk.Frame.__init__(self, master) | 86 Tk.Frame.__init__(self, master) |
68 self.cuelist = cuelist | 87 self.cuelist = cuelist |
69 self.auto_shift = Tk.IntVar() | 88 self.auto_shift = Tk.IntVar() |
70 self.auto_shift.set(1) | 89 self.auto_shift.set(1) |
71 | 90 |
72 self.scales = {} | 91 self.scales = {} |
73 self.shift_buttons = {} | 92 self.shift_buttons = {} |
93 self.go_buttons = {} | |
74 | 94 |
75 topframe = Tk.Frame(self) | 95 topframe = Tk.Frame(self) |
76 self.current_cues = Tk.Label(topframe) | 96 self.current_cues = Tk.Label(topframe) |
77 self.current_cues.pack() | 97 self.current_cues.pack() |
78 self.update_cue_display() | 98 self.update_cue_display() |
99 shift = Tk.Button(frame, text="Shift %s" % name, state='disabled', | 119 shift = Tk.Button(frame, text="Shift %s" % name, state='disabled', |
100 command=lambda name=name: self.shift(name)) | 120 command=lambda name=name: self.shift(name)) |
101 | 121 |
102 self.scales[name] = scale | 122 self.scales[name] = scale |
103 self.shift_buttons[name] = shift | 123 self.shift_buttons[name] = shift |
124 self.go_buttons[name] = go | |
104 | 125 |
105 scale.scale_var.trace('w', \ | 126 scale.scale_var.trace('w', \ |
106 lambda x, y, z, name=name, scale=scale: self.xfade(name, scale)) | 127 lambda x, y, z, name=name, scale=scale: self.xfade(name, scale)) |
107 middleframe.pack(side='bottom', fill='both', expand=1) | 128 middleframe.pack(side='bottom', fill='both', expand=1) |
108 def toggle_autoshift(self): | 129 def toggle_autoshift(self): |
111 button.pack(side='bottom', fill='both', expand=1) | 132 button.pack(side='bottom', fill='both', expand=1) |
112 else: | 133 else: |
113 button.pack_forget() | 134 button.pack_forget() |
114 | 135 |
115 def shift(self, name): | 136 def shift(self, name): |
116 for scale in self.scales.values(): | 137 print "shift", name |
138 for scale_name, scale in self.scales.items(): | |
117 scale.scale_var.set(0) | 139 scale.scale_var.set(0) |
118 scale.scale.update() | |
119 print "shift", name | |
120 self.cuelist.shift((-1, 1)[name == 'Next']) | 140 self.cuelist.shift((-1, 1)[name == 'Next']) |
121 self.update_cue_display() | 141 self.update_cue_display() |
122 def update_cue_display(self): | 142 def update_cue_display(self): |
123 current_cues = [cue.name for cue in self.cuelist.get_current_cues()] | 143 current_cues = [cue.name for cue in self.cuelist.get_current_cues()] |
124 self.current_cues['text'] = ', '.join(current_cues) | 144 self.current_cues['text'] = ', '.join(current_cues) |
125 def xfade(self, name, scale): | 145 def xfade(self, name, scale): |
126 scale_val = scale.scale_var.get() | 146 scale_val = scale.scale_var.get() |
147 # print "xfade", name, scale_val | |
127 | 148 |
128 if scale_val == 1: | 149 if scale_val == 1: |
129 if self.auto_shift.get(): | 150 if self.auto_shift.get(): |
151 print "autoshifting", name | |
130 self.shift(name) | 152 self.shift(name) |
153 scale_val = scale.scale_var.get() # this needs to be refreshed | |
131 else: | 154 else: |
132 self.shift_buttons[name]['state'] = 'normal' | 155 self.shift_buttons[name]['state'] = 'normal' |
133 else: | 156 else: |
134 # disable any dangerous shifting | 157 # disable any dangerous shifting |
135 self.shift_buttons[name]['state'] = 'disabled' | 158 self.shift_buttons[name]['state'] = 'disabled' |
136 | 159 |
160 d = self.opposite_direction(name) | |
137 if scale_val != 0: | 161 if scale_val != 0: |
138 # disable illegal three part crossfades | 162 # disable illegal three part crossfades |
139 # TODO: | 163 self.scales[d].disable() |
140 # if name == 'Next': | 164 self.go_buttons[d].disable() |
141 # disable go_prev button and slider, lock slider at 0 | 165 else: |
142 pass | 166 # undo above work |
143 else: | 167 self.scales[d].enable() |
144 # undo above changes | 168 self.go_buttons[d].enable() |
145 | 169 def opposite_direction(self, d): |
146 # Actually, TimedGoButton and LabelledScale can have enable/disable | 170 if d == 'Next': |
147 # methods which will only do the Tk calls if necessary | 171 return 'Prev' |
148 pass | 172 else: |
173 return 'Next' | |
149 | 174 |
150 class Cue: | 175 class Cue: |
151 """A Cue has a name, a time, and any number of other attributes.""" | 176 """A Cue has a name, a time, and any number of other attributes.""" |
152 def __init__(self, name, time=3, **attrs): | 177 def __init__(self, name, time=3, **attrs): |
153 self.name = name | 178 self.name = name |
203 self.prev_pointer = index | 228 self.prev_pointer = index |
204 def bound_index(self, index): | 229 def bound_index(self, index): |
205 if not self.cues: | 230 if not self.cues: |
206 return None | 231 return None |
207 else: | 232 else: |
208 return max(0, min(index, len(self.cues))) | 233 return max(0, min(index, len(self.cues) - 1)) |
209 def get_current_cue_indices(self): | 234 def get_current_cue_indices(self): |
210 cur = self.current_cue_index | 235 cur = self.current_cue_index |
211 return [self.bound_index(index) for index in | 236 return [self.bound_index(index) for index in |
212 (self.prev_pointer or cur - 1, | 237 (self.prev_pointer or cur - 1, |
213 cur, | 238 cur, |