From 2354cc450103c4026fcca11562f29f3d089b5736 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Sat, 26 Aug 2023 00:11:05 +0100 Subject: [PATCH] implements strip output events --- src/nvda_voicemeeter/builder.py | 16 ++++++++-------- src/nvda_voicemeeter/models.py | 32 ++++++++++++++++---------------- src/nvda_voicemeeter/window.py | 15 ++++++++++++--- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/nvda_voicemeeter/builder.py b/src/nvda_voicemeeter/builder.py index fd8f45f..a2e5e59 100644 --- a/src/nvda_voicemeeter/builder.py +++ b/src/nvda_voicemeeter/builder.py @@ -11,9 +11,9 @@ from .util import ( class Builder: """Responsible for building the Window layout""" - def __init__(self, window, vm): + def __init__(self, window): self.window = window - self.vm = vm + self.vm = self.window.vm self.kind = self.vm.kind def run(self) -> list: @@ -38,9 +38,9 @@ class Builder: tab1 = psg.Tab("settings", layout0, key="settings") tab2 = psg.Tab("physical strips", layout1, key="physical strip") tab3 = psg.Tab("virtual strips", layout2, key="virtual strip") - Tg = psg.TabGroup([[tab1, tab2, tab3]], change_submits=True, key="tabs") + tab_group = psg.TabGroup([[tab1, tab2, tab3]], change_submits=True, key="tabs") - return [[Tg]] + return [[tab_group]] def make_tab0_row0(self) -> psg.Frame: """row0 represents hardware outs""" @@ -186,9 +186,9 @@ class Builder: [step(outputs) for step in (add_strip_outputs,)] return psg.Frame(self.vm.strip[i].label, outputs) - def make_tab1_rows(self) -> list: + def make_tab1_rows(self) -> psg.Frame: layout = [[self.make_tab1_row(i)] for i in range(self.kind.phys_out)] - return psg.Frame(f"", layout) + return psg.Frame(None, layout, border_width=0) def make_tab2_row(self, i) -> psg.Frame: def add_strip_outputs(layout): @@ -209,6 +209,6 @@ class Builder: [step(outputs) for step in (add_strip_outputs,)] return psg.Frame(self.vm.strip[i].label, outputs) - def make_tab2_rows(self) -> list: + def make_tab2_rows(self) -> psg.Frame: layout = [[self.make_tab1_row(i)] for i in range(self.kind.phys_out, self.kind.phys_out + self.kind.virt_out)] - return psg.Frame(f"", layout) + return psg.Frame(None, layout, border_width=0) diff --git a/src/nvda_voicemeeter/models.py b/src/nvda_voicemeeter/models.py index eaf98a3..233bd19 100644 --- a/src/nvda_voicemeeter/models.py +++ b/src/nvda_voicemeeter/models.py @@ -1,28 +1,28 @@ -def _make_cache(vm) -> dict: +def _make_output_cache(vm) -> dict: match vm.kind.name: case "basic": return { - **{f"BUTTON||strip {i} A1": vm.strip[i].A1 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} B1": vm.strip[i].B1 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A1": vm.strip[i].A1 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||B1": vm.strip[i].B1 for i in range(vm.kind.num_strip)}, } case "banana": return { - **{f"BUTTON||strip {i} A1": vm.strip[i].A1 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} A2": vm.strip[i].A2 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} A3": vm.strip[i].A3 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} B1": vm.strip[i].B1 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} B2": vm.strip[i].B2 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A1": vm.strip[i].A1 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A2": vm.strip[i].A2 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A3": vm.strip[i].A3 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||B1": vm.strip[i].B1 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||B2": vm.strip[i].B2 for i in range(vm.kind.num_strip)}, } case "potato": return { - **{f"BUTTON||strip {i} A1": vm.strip[i].A1 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} A2": vm.strip[i].A2 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} A3": vm.strip[i].A3 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} A4": vm.strip[i].A4 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} A5": vm.strip[i].A5 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} B1": vm.strip[i].B1 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} B2": vm.strip[i].B2 for i in range(vm.kind.num_strip)}, - **{f"BUTTON||strip {i} B3": vm.strip[i].B3 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A1": vm.strip[i].A1 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A2": vm.strip[i].A2 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A3": vm.strip[i].A3 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A4": vm.strip[i].A4 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||A5": vm.strip[i].A5 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||B1": vm.strip[i].B1 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||B2": vm.strip[i].B2 for i in range(vm.kind.num_strip)}, + **{f"STRIP {i}||B3": vm.strip[i].B3 for i in range(vm.kind.num_strip)}, } diff --git a/src/nvda_voicemeeter/window.py b/src/nvda_voicemeeter/window.py index 0796ce7..8367660 100644 --- a/src/nvda_voicemeeter/window.py +++ b/src/nvda_voicemeeter/window.py @@ -3,7 +3,7 @@ import logging import PySimpleGUI as psg from .builder import Builder -from .models import _make_cache, _patch_insert_channels +from .models import _make_output_cache, _patch_insert_channels from .nvda import Nvda from .parser import Parser from .util import ( @@ -24,10 +24,10 @@ class NVDAVMWindow(psg.Window): self.vm = vm self.kind = self.vm.kind self.logger = logger.getChild(type(self).__name__) - self.cache = {} + self.cache = {"outputs": _make_output_cache(self.vm)} self.nvda = Nvda() self.parser = Parser() - self.builder = Builder(self, self.vm) + self.builder = Builder(self) layout = self.builder.run() super().__init__(title, layout, finalize=True) [self[f"HARDWARE OUT||A{i + 1}"].Widget.config(takefocus=1) for i in range(self.kind.phys_out)] @@ -165,6 +165,15 @@ class NVDAVMWindow(psg.Window): channel = _patch_insert_channels[int(channel)] num = int(in_num[-1]) self.nvda.speak(f"Patch INSERT IN#{num} {channel} {'on' if val else 'off'}") + + # Strip outputs + case [["STRIP", "0"], [output]]: + val = not self.cache["outputs"][f"STRIP {index}||{output}"] + setattr(self.vm.strip[int(index)], output, val) + self.cache["outputs"][f"STRIP {index}||{output}"] = val + case [["STRIP", index], [output], ["FOCUS", "IN"]]: + val = self.cache["outputs"][f"STRIP {index}||{output}"] + self.nvda.speak(f"STRIP {index} {output} {'on' if val else 'off'}") case _: self.logger.error(f"Unknown event {event}") self.logger.debug(parsed_cmd)