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

Source Code for Module _Framework.ToggleComponent

 1  #Embedded file name: /Users/versonator/Hudson/live/Projects/AppLive/Resources/MIDI Remote Scripts/_Framework/ToggleComponent.py 
 2  from SubjectSlot import subject_slot 
 3  from ControlSurfaceComponent import ControlSurfaceComponent 
4 5 -class ToggleComponent(ControlSurfaceComponent):
6 """ 7 Maps a toggle button to a boolean property of the Live model. 8 """ 9 is_private = True 10 is_momentary = False 11 read_only = False 12
13 - def __init__(self, property_name = None, subject = None, is_momentary = False, model_transform = None, view_transform = None, read_only = False, *a, **k):
14 if not property_name: 15 raise AssertionError 16 super(ToggleComponent, self).__init__(*a, **k) 17 self._property_name = property_name 18 self._property_slot = self.register_slot(subject, self._on_property_changed_in_model, property_name) 19 self._property_button = None 20 if is_momentary: 21 self.is_momentary = is_momentary 22 if model_transform: 23 self.model_transform = model_transform 24 if view_transform: 25 self.view_transform = model_transform 26 self.read_only = read_only and read_only
27
28 - def model_transform(self, value):
29 return value
30
31 - def view_transform(self, value):
32 return value
33
34 - def _get_subject(self):
35 return self._property_slot.subject
36
37 - def _set_subject(self, model):
38 self._property_slot.subject = model 39 self.update()
40 41 subject = property(_get_subject, _set_subject) 42
43 - def _get_value(self):
44 return getattr(self.subject, self._property_name) if self.subject else None
45
46 - def _set_value(self, value):
47 setattr(self.subject, self._property_name, value)
48 49 value = property(_get_value, _set_value) 50
51 - def set_toggle_button(self, button):
52 raise button is None or not self.is_momentary or button.is_momentary() or AssertionError 53 self._on_button_value.subject = button 54 self._update_button()
55
56 - def on_enabled_changed(self):
57 self.update()
58
59 - def update(self):
60 self._update_button()
61
62 - def _update_button(self):
63 if self.is_enabled(): 64 button = self._on_button_value.subject 65 if button: 66 button.set_light(self.view_transform(self.value))
67
69 self._update_button()
70 71 @subject_slot('value')
72 - def _on_button_value(self, value):
73 if self.is_enabled() and not self.read_only: 74 if self.is_momentary: 75 if value: 76 self.value = self.model_transform(True) 77 else: 78 self.value = self.model_transform(False) 79 elif value: 80 self.value = self.model_transform(not self.value)
81