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

Source Code for Module _Framework.ButtonElement

 1  #Embedded file name: /Users/versonator/Hudson/live/Projects/AppLive/Resources/MIDI Remote Scripts/_Framework/ButtonElement.py 
 2  import Live 
 3  from InputControlElement import InputControlElement, MIDI_CC_TYPE 
 4  ON_VALUE = int(127) 
 5  OFF_VALUE = int(0) 
 6   
7 -class DummyUndoStepHandler(object):
8
9 - def begin_undo_step(self):
10 pass
11
12 - def end_undo_step(self):
13 pass
14 15
16 -class ButtonElementMixin(object):
17 """ 18 Mixin for sending values to button-like control-elements elements. 19 """ 20
21 - def set_light(self, is_turned_on):
22 if is_turned_on: 23 self.turn_on() 24 else: 25 self.turn_off()
26
27 - def turn_on(self):
29
30 - def turn_off(self):
32 33
34 -class ButtonElement(InputControlElement, ButtonElementMixin):
35 """ 36 Class representing a button a the controller 37 """ 38
39 - def __init__(self, is_momentary, msg_type, channel, identifier, undo_step_handler = DummyUndoStepHandler(), *a, **k):
40 super(ButtonElement, self).__init__(msg_type, channel, identifier, *a, **k) 41 self.__is_momentary = bool(is_momentary) 42 self._last_received_value = -1 43 self._undo_step_handler = undo_step_handler
44
45 - def is_momentary(self):
46 """ returns true if the buttons sends a message on being released """ 47 return self.__is_momentary
48
49 - def message_map_mode(self):
50 raise self.message_type() is MIDI_CC_TYPE or AssertionError 51 return Live.MidiMap.MapMode.absolute
52
53 - def is_pressed(self):
54 return self.__is_momentary and self._last_received_value > 0
55
56 - def receive_value(self, value):
57 pressed_before = self.is_pressed() 58 self._last_received_value = value 59 if not pressed_before and self.is_pressed(): 60 self._undo_step_handler.begin_undo_step() 61 super(ButtonElement, self).receive_value(value) 62 if pressed_before and not self.is_pressed(): 63 self._undo_step_handler.end_undo_step()
64