mirror of
https://github.com/onyx-and-iris/voicemeeter-compact.git
synced 2026-04-18 05:23:31 +00:00
gui rewritten with builder classes and observables
gui rewritten with builder classes and observables
This commit is contained in:
@@ -1,156 +1,87 @@
|
||||
import tkinter as tk
|
||||
from tkinter import ttk
|
||||
|
||||
from .channels import ChannelFrame
|
||||
from . import builders
|
||||
from .data import _configuration
|
||||
from .gainlayer import SubMixFrame
|
||||
from .data import _base_vals
|
||||
|
||||
|
||||
class Navigation(ttk.Frame):
|
||||
def __init__(self, parent):
|
||||
super().__init__(parent)
|
||||
self._parent = parent
|
||||
self.s = parent.styletable
|
||||
self.parent = parent
|
||||
self.grid(row=0, column=3, sticky=(tk.W, tk.E))
|
||||
self.styletable = self.parent.styletable
|
||||
|
||||
self.submix = tk.BooleanVar()
|
||||
self.channel = tk.BooleanVar()
|
||||
self.extend = tk.BooleanVar()
|
||||
self.info = tk.BooleanVar()
|
||||
self.builder = builders.NavigationFrameBuilder(self)
|
||||
self.builder.setup()
|
||||
self.builder.create_submix_button()
|
||||
self.builder.create_channel_button()
|
||||
self.builder.create_extend_button()
|
||||
self.builder.create_info_button()
|
||||
self.builder.grid_configure()
|
||||
|
||||
self.channel_text = tk.StringVar()
|
||||
self.channel_text.set(parent.channel_frame.identifier.upper())
|
||||
self.extend_text = tk.StringVar()
|
||||
self.extend_text.set("EXTEND")
|
||||
self.info_text = tk.StringVar()
|
||||
self._parent.submix_frame = None
|
||||
|
||||
self._make_widgets()
|
||||
|
||||
self.col_row_configure()
|
||||
|
||||
def _make_widgets(self):
|
||||
"""Creates the navigation buttons"""
|
||||
self.submix_button = ttk.Checkbutton(
|
||||
self,
|
||||
text="SUBMIX",
|
||||
command=self.show_submix,
|
||||
style=f"{'Toggle.TButton' if _base_vals.using_theme else f'Submix.TButton'}",
|
||||
variable=self.submix,
|
||||
)
|
||||
self.channel_button = ttk.Checkbutton(
|
||||
self,
|
||||
textvariable=self.channel_text,
|
||||
command=self.switch_channel,
|
||||
style=f"{'Toggle.TButton' if _base_vals.using_theme else f'Channel.TButton'}",
|
||||
variable=self.channel,
|
||||
)
|
||||
self.extend_button = ttk.Checkbutton(
|
||||
self,
|
||||
textvariable=self.extend_text,
|
||||
command=self.extend_frame,
|
||||
style=f"{'Toggle.TButton' if _base_vals.using_theme else f'Extend.TButton'}",
|
||||
variable=self.extend,
|
||||
)
|
||||
self.info_button = ttk.Checkbutton(
|
||||
self,
|
||||
textvariable=self.info_text,
|
||||
style=f"{'Toggle.TButton' if _base_vals.using_theme else f'Rec.TButton'}",
|
||||
variable=self.info,
|
||||
)
|
||||
self.info_button["state"] = "active"
|
||||
|
||||
""" Position navigation buttons """
|
||||
self.submix_button.grid(column=0, row=0)
|
||||
self.channel_button.grid(column=0, row=1, rowspan=1)
|
||||
self.extend_button.grid(column=0, row=2)
|
||||
self.info_button.grid(column=0, row=3)
|
||||
|
||||
if self._parent.kind.name != "Potato":
|
||||
self.submix_button["state"] = "disabled"
|
||||
self.mainframebuilder = builders.MainFrameBuilder(self.parent)
|
||||
|
||||
def show_submix(self):
|
||||
if self.submix.get():
|
||||
if _base_vals.extends_horizontal:
|
||||
self._parent.submix_frame = SubMixFrame(self._parent)
|
||||
self._parent.submix_frame.grid(row=0, column=2)
|
||||
if self._parent.bus_frame:
|
||||
self._parent.bus_frame.grid_remove()
|
||||
else:
|
||||
self._parent.submix_frame = SubMixFrame(self._parent)
|
||||
self._parent.submix_frame.grid(row=2, column=0, sticky=(tk.W))
|
||||
if self._parent.bus_frame:
|
||||
self._parent.bus_frame.grid_remove()
|
||||
self.parent.submix_frame = SubMixFrame(self.parent)
|
||||
else:
|
||||
if _base_vals.extends_horizontal:
|
||||
self._parent.submix_frame.destroy()
|
||||
if self._parent.bus_frame:
|
||||
self._parent.bus_frame.grid()
|
||||
if _configuration.extends_horizontal:
|
||||
self.parent.submix_frame.teardown()
|
||||
if self.parent.bus_frame:
|
||||
self.parent.bus_frame.grid()
|
||||
else:
|
||||
self._parent.columnconfigure(1, weight=0)
|
||||
self.parent.columnconfigure(1, weight=0)
|
||||
else:
|
||||
self._parent.submix_frame.destroy()
|
||||
if self._parent.bus_frame:
|
||||
self._parent.bus_frame.grid()
|
||||
self.parent.submix_frame.teardown()
|
||||
if self.parent.bus_frame:
|
||||
self.parent.bus_frame.grid()
|
||||
else:
|
||||
self._parent.rowconfigure(2, weight=0, minsize=0)
|
||||
self.parent.rowconfigure(2, weight=0, minsize=0)
|
||||
|
||||
if not _base_vals.using_theme:
|
||||
self.s.configure(
|
||||
if not _configuration.themes_enabled:
|
||||
self.styletable.configure(
|
||||
f"Submix.TButton",
|
||||
background=f'{"purple" if self.submix.get() else "white"}',
|
||||
)
|
||||
|
||||
def switch_channel(self):
|
||||
if self.channel_text.get() == "STRIP":
|
||||
self._parent.bus_frame = ChannelFrame.make_buses(self._parent)
|
||||
self._parent.bus_frame.grid(row=0, column=0)
|
||||
self._parent.channel_frame.destroy()
|
||||
self.mainframebuilder.create_channelframe("bus")
|
||||
self.parent.strip_frame.teardown()
|
||||
else:
|
||||
self._parent.channel_frame = ChannelFrame.make_strips(self._parent)
|
||||
self._parent.channel_frame.grid(row=0, column=0)
|
||||
self._parent.bus_frame.destroy()
|
||||
self.mainframebuilder.create_channelframe("strip")
|
||||
self.parent.bus_frame.teardown()
|
||||
|
||||
self.extend_button["state"] = (
|
||||
"disabled" if self.channel_text.get() == "STRIP" else "normal"
|
||||
)
|
||||
[frame.destroy() for frame in self._parent.configframes]
|
||||
[frame.teardown() for frame in self.parent.configframes]
|
||||
self.channel_text.set("BUS" if self.channel_text.get() == "STRIP" else "STRIP")
|
||||
|
||||
def extend_frame(self):
|
||||
_configuration.extended = self.extend.get()
|
||||
if self.extend.get():
|
||||
self.channel_button["state"] = "disabled"
|
||||
self._parent.bus_frame = ChannelFrame.make_buses(self._parent)
|
||||
if _base_vals.extends_horizontal:
|
||||
self._parent.bus_frame.grid(row=0, column=2)
|
||||
else:
|
||||
self._parent.bus_frame.grid(row=2, column=0, sticky=(tk.W))
|
||||
self.mainframebuilder.create_channelframe("bus")
|
||||
else:
|
||||
[
|
||||
frame.destroy()
|
||||
for frame in self._parent.configframes
|
||||
frame.teardown()
|
||||
for frame in self.parent.configframes
|
||||
if "!busconfig" in str(frame)
|
||||
]
|
||||
self._parent.bus_frame.destroy()
|
||||
self._parent.bus_frame = None
|
||||
self.parent.bus_frame.teardown()
|
||||
self.parent.bus_frame = None
|
||||
self.channel_button["state"] = "normal"
|
||||
|
||||
if self._parent.submix_frame:
|
||||
self._parent.submix_frame.destroy()
|
||||
if self.parent.submix_frame:
|
||||
self.parent.submix_frame.teardown()
|
||||
self.submix.set(False)
|
||||
if not _base_vals.using_theme:
|
||||
self.s.configure(
|
||||
if not _configuration.themes_enabled:
|
||||
self.styletable.configure(
|
||||
f"Submix.TButton",
|
||||
background=f'{"purple" if self.submix.get() else "white"}',
|
||||
)
|
||||
|
||||
self.extend_text.set("REDUCE" if self.extend.get() else "EXTEND")
|
||||
|
||||
def col_row_configure(self):
|
||||
[
|
||||
child.grid_configure(padx=1, pady=1, sticky=(tk.N, tk.S, tk.W, tk.E))
|
||||
for child in self.winfo_children()
|
||||
if isinstance(child, ttk.Checkbutton)
|
||||
]
|
||||
|
||||
self.rowconfigure(1, minsize=self._parent.channel_frame.height - 18)
|
||||
self.grid(sticky=(tk.N))
|
||||
|
||||
Reference in New Issue
Block a user