def __init__(self, notification_time=2.5, blinking_time=0.3, display_lines=[], *a, **k): super(NotificationComponent, self).__init__(*a, **k) self._display_lines = display_lines self._token_control = _TokenControlElement() self._align_text_fn = self._default_align_text_fn self._message_box = self.register_component(MessageBoxComponent()) self._message_box.set_enabled(False) self._notification_timeout_task = self._tasks.add( Task.sequence(Task.wait(notification_time), Task.run(self.hide_notification)) ).kill() if notification_time != -1 else self._tasks.add(Task.Task()) self._blink_text_task = self._tasks.add( Task.loop( Task.sequence( Task.run(lambda: self._message_box. __setattr__('text', self._original_text)), Task.wait(blinking_time), Task.run(lambda: self._message_box.__setattr__( 'text', self._blink_text)), Task.wait(blinking_time)))).kill() self._original_text = None self._blink_text = None
def _make_scroll_task(self, scroll_step): task = self._tasks.add( Task.sequence( Task.wait(self.scrolling_delay), Task.loop(Task.wait(self.scrolling_step_delay), Task.run(scroll_step)))) task.kill() return task
def __init__(self, clip_creator=None, playhead=None, *a, **k): super(NoteEditorComponent, self).__init__(*a, **k) self.loop_steps = False self._selected_page_point = 0 self._page_index = 0 self._clip_creator = clip_creator self._matrix = None self._sequencer_clip = None self._step_colors = ["NoteEditor.StepEmpty"] * STEP_SEQ_SIZE self._note_settings_layer = None self._top_data_sources = map(DisplayDataSource, STEP_PARAM_NAMES) self._bottom_data_sources = [DisplayDataSource() for _ in xrange(8)] self._show_settings_task = self._tasks.add( Task.sequence(Task.wait(Defaults.MOMENTARY_DELAY), Task.run(self._show_settings)) ) self._show_settings_task.kill() self._mute_button = None self._velocity_offset = 0 self._length_offset = 0 self._nudge_offset = 0 self._attribute_deltas = [None for _ in xrange(3)] self._full_velocity = False self._pressed_steps = [] self._modified_steps = [] self._pressed_step_callback = None self._quantization_buttons = [] self._quantization_button_slots = self.register_slot_manager() self._modify_task = self._tasks.add(Task.run(self._do_modification)) self._modify_task.kill() self._modify_all_notes_enabled = False self._step_tap_tasks = dict( [ ( (x, y), self._tasks.add( Task.sequence( Task.wait(Defaults.MOMENTARY_DELAY), Task.run(partial(self._trigger_modification, (x, y), done=True)), ) ), ) for x, y in product(xrange(STEP_SEQ_WIDTH), xrange(STEP_SEQ_HEIGHT)) ] ) for task in self._step_tap_tasks.itervalues(): task.kill() self._clip_notes = [] self._note_index = 36 self._triplet_factor = 1.0 self._set_quantization_index(3) self._playhead = playhead self._playhead_notes = range(92, 100) + range(84, 92) + range(76, 84) + range(68, 76) self._playhead_triplet_notes = range(92, 98) + range(84, 90) + range(76, 82) + range(68, 74) with self._playhead_update_guard(): self._update_full_playhead()
def __init__(self, clip_creator=None, playhead=None, *a, **k): super(NoteEditorComponent, self).__init__(*a, **k) self.loop_steps = False self._selected_page_point = 0 self._page_index = 0 self._clip_creator = clip_creator self._matrix = None self._sequencer_clip = None self._step_colors = ['NoteEditor.StepEmpty'] * STEP_SEQ_SIZE self._note_settings_layer = None self._top_data_sources = map(DisplayDataSource, STEP_PARAM_NAMES) self._bottom_data_sources = [DisplayDataSource() for _ in xrange(8)] self._show_settings_task = self._tasks.add( Task.sequence(Task.wait(Defaults.MOMENTARY_DELAY), Task.run(self._show_settings))) self._show_settings_task.kill() self._mute_button = None self._velocity_offset = 0 self._length_offset = 0 self._nudge_offset = 0 self._attribute_deltas = [None for _ in xrange(3)] self._full_velocity = False self._pressed_steps = [] self._modified_steps = [] self._pressed_step_callback = None self._quantization_buttons = [] self._quantization_button_slots = self.register_slot_manager() self._modify_task = self._tasks.add(Task.run(self._do_modification)) self._modify_task.kill() self._modify_all_notes_enabled = False self._step_tap_tasks = dict([ ((x, y), self._tasks.add( Task.sequence( Task.wait(Defaults.MOMENTARY_DELAY), Task.run( partial(self._trigger_modification, (x, y), done=True))))) for x, y in product(xrange(STEP_SEQ_WIDTH), xrange( STEP_SEQ_HEIGHT)) ]) for task in self._step_tap_tasks.itervalues(): task.kill() self._clip_notes = [] self._note_index = 36 self._triplet_factor = 1.0 self._set_quantization_index(3) self._playhead = playhead self._playhead_notes = range(92, 100) + range(84, 92) + range( 76, 84) + range(68, 76) self._playhead_triplet_notes = range(92, 98) + range(84, 90) + range( 76, 82) + range(68, 74) with self._playhead_update_guard(): self._update_full_playhead()
def __init__(self, c_instance, *a, **k): super(Launchkey_MK1, self).__init__(c_instance=c_instance, *a, **k) set_log_instance(self) # For Debug Output only self._is_25_key_model = False self._is_in_control_on = True with self.component_guard(): self._skin = make_skin() with inject(skin=const(self._skin)).everywhere(): self._create_controls() self._request_task = self._tasks.add(Task.sequence(Task.wait(self.identity_request_delay), Task.run(self._send_identity_request))) self._request_task.kill() self._encoder_mode_toggle_enabled = False self._encoder_mode_task = self._tasks.add(Task.sequence(Task.wait(self.encoder_in_control_double_click_time), Task.run(self._disable_toggle_encoder_mode))) self._encoder_mode_task.kill()
def __init__(self, wrapped_control=None, *a, **k): super(MultiButton, self).__init__(wrapped_control=wrapped_control, *a, **k) self.register_wrapped() self.request_listen_nested_control_elements() self._long_press_task = self._tasks.add( Task.sequence(Task.wait(self.LONG_TAP_MAX_DELAY), Task.run(self.notify_long_press))).kill() self._double_press_task = self._tasks.add( Task.sequence(Task.wait(self.DOUBLE_PRESS_MAX_DELAY), Task.run(self.notify_single_press))).kill()
def action_button(self, button): self._settings_task.kill() self._settings_task = self._tasks.add( Task.sequence( Task.wait(self.SETTINGS_DELAY), Task.run(self._do_show_settings))) self.trigger_action()
def _on_scroll(self): if self._trigger_action_on_scrolling: trigger_selected = partial(self._trigger_action, self.selected_item) self._action_on_scroll_task.kill() self._action_on_scroll_task = self._tasks.add( Task.sequence(Task.wait(Defaults.MOMENTARY_DELAY), Task.delay(1), Task.run(trigger_selected)) )
def __init__(self, play_toggle_model_transform=const(True), *a, **k): super(TransportComponent, self).__init__(*a, **k) self._ffwd_button = None self._rwd_button = None self._tap_tempo_button = None self._tempo_control = None self._tempo_fine_control = None self._song_position_control = None self._rwd_task = Task.Task() self._ffwd_task = Task.Task() self._fine_tempo_needs_pickup = True self._prior_fine_tempo_value = -1 self._end_undo_step_task = self._tasks.add( Task.sequence(Task.wait(1.5), Task.run(self.song().end_undo_step))) self._end_undo_step_task.kill() song = self.song() self._loop_toggle, self._punch_in_toggle, self._punch_out_toggle, self._record_toggle, self._play_toggle, self._stop_toggle, self._nudge_down_toggle, self._nudge_up_toggle, self._metronome_toggle, self._arrangement_overdub_toggle, self._overdub_toggle = self.register_components( ToggleComponent('loop', song), ToggleComponent('punch_in', song, is_momentary=True), ToggleComponent('punch_out', song, is_momentary=True), ToggleComponent('record_mode', song), ToggleComponent('is_playing', song, model_transform=play_toggle_model_transform), ToggleComponent('is_playing', song, model_transform=const(False), view_transform=const(False)), ToggleComponent('nudge_down', song, is_momentary=True), ToggleComponent('nudge_up', song, is_momentary=True), ToggleComponent('metronome', song), ToggleComponent('arrangement_overdub', song), ToggleComponent('overdub', song)) return
def __init__(self, clip_creator = None, measure_length = 4.0, follow_detail_clip = False, paginator = None, *a, **k): super(LoopSelectorComponent, self).__init__(*a, **k) self._clip_creator = clip_creator self._sequencer_clip = None self._paginator = Paginator() self._loop_start = 0 self._loop_end = 0 self._loop_length = 0 self._is_following = False self._follow_button = None self._select_button = None self._short_loop_selector_matrix = None self._loop_selector_matrix = None self._pressed_pages = [] self._page_colors = [] self._measure_length = measure_length self._last_playhead_page = -1 self._follow_task = self._tasks.add(Task.sequence(Task.wait(Defaults.MOMENTARY_DELAY), Task.run(partial(self._set_is_following, True)))) self._follow_task.kill() if follow_detail_clip: self._on_detail_clip_changed.subject = self.song().view self._on_session_record_changed.subject = self.song() self._on_song_playback_status_changed.subject = self.song() if paginator is not None: self.set_paginator(paginator)
def _setup_hardware(self): for msg in self._messages_to_send: self._tasks.add( Task.sequence(partial(self._send_midi, msg), Task.wait(MESSAGE_DELAY))) self._messages_to_send = []
def __init__(self, *a, **k): super(DetailViewCntrlComponent, self).__init__(*a, **k) self._detail_view_visibility_changed.subject = self.application().view self._detail_view_visibility_changed() self._go_to_playing_clip_task = self._tasks.add(Task.sequence(Task.wait(SHOW_PLAYING_CLIP_DELAY), Task.run(self._go_to_playing_clip))) self._go_to_playing_clip_task.kill() self.set_device_clip_toggle_button = self.device_clip_toggle_button.set_control_element self.set_detail_toggle_button = self.detail_toggle_button.set_control_element
def __init__(self, c_instance, *a, **k): super(LaunchControlXL, self).__init__(c_instance=c_instance, product_id_bytes=(0, 32, 41, 97), *a, **k) self._biled_skin = make_biled_skin() self._default_skin = make_default_skin() with self.component_guard(): self._create_controls() self._initialize_task = self._tasks.add(Task.sequence(Task.wait(1), Task.run(self._create_components))) self._initialize_task.kill()
def _setup_hardware(self): sequence_to_run = [None] * (len(self._messages_to_send) * 2) sequence_to_run[::2] = [ Task.run(partial(self._send_midi, msg)) for msg in self._messages_to_send ] sequence_to_run[1::2] = [ Task.wait(INDIVIDUAL_MESSAGE_DELAY) for _ in self._messages_to_send ] for subsequence in split_list(sequence_to_run, 40): self._tasks.add(Task.sequence(*subsequence)) self._messages_to_send = []
def _on_scroll(self): if self._trigger_action_on_scrolling: trigger_selected = partial(self._trigger_action, self.selected_item) self._action_on_scroll_task.kill() self._action_on_scroll_task = self._tasks.add( Task.sequence(Task.wait(Defaults.MOMENTARY_DELAY), Task.delay(1), Task.run(trigger_selected)))
def __init__(self, display_label = ' ', display_seg_start = 0, encoder = None, *a, **k): super(ValueComponentBase, self).__init__(*a, **k) self._display_mode = self.TOUCH_BASED self._button = None self._on_encoder_changed.subject = encoder self._display = self.register_component(self.create_display_component(display_label=display_label, display_seg_start=display_seg_start)) self._display.set_enabled(False) self._hide_display_task = self._tasks.add(Task.sequence(Task.wait(self.AUTO_HIDE_IN_SEC), Task.run(partial(self._display.set_enabled, False)))) self._hide_display_task.kill()
def __init__(self, *a, **k): super(ArturiaControlSurface, self).__init__(*a, **k) self._messages_to_send = [] self._setup_hardware_task = self._tasks.add( Task.sequence(Task.run(self._collect_setup_messages), Task.wait(SETUP_HARDWARE_DELAY), Task.run(self._setup_hardware))) self._setup_hardware_task.kill() self._start_hardware_setup()
def __init__(self, undo_step_handler = None, delete_handler = None, *a, **k): super(TouchEncoderElement, self).__init__(*a, **k) self._trigger_undo_step = False self._undo_step_open = False self._undo_step_handler = undo_step_handler self._delete_handler = delete_handler self._tap_count = 0 self._tap_task = self._tasks.add(Task.sequence(Task.wait(consts.TAPPING_DELAY), Task.run(self._reset_tapping))) self._tap_task.kill() self.set_observer(None)
def __init__(self, identity_control = None, presentation_control = None, dongle_control = None, dongle = (0, 0), *a, **k): super(HandshakeComponent, self).__init__(*a, **k) self._identity_control = identity_control self._presentation_control = presentation_control self._dongle_control = dongle_control self._dongle_one, self._dongle_two = dongle self._on_identity_value.subject = identity_control self._on_dongle_value.subject = dongle_control self._identification_timeout_task = self._tasks.add(Task.sequence(Task.wait(HANDSHAKE_TIMEOUT), Task.run(self._do_fail))) self._identification_timeout_task.kill()
def __init__(self, notification_time = 2.5, blinking_time = 0.3, display_lines = [], *a, **k): super(NotificationComponent, self).__init__(*a, **k) self._display_lines = display_lines self._token_control = _TokenControlElement() self._message_box = self.register_component(MessageBoxComponent()) self._message_box.set_enabled(False) self._notification_timeout_task = self._tasks.add(Task.sequence(Task.wait(notification_time), Task.run(self.hide_notification))).kill() self._blink_text_task = self._tasks.add(Task.loop(Task.sequence(Task.run(lambda : self._message_box.__setattr__('text', self._original_text)), Task.wait(blinking_time), Task.run(lambda : self._message_box.__setattr__('text', self._blink_text)), Task.wait(blinking_time)))).kill() self._original_text = None self._blink_text = None
def __init__(self, c_instance, *a, **k): super(Launchkey_MK2, self).__init__(c_instance=c_instance, *a, **k) self._is_25_key_model = False self._is_in_control_on = True with self.component_guard(): self._skin = make_skin() with inject(skin=const(self._skin)).everywhere(): self._create_controls() self._request_task = self._tasks.add(Task.sequence(Task.wait(self.identity_request_delay), Task.run(self._send_identity_request))) self._request_task.kill()
def __init__(self, msg_type, channel, identifier, map_mode, undo_step_handler = None, delete_handler = None, touch_button = None, *a, **k): super(TouchEncoderElement, self).__init__(msg_type, channel, identifier, map_mode, *a, **k) self._trigger_undo_step = False self._undo_step_open = False self._undo_step_handler = undo_step_handler self._delete_handler = delete_handler self._tap_count = 0 self._tap_task = self._tasks.add(Task.sequence(Task.wait(consts.TAPPING_DELAY), Task.run(self._reset_tapping))) self._tap_task.kill() self.set_touch_button(touch_button) self.set_observer(None)
def __init__(self, product_id_bytes=None, *a, **k): super(IdentifiableControlSurface, self).__init__(*a, **k) assert product_id_bytes is not None assert len(product_id_bytes) < 12 self._product_id_bytes = product_id_bytes self._identity_response_pending = False self._request_task = self._tasks.add( Task.sequence(Task.wait(self.identity_request_delay), Task.run(self._send_identity_request))) self._request_task.kill() return
def __init__(self, c_instance, *a, **k): super(Launchkey_MK2, self).__init__(c_instance=c_instance, *a, **k) self._is_25_key_model = False self._is_in_control_on = True self._identity_response_pending = False with self.component_guard(): self._skin = make_skin() with inject(skin=const(self._skin)).everywhere(): self._create_controls() self._request_task = self._tasks.add(Task.sequence(Task.wait(self.identity_request_delay), Task.run(self._send_identity_request))) self._request_task.kill()
def __init__(self, all_pads = tuple(), parameter_sender = nop, default_profile = PadParameters(), update_delay = 0, *a, **k): raise find_if(lambda pad: pad < 0 or pad > 63, all_pads or []) == None or AssertionError super(PadUpdateComponent, self).__init__(*a, **k) self.parameter_sender = parameter_sender self._all_pads = set(all_pads) self._modified_pads = set(all_pads) self._profiles = {'default': default_profile} self._profile_for = dict(zip(all_pads, repeat('default'))) self._profile_count = {'default': len(all_pads)} self._update_task = self._tasks.add(Task.sequence(Task.wait(update_delay), Task.run(self._update_modified))) self._update_task.restart()
def __init__(self, undo_step_handler=None, delete_handler=None, *a, **k): super(TouchEncoderElement, self).__init__(*a, **k) self._trigger_undo_step = False self._undo_step_open = False self._undo_step_handler = undo_step_handler self._delete_handler = delete_handler self._tap_count = 0 self._tap_task = self._tasks.add( Task.sequence(Task.wait(consts.TAPPING_DELAY), Task.run(self._reset_tapping))) self._tap_task.kill() self.set_observer(None)
def __init__(self, mode=None, delay=None, parent_task_group=None, *a, **k): super(DelayMode, self).__init__(*a, **k) assert mode is not None assert parent_task_group is not None delay = delay if delay is not None else Defaults.MOMENTARY_DELAY self._mode = tomode(mode) self._mode_entered = False self._delay_task = parent_task_group.add( Task.sequence(Task.wait(delay), Task.run(self._enter_mode_delayed))) self._delay_task.kill() return
def _on_action_button_value(self, value): if self.is_enabled(): self._settings_task.kill() if value: self._settings_task = self._tasks.add(Task.sequence(Task.wait(self.SETTINGS_DELAY), Task.run(self._do_show_settings))) self.trigger_action() elif self._is_showing_settings: self.hide_settings() self._is_showing_settings = False else: self.post_trigger_action() self._update_action_button()
def _on_selected_item_changed(self): self._scroller.update() self._update_display() self._update_action_feedback() self._activation_task.kill() self._action_on_scroll_task.kill() if self.SELECTION_DELAY and self._delay_activation: self._activation_task = self._tasks.add(Task.sequence(Task.wait(self.SELECTION_DELAY), Task.run(self._scrollable_list.request_notify_item_activated))) else: self._scrollable_list.request_notify_item_activated() if not self._in_encoder_selection: self._selected_index_float = float(self._scrollable_list.selected_item_index)
def __init__(self, wrapped_control=None, double_press_context=None, *a, **k): super(DoublePressElement, self).__init__(wrapped_control=wrapped_control, *a, **k) self.register_control_element(self._wrapped_control) self._double_press_context = double_press_context self._double_press_task = self._tasks.add( Task.sequence(Task.wait(self.DOUBLE_PRESS_MAX_DELAY), Task.run(self.finish_single_press))).kill() self.request_listen_nested_control_elements()
def _on_selected_item_changed(self): self._scroller.update() self._pager.update() self._update_display() self._update_action_feedback() self._activation_task.kill() self._action_on_scroll_task.kill() if self.SELECTION_DELAY and self._delay_activation: self._activation_task = self._tasks.add(Task.sequence(Task.wait(self.SELECTION_DELAY), Task.run(self._scrollable_list.request_notify_item_activated))) else: self._scrollable_list.request_notify_item_activated() if not self._in_encoder_selection: self._selected_index_float = float(self._scrollable_list.selected_item_index)
def __init__(self, *a, **k): super(SpecialChanStripComponent, self).__init__(*a, **k) self.empty_color = 'Option.Unused' self._invert_mute_feedback = True self._delete_button = None self._duplicate_button = None self._selector_button = None self._track_parameter_name_sources = [ DisplayDataSource(' ') for _ in xrange(14) ] self._track_parameter_data_sources = [ DisplayDataSource(' ') for _ in xrange(14) ] self._track_parameter_graphic_sources = [ DisplayDataSource(' ') for _ in xrange(14) ] self._on_return_tracks_changed.subject = self.song() self._on_selected_track_changed.subject = self.song().view self._fold_task = self._tasks.add(Task.sequence(Task.wait(TRACK_FOLD_DELAY), Task.run(self._do_fold_track))) self._cue_volume_slot = self.register_disconnectable(ParameterSlot())
def __init__(self, *a, **k): super(ModesComponent, self).__init__(*a, **k) self._last_toggle_value = 0 self._mode_toggle = None self._mode_toggle_task = self._tasks.add( Task.wait(Defaults.MOMENTARY_DELAY)) self._mode_toggle_task.kill() self._mode_list = [] self._mode_map = {} self._last_selected_mode = None self._mode_stack = StackingResource(self._do_enter_mode, self._do_leave_mode) self._shift_button = None return
def _sigabort_create(self): if self._show_returns == 3 or self._show_returns == 4: self._fold_enabled = False self._toggle_returns = True if not self._enable_function: self._direct_bank = False self._has_transport = False if self._channel_strip: self._fold_enabled = False self._user_custom = self._enable_function and not self._direct_bank and not self._has_transport self._bcr_controls = BCL(self, self._preset, self._relative, self._bit_14) self._device_selection_follows_track_selection = True self._default_skin = make_default_skin() with inject(skin=const(self._default_skin)).everywhere(): self._create_controls() self._set_offsets_task = self._tasks.add( Task.sequence(Task.wait(0), Task.run(self._set_session_offsets))) self._set_offsets_task.kill() if self._show_selected: self._show_selected_task = self._tasks.add( Task.sequence(Task.wait(1), Task.run(self._show_selected_track))) return False
def __init__(self, *a, **k): super(SpecialChanStripComponent, self).__init__(*a, **k) self.empty_color = 'Option.Unused' self._invert_mute_feedback = True self._delete_button = None self._duplicate_button = None self._selector_button = None self._track_parameter_name_sources = [ DisplayDataSource(' ') for _ in xrange(14) ] self._track_parameter_data_sources = [ DisplayDataSource(' ') for _ in xrange(14) ] self._track_parameter_graphic_sources = [ DisplayDataSource(' ') for _ in xrange(14) ] self._on_return_tracks_changed.subject = self.song() self._on_selected_track_changed.subject = self.song().view self._fold_task = self._tasks.add(Task.sequence(Task.wait(TRACK_FOLD_DELAY), Task.run(self._do_fold_track))).kill() self._cue_volume_slot = self.register_disconnectable(ParameterSlot()) self._track_state = self.register_disconnectable(TrackArmState()) self._on_arm_state_changed.subject = self._track_state
def __init__(self, *a, **k): super(BeatStep_Q, self).__init__(*a, **k) self.QS = QSetup() self.control_layer_active = False with self.component_guard(): self._setup_hardware_task = self._tasks.add( Task.sequence(Task.wait(SETUP_HARDWARE_DELAY), Task.run(self._setup_hardware))) self._setup_hardware_task.kill() self._start_hardware_setup() self._create_controls() self._create_Q_control() self._create_device()
def add_mode(self, name, mode_or_component, toggle_value=False, groups=set(), behaviour=None): u""" Adds a mode of the given name into the component. The mode object should be a Mode or ControlSurfaceComponent instance. The 'toggle_value' is the light value the toggle_botton will be set to when the component is on this mode. If 'group' is not None, the mode will be put in the group identified by the passed object. When several modes are grouped: * All the buttons in the group will light up when any of the modes withing the group is selected. * Any of the group buttons will cancel the current mode when the current mode belongs to the group. """ assert name not in self._mode_map.keys() if not isinstance(groups, set): groups = set(groups) mode = tomode(mode_or_component) task = self._tasks.add( Task.sequence( Task.wait(Defaults.MOMENTARY_DELAY), Task.run(lambda: self._get_mode_behaviour(name).press_delayed( self, name)))) task.kill() slot = self.register_slot(listener=partial(self._on_mode_button_value, name), event='value', extra_kws=dict(identify_sender=True)) self._mode_list.append(name) self._mode_map[name] = _ModeEntry(mode=mode, toggle_value=toggle_value, behaviour=behaviour, subject_slot=slot, momentary_task=task, groups=groups) button_setter = 'set_' + name + '_button' if not hasattr(self, button_setter): setattr(self, button_setter, partial(self.set_mode_button, name))
def __init__(self, grid_resolution = None, initial_encoder_layer = None, encoder_layer = None, settings_layer = None, *a, **k): super(NoteEditorSettingsComponent, self).__init__(*a, **k) raise encoder_layer or AssertionError self._bottom_data_sources = [ DisplayDataSource() for _ in xrange(8) ] self._request_hide = False self.settings = self.register_component(NoteSettingsComponent(grid_resolution=grid_resolution, layer=settings_layer)) self.settings.set_enabled(False) self._automation = self.register_component(AutomationComponent()) self._automation.set_enabled(False) self._mode_selector = self.register_component(OptionsComponent(num_options=2, num_labels=0, num_display_segments=8)) self._mode_selector.set_enabled(False) self._on_selected_option.subject = self._mode_selector self._update_available_modes() self._mode_selector.selected_option = 0 self._visible_detail_view = 'Detail/DeviceChain' self._show_settings_task = self._tasks.add(Task.sequence(Task.wait(Defaults.MOMENTARY_DELAY), Task.run(self._show_settings))) self._show_settings_task.kill() self._update_infos_task = self._tasks.add(Task.run(self._update_note_infos)) self._update_infos_task.kill() self._settings_modes = self.register_component(ModesComponent()) self._settings_modes.set_enabled(False) self._settings_modes.add_mode('automation', [self._automation, self._mode_selector, partial(self._set_envelope_view_visible, True), self._show_clip_view]) self._settings_modes.add_mode('note_settings', [self.settings, self._update_note_infos, self._mode_selector, partial(self._set_envelope_view_visible, False), self._show_clip_view]) self._settings_modes.add_mode('pad_settings', [self.settings, partial(self._set_envelope_view_visible, False), self._show_clip_view]) self._encoders = None self._initial_encoders = None self.add_mode('disabled', []) self.add_mode('about_to_show', [AddLayerMode(self, initial_encoder_layer), (self._show_settings_task.restart, self._show_settings_task.kill)]) self.add_mode('enabled', [DetailViewRestorerMode(self.application()), AddLayerMode(self, encoder_layer), self._update_available_modes, self._settings_modes]) self.selected_mode = 'disabled' self._editors = [] self._on_detail_clip_changed.subject = self.song().view self._on_selected_track_changed.subject = self.song().view return
def __init__(self, grid_resolution = None, initial_encoder_layer = None, encoder_layer = None, settings_layer = None, *a, **k): super(NoteEditorSettingsComponent, self).__init__(*a, **k) raise encoder_layer or AssertionError self._bottom_data_sources = [ DisplayDataSource() for _ in xrange(8) ] self._request_hide = False self.settings = self.register_component(NoteSettingsComponent(grid_resolution=grid_resolution, layer=settings_layer)) self.settings.set_enabled(False) self._automation = self.register_component(AutomationComponent()) self._automation.set_enabled(False) self._mode_selector = self.register_component(OptionsComponent(num_options=2, num_labels=0, num_display_segments=8)) self._mode_selector.set_enabled(False) self._on_selected_option.subject = self._mode_selector self._update_available_modes() self._mode_selector.selected_option = 0 self._visible_detail_view = 'Detail/DeviceChain' self._show_settings_task = self._tasks.add(Task.sequence(Task.wait(Defaults.MOMENTARY_DELAY), Task.run(self._show_settings))) self._show_settings_task.kill() self._update_infos_task = self._tasks.add(Task.run(self._update_note_infos)) self._update_infos_task.kill() self._settings_modes = self.register_component(ModesComponent()) self._settings_modes.set_enabled(False) self._settings_modes.add_mode('automation', [self._automation, self._mode_selector, partial(self._set_envelope_view_visible, True), self._show_clip_view]) self._settings_modes.add_mode('note_settings', [self.settings, self._update_note_infos, self._mode_selector, partial(self._set_envelope_view_visible, False), self._show_clip_view]) self._settings_modes.add_mode('pad_settings', [self.settings, partial(self._set_envelope_view_visible, False), self._show_clip_view]) self._encoders = None self._initial_encoders = None self.add_mode('disabled', []) self.add_mode('about_to_show', [AddLayerMode(self, initial_encoder_layer), (self._show_settings_task.restart, self._show_settings_task.kill)]) self.add_mode('enabled', [DetailViewRestorerMode(self.application()), AddLayerMode(self, encoder_layer), self._update_available_modes, self._settings_modes]) self.selected_mode = 'disabled' self._editors = [] self._on_detail_clip_changed.subject = self.song().view self._on_selected_track_changed.subject = self.song().view
def __init__(self, name='Transport_Control', *a, **k): super(SpecialTransportComponent, self).__init__(name=name, *a, **k) self._relative_tempo_control = None self._relative_tempo_fine_control = None self._ffwd_button = None self._rwd_button = None self._rwd_task = Task.Task() self._ffwd_task = Task.Task() self._nudge_down_button = None self._nudge_up_button = None self._last_record_quantization = RQ.rec_q_sixtenth self._on_is_playing_changed.subject = self.song() self._on_overdub_changed.subject = self.song() self._on_record_mode_changed.subject = self.song() self._on_metronome_changed.subject = self.song() self._on_loop_changed.subject = self.song() self._on_record_quantize_changed.subject = self.song() self._on_can_jump_to_prev_cue_changed.subject = self.song() self._on_can_jump_to_next_cue_changed.subject = self.song() self._end_undo_step_task = self._tasks.add(Task.sequence(Task.wait(1.5), Task.run(self.song().end_undo_step))) self._end_undo_step_task.kill() return
def __init__(self, msg_type, channel, identifier, map_mode, undo_step_handler=None, delete_handler=None, touch_button=None, *a, **k): super(TouchEncoderElement, self).__init__(msg_type, channel, identifier, map_mode, *a, **k) self._trigger_undo_step = False self._undo_step_open = False self._undo_step_handler = undo_step_handler self._delete_handler = delete_handler self._tap_count = 0 self._tap_task = self._tasks.add( Task.sequence(Task.wait(consts.TAPPING_DELAY), Task.run(self._reset_tapping))) self._tap_task.kill() self.set_touch_button(touch_button) self.set_observer(None)
def __init__(self, wrapped_control = None, double_press_context = None, *a, **k): super(DoublePressElement, self).__init__(wrapped_control=wrapped_control, *a, **k) self.register_control_element(self._wrapped_control) self._double_press_context = double_press_context self._double_press_task = self._tasks.add(Task.sequence(Task.wait(self.DOUBLE_PRESS_MAX_DELAY), Task.run(self.finish_single_press))).kill() self.request_listen_nested_control_elements()
def trigger_modification_task(x, y): trigger = partial(self._trigger_modification, (x, y), done=True) return self._tasks.add(Task.sequence(Task.wait(Defaults.MOMENTARY_DELAY), Task.run(trigger))).kill()
def __init__(self, *a, **k): super(ArturiaControlSurface, self).__init__(*a, **k) self._messages_to_send = [] self._setup_hardware_task = self._tasks.add(Task.sequence(Task.run(self._collect_setup_messages), Task.wait(SETUP_HARDWARE_DELAY), Task.run(self._setup_hardware))) self._setup_hardware_task.kill() self._start_hardware_setup()
def _make_scroll_task(self, scroll_step): task = self._tasks.add(Task.sequence(Task.wait(self.scrolling_delay), Task.loop(Task.wait(self.scrolling_step_delay), Task.run(scroll_step)))) task.kill() return task