brisonus_app_eq/widgets/avas_widget.py

207 lines
6.7 KiB
Python
Raw Normal View History

2025-02-15 21:20:54 +08:00
import sys
from PySide6.QtWidgets import (QApplication, QWidget, QPushButton, QGridLayout,
QVBoxLayout, QHBoxLayout, QCheckBox, QComboBox,
QLabel, QSlider, QFrame, QGroupBox)
from PySide6.QtCore import Qt
from widgets.audio_filter_widget import AudioFilterWidget
class ChannelButton(QWidget):
def __init__(self, channel_num):
super().__init__()
self.channel_num = channel_num # 保存通道号
2025-02-15 21:20:54 +08:00
# Create GroupBox for the channel
self.group = QGroupBox(f"CH{channel_num}")
layout = QVBoxLayout()
layout.setSpacing(2)
# Channel button
self.channel_btn = QPushButton(f"Channel {channel_num}")
self.channel_btn.setFixedHeight(25)
# Store audio filter window reference
self.filter_window = None
# Controls container with two rows
controls_layout = QGridLayout()
controls_layout.setSpacing(2)
# SOLO row
self.solo_cb = QCheckBox("S")
self.solo_btn = QPushButton("SOLO")
self.solo_btn.setFixedHeight(20)
controls_layout.addWidget(self.solo_cb, 0, 0)
controls_layout.addWidget(self.solo_btn, 0, 1)
# MUTE row
self.mute_cb = QCheckBox("M")
self.mute_btn = QPushButton("MUTE")
self.mute_btn.setFixedHeight(20)
controls_layout.addWidget(self.mute_cb, 1, 0)
controls_layout.addWidget(self.mute_btn, 1, 1)
# Add widgets to main layout
layout.addWidget(self.channel_btn)
layout.addLayout(controls_layout)
# Set GroupBox layout
self.group.setLayout(layout)
# Main layout
main_layout = QVBoxLayout()
main_layout.addWidget(self.group)
main_layout.setContentsMargins(2, 2, 2, 2)
self.setLayout(main_layout)
# Set fixed size for the channel widget
self.setFixedSize(110, 100)
# Style
self.channel_btn.setStyleSheet("""
QPushButton {
background-color: #404040;
color: white;
border: 1px solid #505050;
}
QPushButton:hover {
background-color: #505050;
}
""")
button_style = """
QPushButton {
background-color: #303030;
color: white;
border: 1px solid #404040;
padding: 2px;
}
QPushButton:hover {
background-color: #404040;
}
"""
self.solo_btn.setStyleSheet(button_style)
self.mute_btn.setStyleSheet(button_style)
self.group.setStyleSheet("""
QGroupBox {
border: 1px solid #505050;
margin-top: 0.5em;
padding: 2px;
}
QCheckBox {
spacing: 2px;
}
""")
# Connect button click event
self.channel_btn.clicked.connect(self.show_filter_window)
def show_filter_window(self):
if not self.filter_window:
# 创建滤波器窗口时传入对应的通道号
self.filter_window = AudioFilterWidget(channel_id=self.channel_num)
2025-02-15 21:20:54 +08:00
self.filter_window.setWindowTitle(f"Channel {self.group.title()} Filter Settings")
# Show the window if it's not visible
if not self.filter_window.isVisible():
self.filter_window.show()
else:
# If already visible, bring to front
self.filter_window.raise_()
self.filter_window.activateWindow()
class AVAS_WIDGET(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("AVAS")
self.setup_ui()
def setup_ui(self):
main_layout = QVBoxLayout()
# Top section - Channel buttons
channels_layout = QGridLayout()
for i in range(24):
row = i // 8
col = i % 8
channel = ChannelButton(i + 1)
channels_layout.addWidget(channel, row, col)
# Middle section
middle_layout = QHBoxLayout()
# Left side - Parameter matrix
param_matrix = self.create_parameter_matrix()
# Right side - Filter controls
filter_controls = self.create_filter_controls()
middle_layout.addWidget(param_matrix, stretch=2)
middle_layout.addWidget(filter_controls, stretch=1)
# Bottom section
bottom_layout = QHBoxLayout()
clean_btn = QPushButton("Clean")
send_btn = QPushButton("Send")
enable_cb = QCheckBox("Enable")
bottom_layout.addStretch()
bottom_layout.addWidget(clean_btn)
bottom_layout.addWidget(send_btn)
bottom_layout.addWidget(enable_cb)
# Add all sections to main layout
main_layout.addLayout(channels_layout)
main_layout.addLayout(middle_layout)
main_layout.addLayout(bottom_layout)
self.setLayout(main_layout)
def create_parameter_matrix(self):
frame = QFrame()
frame.setFrameStyle(QFrame.Box)
layout = QGridLayout()
# Add headers and parameter rows
for i in range(24): # 24 channels
layout.addWidget(QLabel(f"Ch{i+1}"), i+1, 0)
# Add parameter controls for each channel
for j in range(5): # Example: 5 parameters per channel
layout.addWidget(QSlider(Qt.Horizontal), i+1, j+1)
frame.setLayout(layout)
return frame
def create_filter_controls(self):
frame = QFrame()
frame.setFrameStyle(QFrame.Box)
layout = QVBoxLayout()
# Filter selection
filter_select = QComboBox()
filter_select.addItems(["Filter 1", "Filter 2", "Filter 3"])
# Filter type radio buttons
filter_types = QVBoxLayout()
types = ["Pink-Pin", "Bass Setting", "Stereo Surround", "None"]
for type_name in types:
filter_types.addWidget(QCheckBox(type_name))
# Sliders
sliders_layout = QVBoxLayout()
slider_labels = ["Input Level", "Freq", "Gain"]
for label in slider_labels:
sliders_layout.addWidget(QLabel(label))
sliders_layout.addWidget(QSlider(Qt.Horizontal))
layout.addWidget(QLabel("Filter Select"))
layout.addWidget(filter_select)
layout.addLayout(filter_types)
layout.addLayout(sliders_layout)
frame.setLayout(layout)
return frame