class SimpleDeviceParameterComponent(SimpleDeviceParameterComponentBase): static_color_controls = ControlList(SendValueControl, 8) stop_fader_control = SendReceiveValueControl() def __init__(self, static_color_value = 0, *a, **k): self._static_color_value = static_color_value super(SimpleDeviceParameterComponent, self).__init__(use_parameter_banks=True, *a, **k) self._update_static_color_controls() self._next_bank_index = self.bank_index def _on_bank_select_button_checked(self, button): self.stop_fader_control.send_value(DEVICE_FADER_BANK) self._next_bank_index = button.index @stop_fader_control.value def stop_fader_control(self, value, _): self.bank_index = self._next_bank_index def update(self): super(SimpleDeviceParameterComponent, self).update() self._update_static_color_controls() def _update_static_color_controls(self): if liveobj_valid(self._device) and self.selected_bank: for control, param in zip_longest(self.static_color_controls, self.selected_bank): color = self._static_color_value if liveobj_valid(param) else 0 control.value = color else: for control in self.static_color_controls: control.value = 0
class DeviceParameterComponentBase(Component): controls = ControlList(MappedControl, 8) def __init__(self, parameter_provider=None, *a, **k): super(DeviceParameterComponentBase, self).__init__(*a, **k) self._parameter_controls = [] self.parameter_provider = parameter_provider def _get_parameter_provider(self): return self._parameter_provider def _set_parameter_provider(self, provider): self._parameter_provider = provider or ParameterProvider() self._on_parameters_changed.subject = self._parameter_provider self._update_parameters() self._on_parameter_provider_changed(provider) parameter_provider = property(_get_parameter_provider, _set_parameter_provider) def set_parameter_controls(self, encoders): self.controls.set_control_element(encoders) self._connect_parameters() def _connect_parameters(self): parameters = self._parameter_provider.parameters[:self.controls. control_count] for control, parameter_info in map(None, self.controls, parameters): parameter = parameter_info.parameter if parameter_info else None control.mapped_parameter = parameter if parameter: control.update_sensitivities( parameter_info.default_encoder_sensitivity, parameter_info.fine_grain_encoder_sensitivity) return @property def parameters(self): return map(lambda p: p and p.parameter, self._parameter_provider.parameters) @property def parameter_names(self): return map(lambda p: p and p.name or '', self.parameters) def _update_parameters(self): if self.is_enabled(): self._connect_parameters() @listens('parameters') def _on_parameters_changed(self): self._update_parameters() def _on_parameter_provider_changed(self, provider): pass def update(self): super(DeviceParameterComponentBase, self).update() self._update_parameters()
class DeviceParameterComponent(DeviceParameterComponentBase): controls = ControlList(MappedControl, 8) def set_parameter_controls(self, encoders): self.controls.set_control_element(encoders) self._connect_parameters() def _connect_parameters(self): parameters = self._parameter_provider.parameters[:self.controls.control_count] for control, parameter_info in map(None, self.controls, parameters): parameter = parameter_info.parameter if parameter_info else None control.mapped_parameter = parameter if parameter: control.update_sensitivities(parameter_info.default_encoder_sensitivity, parameter_info.fine_grain_encoder_sensitivity)
class DeviceParameterComponent(Component): controls = ControlList(MappedSensitivitySettingControl, 8) def __init__(self, parameter_provider=None, *a, **k): super(DeviceParameterComponent, self).__init__(*a, **k) self.parameter_provider = parameter_provider @property def parameter_provider(self): return self._parameter_provider @parameter_provider.setter def parameter_provider(self, provider): self._parameter_provider = provider or ParameterProvider() self._on_parameters_changed.subject = self._parameter_provider self._update_parameters() self._on_parameter_provider_changed(provider) def set_parameter_controls(self, encoders): self.controls.set_control_element(encoders) self._connect_parameters() def _connect_parameters(self): parameters = self._parameter_provider.parameters[:self.controls. control_count] for control, parameter_info in zip_longest(self.controls, parameters): parameter = parameter_info.parameter if parameter_info else None control.mapped_parameter = parameter if parameter: control.update_sensitivities( parameter_info.default_encoder_sensitivity, parameter_info.fine_grain_encoder_sensitivity) def _update_parameters(self): if self.is_enabled(): self._connect_parameters() @listens(u'parameters') def _on_parameters_changed(self): self._update_parameters() def _on_parameter_provider_changed(self, provider): pass def update(self): super(DeviceParameterComponent, self).update() self._update_parameters()