diff options
Diffstat (limited to 'tascam_fw_console/buttons.py')
| -rw-r--r-- | tascam_fw_console/buttons.py | 235 |
1 files changed, 39 insertions, 196 deletions
diff --git a/tascam_fw_console/buttons.py b/tascam_fw_console/buttons.py index 35448c3..df9bf0f 100644 --- a/tascam_fw_console/buttons.py +++ b/tascam_fw_console/buttons.py @@ -21,7 +21,6 @@ """ import re -import pyautogui from tascam_fw_console import osc @@ -42,209 +41,53 @@ re_strip_num = re.compile('.*([1-9])') class Button(): - def __init__(self, console, name): + def __init__(self, console, name, addr): self.name = name - self.state = 0 + self.pressed = False + self.enabled = False self.console = console + self.press_callbacks = set() + self.release_callbacks = set() + self.addr = '/button/{}'.format(addr) + osc.dispatcher.map(self.addr, self.osc_handle) def press(self): - self.state = 1 - print('%s pressed' % self.name) + self.pressed = True + osc.client.send_message(self.addr, 1) def release(self): - self.state = 0 - print('%s released' % self.name) - - @property - def pressed(self): - if self.state: - return True - return False - - -class EncoderButton(Button): - def __init__(self, console, name): - super().__init__(console, name) - - def press(self): - - encoder_mode = self.console.state.get('encoder_mode', None) - print(encoder_mode) - if encoder_mode == self.name: - return - - self.state = 1 - if encoder_mode: - self.console.unit.leds.turn_off(encoder_mode) - self.console.state[encoder_mode] = 0 - self.console.unit.leds.turn_on(self.name) - self.console.state['encoder_mode'] = self.name - super().press() - - -class StripSelButton(Button): - def __init__(self, console, name, strip): - super().__init__(console, name) - self.strip = strip - self.strip.select_button = self - - def press(self): - - strip = self.strip - print('handle_strip_sel', strip) - recenable = self.console.buttons.get('REC ENABLE', None) - if recenable.pressed: - if strip.rec: - osc.client.send_message('/strip/recenable', (strip.num, 0)) - else: - osc.client.send_message('/strip/recenable', (strip.num, 1)) - super().press() - - -class StripMuteButton(Button): - def __init__(self, console, name, strip): - super().__init__(console, name) - self.strip = strip - self.strip.mute_button = self - - def press(self): - - strip = self.strip - if strip.mute: - strip.mute = False - osc.client.send_message('/strip/mute', (strip.num, 0)) + self.pressed = False + osc.client.send_message(self.addr, 0) + + def osc_handle(self, addr, enable): + print(self.name) + if enable: + self.enabled = True + self.console.unit.leds.turn_on(self.name) else: - strip.mute = True - osc.client.send_message('/strip/mute', (strip.num, 1)) - super().press() - - -class StripSoloButton(Button): - def __init__(self, console, name, strip): - super().__init__(console, name) - self.strip = strip - self.strip.solo_button = self + self.enabled = False + self.console.unit.leds.turn_off(self.name) + + +class StripButton(Button): + def __init__(self, console, name, addr, strip): + super().__init__(console, name, addr) + self.strip = console.strips[strip] + button = addr.split('/')[-1] + if button == 'sel': + self.strip.select_button = self + self.osc_handler = console.strip_select_handler + elif button == 'mute': + self.strip.mute_button = self + self.osc_handler = console.strip_mute_handler + elif button == 'solo': + self.strip.solo_button = self + self.osc_handler = console.strip_solo_handler def press(self): - - strip = self.strip - if strip.solo: - strip.solo = False - osc.client.send_message('/strip/solo', (strip.num, 0)) - else: - strip.solo = True - osc.client.send_message('/strip/solo', (strip.num, 1)) - super().press() - - -class ArrowButton(Button): - def __init__(self, console, name): - super().__init__(console, name) - - def press(self): - key = keymap.get(self.name.lower(), self.name.lower()) - pyautogui.press(key) - - -class ModButton(Button): - def __init__(self, console, name): - super().__init__(console, name) - - def mod_button_press(self): - key = keymap.get(self.name, None) - if key is None: - return - - pyautogui.keyDown(key) - super().press() + self.pressed = True + osc.client.send_message(self.addr, (self.strip.num, 1)) def release(self): - key = keymap.get(self.name, None) - if key is None: - return - - pyautogui.keyUp(key) - super().release() - - -class ComputerButton(Button): - def __init__(self, console, name): - super().__init__(console, name) - - def press(self): - osc.client.send_message('/set_surface', (8, 7, 19, 1, 8, 11)) - super().press() - - -class ClrSoloButton(Button): - def __init__(self, console, name): - super().__init__(console, name) - - def press(self): - osc.client.send_message('/cancel_all_solos', 1) - super().press() - - -class LoopButton(Button): - def __init__(self, console, name): - super().__init__(console, name) - - def press(self, *args): - if self.console.state.get('loop', 0): - print('******* loop off') - osc.client.send_message('/loop_toggle', 0) - else: - print('******* loop on') - osc.client.send_message('/loop_toggle', 1) - super().press() - - -class TransportButton(Button): - def __init__(self, console, name): - super().__init__(console, name) - - def press(self): - addr = osc_addrs.get(self.name, None) - if addr: - osc.client.send_message(addr, 1) - super().press() - - -class BankSwitchButton(Button): - def __init__(self, console, name, direction): - super().__init__(console, name) - self.direction = direction - - def press(self): - - direction = self.direction - more_up = self.console.more_banks_up - more_down = self.console.more_banks_down - print(direction, more_up, more_down) - if direction > 0 and more_up: - print('calling /bank_up 1') - osc.client.send_message('/bank_up', 1) - elif direction < 0 and more_down: - print('calling /bank_down 1') - osc.client.send_message('/bank_down', 1) - super().press() - - -class NudgeButton(Button): - def __init__(self, console, name, direction): - super().__init__(console, name) - self.direction = direction - - def nudge_press(self): - direction = self.direction - print(direction) - if direction > 0: - osc.client.send_message('/access_action', - 'Common/nudge-next-forward') - else: - osc.client.send_message('/access_action', - 'Common/nudge-next-backward') - super().press() - - -NULLBUTTON = Button(None, None) + self.pressed = False + osc.client.send_message(self.addr, (self.strip.num, 0)) |
