summaryrefslogtreecommitdiff
path: root/tascam_fw_console/buttons.py
diff options
context:
space:
mode:
Diffstat (limited to 'tascam_fw_console/buttons.py')
-rw-r--r--tascam_fw_console/buttons.py235
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))