Changeset - 5a2c85174a19
[Not reviewed]
default
0 1 0
David McClosky - 20 years ago 2005-06-17 17:52:38
dmcc@bigasterisk.com
Fadable (i.e. keyboardcomposer) has mute again
1 file changed with 6 insertions and 8 deletions:
0 comments (0 inline, 0 general)
light9/Fadable.py
Show inline comments
 
@@ -27,62 +27,62 @@ class Fadable:
 
        self.wheel_step = wheel_step # amount that increase and descrease should
 
                                     # change volume (by default)
 
        
 
        self.fade_start_level = 0
 
        self.fade_end_level = 0
 
        self.fade_start_time = 0
 
        self.fade_length = 1
 
        self.fade_step_time = 10
 
        self.fade_var = var
 
        self.fading = 0 # whether a fade is in progress
 

	
 
        if key_bindings:
 
            for k in range(1, 10):
 
                self.bind("<Key-%d>" % k,
 
                    lambda evt, k=k: self.fade(k / 10.0))
 
            self.bind("<Key-0>", lambda evt: self.fade(1.0))
 
            self.bind("<grave>", lambda evt: self.fade(0))
 

	
 
            # up / down arrows
 
            self.bind("<Key-Up>", lambda evt: self.increase())
 
            self.bind("<Key-Down>", lambda evt: self.decrease())
 

	
 
        if mouse_bindings:
 
            # right mouse button toggles muting
 
            # self.bind('<3>', lambda evt: self.toggle_mute())
 
            # "NOT ANY MORE!" - homer
 
            self.bind('<3>', lambda evt: self.toggle_mute())
 
            # not "NOT ANY MORE!" - homer (i.e. it works again)
 

	
 
            # mouse wheel
 
            self.bind('<4>', lambda evt: self.increase())
 
            self.bind('<5>', lambda evt: self.decrease())
 

	
 
            # modified mouse wheel
 
            self.bind('<Shift-4>', lambda evt: self.increase(multiplier=0.2))
 
            self.bind('<Shift-5>', lambda evt: self.decrease(multiplier=0.2))
 
            self.bind('<Control-4>', lambda evt: self.increase(length=1))
 
            self.bind('<Control-5>', lambda evt: self.decrease(length=1))
 

	
 
        self.last_level = 0 # used for muting
 
        self.last_level = None # used for muting
 
    def fade(self, value, length=0.5, step_time=10):
 
        """Fade to value in length seconds with steps every step_time
 
        milliseconds"""
 
        if length == 0: # 0 seconds fades happen right away and prevents
 
                        # and prevents us from entering the fade loop,
 
                        # which would cause a divide by zero
 
            self.fade_var.set(value)
 
            self.fading = 0 # we stop all fades
 
        else: # the general case
 
            self.fade_start_time = time.time()
 
            self.fade_length = length
 

	
 
            self.fade_start_level = self.fade_var.get()
 
            self.fade_end_level = value
 
            
 
            self.fade_step_time = step_time
 
            if not self.fading:
 
                self.fading = 1
 
                self.do_fade()
 
    def do_fade(self):
 
        """Actually performs the fade for Fadable.fade.  Shouldn't be called
 
        directly."""
 
        now = time.time()
 
        elapsed = now - self.fade_start_time
 
@@ -103,48 +103,46 @@ class Fadable:
 
            newlevel = self.fade_end_level + amount
 
        else:
 
            newlevel = self.fade_var.get() + amount
 
        newlevel = min(100, newlevel)
 
        self.set_volume(newlevel, length)
 
    def decrease(self, multiplier=1, length=0.3):
 
        """Descreases the volume by multiplier * wheel_step.  If use_fades
 
        is true, it do this as a fade over length time."""
 
        amount = self.wheel_step * multiplier
 
        if self.fading:
 
            newlevel = self.fade_end_level - amount
 
        else:
 
            newlevel = self.fade_var.get() - amount
 
        newlevel = max(0, newlevel)
 
        self.set_volume(newlevel, length)
 
    def set_volume(self, newlevel, length=0.3):
 
        """Sets the volume to newlevel, performing a fade of length if
 
        use_fades is true."""
 
        if self.use_fades:
 
            self.fade(newlevel, length=length)
 
        else:
 
            self.fade_var.set(newlevel)
 
    def toggle_mute(self):
 
        """Toggles whether the volume is being muted."""
 
        curlevel = self.fade_var.get()
 
        if curlevel:
 
        if self.last_level is None:
 
            self.last_level = self.fade_var.get()
 
            newlevel = 0
 
            self.last_level = curlevel
 
            self['bg'] = 'red' # TODO: let them choose these colors
 
        else:
 
            newlevel = self.last_level
 
            self['bg'] = 'lightGray'
 
            self.last_level = None
 

	
 
        self.fade_var.set(newlevel)
 

	
 
if __name__ == "__main__":
 
    class SubScale(Scale, Fadable):
 
        def __init__(self, master, *args, **kw):
 
            self.scale_var = DoubleVar()
 
            kw['variable'] = self.scale_var
 
            Scale.__init__(self, master, *args, **kw)
 
            Fadable.__init__(self, var=self.scale_var)
 

	
 
    root = Tk()
 
    root.tk_focusFollowsMouse()
 
    ss = SubScale(root, from_=1, to_=0, res=0.01)
 
    ss.pack()
 
    mainloop()
0 comments (0 inline, 0 general)