Changeset - 5c7ac46e33d3
[Not reviewed]
default
0 1 0
dmcc - 22 years ago 2003-07-07 07:39:40

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
1 file changed with 38 insertions and 13 deletions:
0 comments (0 inline, 0 general)
flax/CueFaders.py
Show inline comments
 
@@ -15,17 +15,27 @@ class LabelledScale(Tk.Frame):
 
        self.name = Tk.Label(self, text=label)
 
        self.name.pack(side='bottom')
 
        self.scale_value = Tk.Label(self, width=6)
 
        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"""
 
    def __init__(self, master, name, scale_to_fade):
 
        Tk.Frame.__init__(self, master)
 
        self.name = name
 
@@ -33,12 +43,13 @@ class TimedGoButton(Tk.Frame):
 
        self.button = Tk.Button(self, text=name, command=self.start_fade)
 
        self.button.pack(fill='both', expand=1, side='left')
 
        self.timer_var = Tk.StringVar()
 
        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())
 
        except ValueError:
 
            # TODO figure out how to handle this
 
            print "can't fade -- bad time"
 
@@ -58,22 +69,31 @@ class TimedGoButton(Tk.Frame):
 
            self.scale_to_fade.scale_var.set(newlevel)
 

	
 
            if newlevel != self.end_level:
 
                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):
 
        Tk.Frame.__init__(self, master)
 
        self.cuelist = cuelist
 
        self.auto_shift = Tk.IntVar()
 
        self.auto_shift.set(1)
 

	
 
        self.scales = {}
 
        self.shift_buttons = {}
 
        self.go_buttons = {}
 

	
 
        topframe = Tk.Frame(self)
 
        self.current_cues = Tk.Label(topframe)
 
        self.current_cues.pack()
 
        self.update_cue_display()
 
        topframe.pack()
 
@@ -98,57 +118,62 @@ class CueFader(Tk.Frame):
 
        
 
            shift = Tk.Button(frame, text="Shift %s" % name, state='disabled',
 
                command=lambda name=name: self.shift(name))
 

	
 
            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))
 
        middleframe.pack(side='bottom', fill='both', expand=1)
 
    def toggle_autoshift(self):
 
        for name, button in self.shift_buttons.items():
 
            if not self.auto_shift.get():
 
                button.pack(side='bottom', fill='both', expand=1)
 
            else:
 
                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):
 
        current_cues = [cue.name for cue in self.cuelist.get_current_cues()]
 
        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."""
 
    def __init__(self, name, time=3, **attrs):
 
        self.name = name
 
        self.time = time
 
@@ -202,13 +227,13 @@ class CueList:
 
    def set_prev(self, index):
 
        self.prev_pointer = index
 
    def bound_index(self, index):
 
        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
 
                    (self.prev_pointer or cur - 1, 
 
                     cur, 
 
                     self.next_pointer or cur + 1)]
0 comments (0 inline, 0 general)