[feature] 新增avas_widget相关控制类
This commit is contained in:
parent
451086bac8
commit
92245276fc
BIN
data/database.db
BIN
data/database.db
Binary file not shown.
Binary file not shown.
BIN
widgets/__pycache__/avas_controller.cpython-313.pyc
Normal file
BIN
widgets/__pycache__/avas_controller.cpython-313.pyc
Normal file
Binary file not shown.
Binary file not shown.
77
widgets/avas_controller.py
Normal file
77
widgets/avas_controller.py
Normal file
@ -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
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user