[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
|
from widgets.project_dialog import AddProjectDialog
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from database.db_manager import DatabaseManager # 添加这行导入
|
from database.db_manager import DatabaseManager # 添加这行导入
|
||||||
|
from widgets.avas_controller import AVASController
|
||||||
|
|
||||||
class ChannelButton(QWidget):
|
class ChannelButton(QWidget):
|
||||||
def __init__(self, channel_num):
|
def __init__(self, channel_num):
|
||||||
@ -126,8 +127,11 @@ class AVAS_WIDGET(QWidget):
|
|||||||
# 初始化数据库管理器
|
# 初始化数据库管理器
|
||||||
self.db_manager = DatabaseManager()
|
self.db_manager = DatabaseManager()
|
||||||
|
|
||||||
|
# 初始化控制器
|
||||||
|
self.controller = AVASController(self.db_manager, self)
|
||||||
|
|
||||||
self.setWindowTitle("AVAS")
|
self.setWindowTitle("AVAS")
|
||||||
self.is_panel_visible = True # 添加状态标记
|
self.is_panel_visible = True
|
||||||
self.setup_ui()
|
self.setup_ui()
|
||||||
self.setup_connections()
|
self.setup_connections()
|
||||||
|
|
||||||
@ -142,7 +146,7 @@ class AVAS_WIDGET(QWidget):
|
|||||||
toggle_container = QVBoxLayout()
|
toggle_container = QVBoxLayout()
|
||||||
self.toggle_button = QPushButton("◀") # 使用箭头符号
|
self.toggle_button = QPushButton("◀") # 使用箭头符号
|
||||||
self.toggle_button.setFixedSize(20, 60)
|
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("""
|
self.toggle_button.setStyleSheet("""
|
||||||
QPushButton {
|
QPushButton {
|
||||||
background-color: #404040;
|
background-color: #404040;
|
||||||
@ -347,6 +351,14 @@ class AVAS_WIDGET(QWidget):
|
|||||||
return frame
|
return frame
|
||||||
|
|
||||||
def setup_connections(self):
|
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
|
# 假设添加按钮的变量名是 add_btn
|
||||||
self.add_btn.clicked.connect(self.add_project)
|
self.add_btn.clicked.connect(self.add_project)
|
||||||
|
|
||||||
@ -390,3 +402,19 @@ class AVAS_WIDGET(QWidget):
|
|||||||
item.setToolTip(project.description) # 显示项目描述为提示
|
item.setToolTip(project.description) # 显示项目描述为提示
|
||||||
model.appendRow(item)
|
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