# HG changeset patch # User dmcc # Date 1057563580 0 # Node ID 5c7ac46e33d3be974671f024c8f78cea1fdb6bbb # Parent 7d3a0f9107a8a55886ffcc6e208368b6fdccfdd0 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 diff -r 7d3a0f9107a8 -r 5c7ac46e33d3 flax/CueFaders.py --- a/flax/CueFaders.py Mon Jul 07 07:07:22 2003 +0000 +++ b/flax/CueFaders.py Mon Jul 07 07:39:40 2003 +0000 @@ -18,11 +18,21 @@ self.scale_value.pack(side='bottom') self.scale_var.trace('w', self.update_value_label) self.update_value_label() + self.disabled = (self.scale['state'] == 'disabled') def set_label(self, label): self.name['text'] = label def update_value_label(self, *args): val = self.scale_var.get() * 100 self.scale_value['text'] = "%0.2f" % val + def disable(self): + if not self.disabled: + self.scale['state'] = 'disabled' + self.scale_var.set(0) + self.disabled = 1 + def enable(self): + if self.disabled: + self.scale['state'] = 'normal' + self.disabled = 0 class TimedGoButton(Tk.Frame): """Go button, fade time entry, and time fader""" @@ -36,6 +46,7 @@ self.timer_entry = Tk.Entry(self, textvariable=self.timer_var, width=5) self.timer_entry.pack(fill='y', side='left') self.timer_var.set("2") + self.disabled = (self.button['state'] == 'disabled') def start_fade(self, end_level=1): try: fade_time = float(self.timer_var.get()) @@ -61,6 +72,14 @@ self.after(10, self.do_fade) else: self.scale_to_fade.scale_var.set(self.end_level) + def disable(self): + if not self.disabled: + self.button['state'] = 'disabled' + self.disabled = 1 + def enable(self): + if self.disabled: + self.button['state'] = 'normal' + self.disabled = 0 class CueFader(Tk.Frame): def __init__(self, master, cuelist): @@ -71,6 +90,7 @@ self.scales = {} self.shift_buttons = {} + self.go_buttons = {} topframe = Tk.Frame(self) self.current_cues = Tk.Label(topframe) @@ -101,6 +121,7 @@ self.scales[name] = scale self.shift_buttons[name] = shift + self.go_buttons[name] = go scale.scale_var.trace('w', \ lambda x, y, z, name=name, scale=scale: self.xfade(name, scale)) @@ -113,10 +134,9 @@ button.pack_forget() def shift(self, name): - for scale in self.scales.values(): + print "shift", name + for scale_name, scale in self.scales.items(): scale.scale_var.set(0) - scale.scale.update() - print "shift", name self.cuelist.shift((-1, 1)[name == 'Next']) self.update_cue_display() def update_cue_display(self): @@ -124,28 +144,33 @@ self.current_cues['text'] = ', '.join(current_cues) def xfade(self, name, scale): scale_val = scale.scale_var.get() + # print "xfade", name, scale_val if scale_val == 1: if self.auto_shift.get(): + print "autoshifting", name self.shift(name) + scale_val = scale.scale_var.get() # this needs to be refreshed else: self.shift_buttons[name]['state'] = 'normal' else: # disable any dangerous shifting self.shift_buttons[name]['state'] = 'disabled' + d = self.opposite_direction(name) if scale_val != 0: # disable illegal three part crossfades - # TODO: - # if name == 'Next': - # disable go_prev button and slider, lock slider at 0 - pass + self.scales[d].disable() + self.go_buttons[d].disable() else: - # undo above changes - - # Actually, TimedGoButton and LabelledScale can have enable/disable - # methods which will only do the Tk calls if necessary - pass + # undo above work + self.scales[d].enable() + self.go_buttons[d].enable() + def opposite_direction(self, d): + if d == 'Next': + return 'Prev' + else: + return 'Next' class Cue: """A Cue has a name, a time, and any number of other attributes.""" @@ -205,7 +230,7 @@ if not self.cues: return None else: - return max(0, min(index, len(self.cues))) + return max(0, min(index, len(self.cues) - 1)) def get_current_cue_indices(self): cur = self.current_cue_index return [self.bound_index(index) for index in