Added mouse fader control
This commit is contained in:
parent
04060ef5a1
commit
9001ab7026
1 changed files with 44 additions and 10 deletions
54
main.py
54
main.py
|
|
@ -6,6 +6,7 @@ from rich.segment import Segment
|
||||||
from rich.style import Style
|
from rich.style import Style
|
||||||
from textual import events
|
from textual import events
|
||||||
from textual.app import App, ComposeResult, Widget, RenderResult
|
from textual.app import App, ComposeResult, Widget, RenderResult
|
||||||
|
from textual.binding import Binding
|
||||||
from textual.color import Color
|
from textual.color import Color
|
||||||
from textual.containers import HorizontalScroll, Horizontal, Vertical, Container
|
from textual.containers import HorizontalScroll, Horizontal, Vertical, Container
|
||||||
from textual.events import Event, MouseEvent
|
from textual.events import Event, MouseEvent
|
||||||
|
|
@ -230,12 +231,12 @@ class Channel(Widget):
|
||||||
('equals', 'move_fader(.5)'),
|
('equals', 'move_fader(.5)'),
|
||||||
('plus', 'move_fader(.5)'),
|
('plus', 'move_fader(.5)'),
|
||||||
('minus', 'move_fader(-.5)'),
|
('minus', 'move_fader(-.5)'),
|
||||||
('m', 'mute'),
|
Binding('m', 'mute', "Mute", show=True),
|
||||||
('s', 'solo'),
|
Binding('s', 'solo', "Solo", show=True),
|
||||||
('p', 'phantom'),
|
Binding('p', 'phantom', "48v", show=True),
|
||||||
('i', 'inst'),
|
Binding('i', 'inst', "Inst.", show=True),
|
||||||
('q', 'gain(-3)'),
|
Binding('q', 'gain(-3)', "+gain", show=True),
|
||||||
('e', 'gain(3)'),
|
Binding('e', 'gain(3)', "-gain", show=True),
|
||||||
]
|
]
|
||||||
|
|
||||||
can_focus = True
|
can_focus = True
|
||||||
|
|
@ -260,6 +261,13 @@ class Channel(Widget):
|
||||||
self.change = change
|
self.change = change
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
|
class SetFader(Message):
|
||||||
|
def __init__(self, channel: int, output=False, val=0):
|
||||||
|
self.channel = channel
|
||||||
|
self.output = output
|
||||||
|
self.val = val
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
class ChangeGain(MoveFader):
|
class ChangeGain(MoveFader):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
@ -296,6 +304,7 @@ class Channel(Widget):
|
||||||
self.phantom_available = phantom
|
self.phantom_available = phantom
|
||||||
self.inst_available = inst
|
self.inst_available = inst
|
||||||
self.output = output
|
self.output = output
|
||||||
|
self.mouse_moved = False
|
||||||
|
|
||||||
def compute_db_peak_value(self) -> float:
|
def compute_db_peak_value(self) -> float:
|
||||||
try:
|
try:
|
||||||
|
|
@ -420,6 +429,28 @@ class Channel(Widget):
|
||||||
else:
|
else:
|
||||||
self.action_move_fader(-1)
|
self.action_move_fader(-1)
|
||||||
|
|
||||||
|
def _on_mouse_down(self, event: events.MouseDown) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _on_mouse_up(self, event: events.MouseUp) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _set_level_from_mouse_event(self, event: events.MouseEvent):
|
||||||
|
position = 1 - (event.pointer_y / (event.widget.region.height - 1))
|
||||||
|
db = encoding.map_range(position, 0, 1, -75, 6)
|
||||||
|
self.post_message(self.SetFader(self.channel, output=self.output, val=db))
|
||||||
|
|
||||||
|
def _on_mouse_move(self, event: events.MouseMove) -> None:
|
||||||
|
if event.button == 1 and event.widget == self.query_one('#level-indicator'):
|
||||||
|
self._set_level_from_mouse_event(event)
|
||||||
|
self.mouse_moved = True
|
||||||
|
|
||||||
|
def _on_click(self, event: events.Click) -> None:
|
||||||
|
if not self.mouse_moved and event.button == 1 and event.widget == self.query_one('#level-indicator'):
|
||||||
|
self._set_level_from_mouse_event(event)
|
||||||
|
self.mouse_moved = False
|
||||||
|
|
||||||
|
|
||||||
def on_button_pressed(self, event):
|
def on_button_pressed(self, event):
|
||||||
if 'mute' == event.button.id:
|
if 'mute' == event.button.id:
|
||||||
self.action_mute()
|
self.action_mute()
|
||||||
|
|
@ -731,10 +762,6 @@ class Mixer(App):
|
||||||
self.query(ChannelRow)[y].query(Channel)[x].focus()
|
self.query(ChannelRow)[y].query(Channel)[x].focus()
|
||||||
self.update_mixer_display()
|
self.update_mixer_display()
|
||||||
|
|
||||||
def _move_fader(self, dval):
|
|
||||||
|
|
||||||
self.update_mixer_display()
|
|
||||||
|
|
||||||
def on_channel_phantom_toggle(self, message: Channel.PhantomToggle) -> None:
|
def on_channel_phantom_toggle(self, message: Channel.PhantomToggle) -> None:
|
||||||
if message.channel == 0:
|
if message.channel == 0:
|
||||||
self.out_port.send(encode_message(3, [0x00010001 ^ self.bf_status.ch1_48v << 16]))
|
self.out_port.send(encode_message(3, [0x00010001 ^ self.bf_status.ch1_48v << 16]))
|
||||||
|
|
@ -753,6 +780,13 @@ class Mixer(App):
|
||||||
self.mixer.matrix[message.channel][self.current_mix_out] + message.change)
|
self.mixer.matrix[message.channel][self.current_mix_out] + message.change)
|
||||||
self.update_mixer_display()
|
self.update_mixer_display()
|
||||||
|
|
||||||
|
def on_channel_set_fader(self, message: Channel.SetFader) -> None:
|
||||||
|
if message.output:
|
||||||
|
self.mixer.set_out_level(message.channel, message.val)
|
||||||
|
else:
|
||||||
|
self.mixer.set_mix_level(message.channel, self.current_mix_out, message.val)
|
||||||
|
self.update_mixer_display()
|
||||||
|
|
||||||
def on_channel_change_gain(self, message: Channel.ChangeGain) -> None:
|
def on_channel_change_gain(self, message: Channel.ChangeGain) -> None:
|
||||||
if message.channel > 1:
|
if message.channel > 1:
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue