| Home | Trees | Indices | Help |
|---|
|
|
1 #Embedded file name: /Users/versonator/Hudson/live/Projects/AppLive/Resources/MIDI Remote Scripts/_Framework/CompoundElement.py 2 from __future__ import with_statement 3 from SubjectSlot import subject_slot_group, SlotManager 4 from NotifyingControlElement import NotifyingControlElement 5 from Util import BooleanContext8 """ 9 Utility class that helps in writing Elements that act as a facade 10 to nested elements, hiding the complexity oif making sure that 11 resource ownership rules are preserved. 12 """ 1315915 super(CompoundElement, self).__init__(*a, **k) 16 self._nested_control_elements = dict() 17 self._disable_notify_owner_on_button_ownership_change = BooleanContext() 18 self._listen_nested_requests = 01921 """ 22 Notifies that the nested control can be used by the compound 23 """ 24 raise NotImplementedError25 3133 """ 34 Notifies that an owned control element has received a value. 35 """ 36 raise NotImplementedError3739 return map(self.register_control_element, elements)4042 if not element not in self._nested_control_elements: 43 raise AssertionError 44 self._nested_control_elements[element] = False 45 if self._listen_nested_requests > 0: 46 self._on_nested_control_element_value.add_subject(element) 47 priority = self._has_resource and self.resource.owner and self.resource.max_priority 48 element.resource.grab(self, priority=priority) 49 else: 50 self._on_nested_control_element_grabbed(element) 51 return element5254 return map(self.unregister_control_element, elements)5557 if not element in self._nested_control_elements: 58 raise AssertionError 59 if self._has_resource and self.resource.owner: 60 element.resource.release(self) 61 else: 62 self._on_nested_control_element_released(element) 63 self._listen_nested_requests > 0 and self._on_nested_control_element_value.remove_subject(element) 64 del self._nested_control_elements[element] 65 return element6668 return control in self._nested_control_elements69 72 7779 if self.value_listener_count() == 0: 80 self.request_listen_nested_control_elements() 81 super(CompoundElement, self).add_value_listener(*a, **k)8284 super(CompoundElement, self).remove_value_listener(*a, **k) 85 if self.value_listener_count() == 0: 86 self.unrequest_listen_nested_control_elements()8789 """ 90 By default, the compound control element will listen to its 91 nested control elements IFF he himself has listeners. This is 92 important, because for nested InputControlElements, the 93 existence of listeners determine wether they will send the 94 MIDI messages to Live or to the script. 95 96 You can force the compound to listen to its nested elements 97 using this methods. The compound will then listen to them IFF 98 the number of requests is greater than the number of 99 unrequests OR it has listeners. 100 """ 101 if self._listen_nested_requests == 0: 102 self._connect_nested_control_elements() 103 self._listen_nested_requests += 1104106 """ 107 See request_listen_nested_control_elements() 108 """ 109 if self._listen_nested_requests == 1: 110 self._disconnect_nested_control_elements() 111 self._listen_nested_requests -= 1112 115 118120 if not control in self._nested_control_elements: 121 raise AssertionError 122 self._nested_control_elements[control] = self._nested_control_elements[control] or True 123 self.on_nested_control_element_grabbed(control)124126 if not control in self._nested_control_elements: 127 raise AssertionError 128 self._nested_control_elements[control] = self._nested_control_elements[control] and False 129 self.on_nested_control_element_released(control)130 131 @subject_slot_group('value') 135137 if grabbed or self._resource.stack_size == 0: 138 self._on_nested_control_element_grabbed(control) 139 else: 140 self._on_nested_control_element_released(control) 141 owner = self._resource.owner 142 if owner and not self._disable_notify_owner_on_button_ownership_change: 143 owner.set_control_element(self, True)144146 with self._disable_notify_owner_on_button_ownership_change(): 147 for element in self._nested_control_elements: 148 self._on_nested_control_element_released(element) 149 element.resource.grab(self, priority=self.resource.max_priority, *a, **k) 150 151 super(CompoundElement, self)._on_grab_resource(client, *a, **k)152154 with self._disable_notify_owner_on_button_ownership_change(): 155 super(CompoundElement, self)._on_release_resource(client) 156 for element in self._nested_control_elements: 157 element.resource.release(self) 158 self._on_nested_control_element_grabbed(element)
| Home | Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Wed Mar 6 18:53:33 2013 | http://epydoc.sourceforge.net |