diff --git a/data/database.db b/data/database.db index 770824a..7250b6a 100644 Binary files a/data/database.db and b/data/database.db differ diff --git a/database/__pycache__/db_manager.cpython-313.pyc b/database/__pycache__/db_manager.cpython-313.pyc index e502e4d..d296ef0 100644 Binary files a/database/__pycache__/db_manager.cpython-313.pyc and b/database/__pycache__/db_manager.cpython-313.pyc differ diff --git a/widgets/__pycache__/avas_controller.cpython-313.pyc b/widgets/__pycache__/avas_controller.cpython-313.pyc new file mode 100644 index 0000000..f11852d Binary files /dev/null and b/widgets/__pycache__/avas_controller.cpython-313.pyc differ diff --git a/widgets/__pycache__/avas_widget.cpython-313.pyc b/widgets/__pycache__/avas_widget.cpython-313.pyc index a3210e0..34bdfaf 100644 Binary files a/widgets/__pycache__/avas_widget.cpython-313.pyc and b/widgets/__pycache__/avas_widget.cpython-313.pyc differ diff --git a/widgets/avas_controller.py b/widgets/avas_controller.py new file mode 100644 index 0000000..2227cea --- /dev/null +++ b/widgets/avas_controller.py @@ -0,0 +1,77 @@ +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 \ No newline at end of file diff --git a/widgets/avas_widget.py b/widgets/avas_widget.py index dc74783..2581bf4 100644 --- a/widgets/avas_widget.py +++ b/widgets/avas_widget.py @@ -8,6 +8,7 @@ from widgets.audio_filter_widget import AudioFilterWidget from widgets.project_dialog import AddProjectDialog import sqlite3 from database.db_manager import DatabaseManager # 添加这行导入 +from widgets.avas_controller import AVASController class ChannelButton(QWidget): def __init__(self, channel_num): @@ -126,8 +127,11 @@ class AVAS_WIDGET(QWidget): # 初始化数据库管理器 self.db_manager = DatabaseManager() + # 初始化控制器 + self.controller = AVASController(self.db_manager, self) + self.setWindowTitle("AVAS") - self.is_panel_visible = True # 添加状态标记 + self.is_panel_visible = True self.setup_ui() self.setup_connections() @@ -142,7 +146,7 @@ class AVAS_WIDGET(QWidget): toggle_container = QVBoxLayout() self.toggle_button = QPushButton("◀") # 使用箭头符号 self.toggle_button.setFixedSize(20, 60) - self.toggle_button.clicked.connect(self.toggle_panel) + self.toggle_button.clicked.connect(self.controller.toggle_panel) self.toggle_button.setStyleSheet(""" QPushButton { background-color: #404040; @@ -347,6 +351,14 @@ class AVAS_WIDGET(QWidget): return frame def setup_connections(self): + """设置信号连接""" + # 连接控制器信号 + self.controller.channel_selected.connect(self.on_channel_selected) + self.controller.panel_toggled.connect(self.on_panel_toggled) + + # 连接切换按钮 + self.toggle_button.clicked.connect(self.controller.toggle_panel) + # 假设添加按钮的变量名是 add_btn self.add_btn.clicked.connect(self.add_project) @@ -390,3 +402,19 @@ class AVAS_WIDGET(QWidget): item.setToolTip(project.description) # 显示项目描述为提示 model.appendRow(item) + def on_channel_selected(self, channel_num: int): + """处理通道选择事件""" + # 更新UI显示 + pass + + def on_panel_toggled(self, is_visible: bool): + """处理面板切换事件""" + # 更新UI布局 + self.adjustSize() + + def closeEvent(self, event): + """窗口关闭事件""" + # 关闭所有打开的滤波器窗口 + self.controller.close_all_filter_windows() + super().closeEvent(event) +