changeset 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 5aa7cffe68d0
files flax/CueFaders.py
diffstat 1 files changed, 38 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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