Added mouse fader control

This commit is contained in:
Brian Hrebec 2026-03-13 14:40:20 -05:00
parent 04060ef5a1
commit 9001ab7026

54
main.py
View file

@ -6,6 +6,7 @@ from rich.segment import Segment
from rich.style import Style
from textual import events
from textual.app import App, ComposeResult, Widget, RenderResult
from textual.binding import Binding
from textual.color import Color
from textual.containers import HorizontalScroll, Horizontal, Vertical, Container
from textual.events import Event, MouseEvent
@ -230,12 +231,12 @@ class Channel(Widget):
('equals', 'move_fader(.5)'),
('plus', 'move_fader(.5)'),
('minus', 'move_fader(-.5)'),
('m', 'mute'),
('s', 'solo'),
('p', 'phantom'),
('i', 'inst'),
('q', 'gain(-3)'),
('e', 'gain(3)'),
Binding('m', 'mute', "Mute", show=True),
Binding('s', 'solo', "Solo", show=True),
Binding('p', 'phantom', "48v", show=True),
Binding('i', 'inst', "Inst.", show=True),
Binding('q', 'gain(-3)', "+gain", show=True),
Binding('e', 'gain(3)', "-gain", show=True),
]
can_focus = True
@ -260,6 +261,13 @@ class Channel(Widget):
self.change = change
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):
pass
@ -296,6 +304,7 @@ class Channel(Widget):
self.phantom_available = phantom
self.inst_available = inst
self.output = output
self.mouse_moved = False
def compute_db_peak_value(self) -> float:
try:
@ -420,6 +429,28 @@ class Channel(Widget):
else:
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):
if 'mute' == event.button.id:
self.action_mute()
@ -731,10 +762,6 @@ class Mixer(App):
self.query(ChannelRow)[y].query(Channel)[x].focus()
self.update_mixer_display()
def _move_fader(self, dval):
self.update_mixer_display()
def on_channel_phantom_toggle(self, message: Channel.PhantomToggle) -> None:
if message.channel == 0:
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.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:
if message.channel > 1:
return