77 lines
3.2 KiB
Python
77 lines
3.2 KiB
Python
from PySide6.QtCore import QObject, Signal
|
|
from PySide6.QtWidgets import QMessageBox
|
|
from database.db_manager import DatabaseManager
|
|
from database.models import ProjectData, ConfigData
|
|
from typing import Optional, List
|
|
from widgets.audio_filter_widget import AudioFilterWidget
|
|
|
|
class AVASController(QObject):
|
|
# 定义信号
|
|
channel_selected = Signal(int) # 通道选择信号
|
|
panel_toggled = Signal(bool) # 面板切换信号
|
|
|
|
def __init__(self, db_manager: DatabaseManager, view: 'AVAS_WIDGET'):
|
|
super().__init__()
|
|
self.db_manager = db_manager
|
|
self.view = view
|
|
self.current_channel: Optional[int] = None
|
|
self.filter_windows: dict[int, AudioFilterWidget] = {} # 存储打开的滤波器窗口
|
|
|
|
def toggle_panel(self) -> None:
|
|
"""切换左侧面板显示状态"""
|
|
self.view.is_panel_visible = not self.view.is_panel_visible
|
|
self.view.left_panel.setVisible(self.view.is_panel_visible)
|
|
# 更新切换按钮文本
|
|
self.view.toggle_button.setText("▶" if self.view.is_panel_visible else "◀")
|
|
self.panel_toggled.emit(self.view.is_panel_visible)
|
|
|
|
def select_channel(self, channel_num: int) -> None:
|
|
"""选择通道"""
|
|
self.current_channel = channel_num
|
|
self.channel_selected.emit(channel_num)
|
|
|
|
def show_filter_window(self, channel_num: int) -> None:
|
|
"""显示滤波器窗口"""
|
|
# 如果窗口已存在且可见,则激活它
|
|
if channel_num in self.filter_windows and self.filter_windows[channel_num].isVisible():
|
|
self.filter_windows[channel_num].raise_()
|
|
self.filter_windows[channel_num].activateWindow()
|
|
else:
|
|
# 创建新窗口
|
|
filter_window = AudioFilterWidget(channel_id=channel_num)
|
|
filter_window.setWindowTitle(f"Channel {channel_num} Filter Settings")
|
|
|
|
# 存储窗口引用
|
|
self.filter_windows[channel_num] = filter_window
|
|
|
|
# 监听窗口关闭事件
|
|
filter_window.destroyed.connect(
|
|
lambda: self._on_filter_window_closed(channel_num)
|
|
)
|
|
|
|
filter_window.show()
|
|
|
|
def _on_filter_window_closed(self, channel_num: int) -> None:
|
|
"""处理滤波器窗口关闭事件"""
|
|
if channel_num in self.filter_windows:
|
|
del self.filter_windows[channel_num]
|
|
|
|
def close_all_filter_windows(self) -> None:
|
|
"""关闭所有打开的滤波器窗口"""
|
|
for window in self.filter_windows.values():
|
|
window.close()
|
|
self.filter_windows.clear()
|
|
|
|
def load_channel_config(self, channel_num: int, config_id: int) -> bool:
|
|
"""加载通道配置"""
|
|
try:
|
|
params, filters = self.db_manager.load_config(config_id)
|
|
if params and filters:
|
|
# 更新对应通道的滤波器窗口
|
|
if channel_num in self.filter_windows:
|
|
self.filter_windows[channel_num].model.load_data(params, filters)
|
|
return True
|
|
return False
|
|
except Exception as e:
|
|
QMessageBox.critical(self.view, "错误", f"加载通道配置失败:{str(e)}")
|
|
return False |