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

Source Code for Module _Framework.ControlElement

 1  #Embedded file name: /Users/versonator/Hudson/live/Projects/AppLive/Resources/MIDI Remote Scripts/_Framework/ControlElement.py 
 2  from Resource import StackingResource 
 3  from Util import lazy_attribute 
 4  from Disconnectable import Disconnectable 
 5  from Dependency import depends 
 6  import Task 
7 8 -class ControlElement(Disconnectable):
9 """ 10 Base class for all classes representing control elements on a 11 control surface 12 """ 13 canonical_parent = None 14 name = '' 15 optimized_send_midi = True 16 _has_resource = False 17 _resource_type = StackingResource 18 _has_task_group = False 19 20 @depends(send_midi=None, register_control=None)
21 - def __init__(self, name = '', resource_type = None, optimized_send_midi = None, send_midi = None, register_control = None, *a, **k):
22 super(ControlElement, self).__init__(*a, **k) 23 self._send_midi = send_midi 24 self.name = name 25 if resource_type is not None: 26 self._resource_type = resource_type 27 if optimized_send_midi is not None: 28 self.optimized_send_midi = optimized_send_midi 29 register_control(self)
30
31 - def disconnect(self):
32 self.reset() 33 super(ControlElement, self).disconnect()
34
35 - def send_midi(self, message):
36 raise message != None or AssertionError 37 return self._send_midi(message, optimized=self.optimized_send_midi)
38
39 - def clear_send_cache(self):
40 pass
41
42 - def reset(self):
43 raise NotImplementedError
44 45 @property
46 - def resource(self):
47 return self._resource
48 49 @lazy_attribute
50 - def _resource(self):
51 self._has_resource = True 52 return self._resource_type(self._on_grab_resource, self._on_release_resource)
53 54 @lazy_attribute 55 @depends(parent_task_group=Task.TaskGroup)
56 - def _tasks(self, parent_task_group = None):
57 tasks = parent_task_group.add(Task.TaskGroup()) 58 self._has_task_group = True 59 return tasks
60
61 - def _on_grab_resource(self, client, *a, **k):
62 client.set_control_element(self, True)
63
64 - def _on_release_resource(self, client):
65 client.set_control_element(self, False)
66