Package _Framework :: Module MomentaryModeObserver
[hide private]
[frames] | no frames]

Source Code for Module _Framework.MomentaryModeObserver

 1  #Embedded file name: /Users/versonator/Hudson/live/Projects/AppLive/Resources/MIDI Remote Scripts/_Framework/MomentaryModeObserver.py 
 2  import Defaults 
 3   
4 -class MomentaryModeObserver(object):
5 """ Listens to the changes of a given set of controls and decides which mode to use """ 6
7 - def __init__(self):
8 object.__init__(self) 9 self._controls = None 10 self._mode_callback = None 11 self._reset()
12
13 - def disconnect(self):
14 self._reset()
15
16 - def set_mode_details(self, base_mode, controls, mode_callback = None):
17 if not isinstance(base_mode, int): 18 raise AssertionError 19 raise isinstance(controls, (type(None), tuple)) or AssertionError 20 raise mode_callback == None or callable(mode_callback) or AssertionError 21 self._reset() 22 self._controls = controls != None and controls 23 for control in self._controls: 24 control.add_value_listener(self._control_changed) 25 26 self._base_mode = base_mode 27 self._mode_callback = mode_callback
28
29 - def is_mode_momentary(self):
30 return self._controls_changed or self._timer_count >= Defaults.MOMENTARY_DELAY_TICKS
31
32 - def on_timer(self):
33 self._timer_count += 1
34
35 - def _control_changed(self, value):
36 if self._mode_callback == None or self._mode_callback() == self._base_mode: 37 self._controls_changed = True
38
39 - def _release_controls(self):
40 if self._controls != None: 41 for control in self._controls: 42 control.remove_value_listener(self._control_changed) 43 44 self._controls = None
45
46 - def _reset(self):
47 self._base_mode = -1 48 self._controls_changed = False 49 self._mode_callback = None 50 self._timer_count = 0 51 self._release_controls()
52