DYTSrouce/src/ui/Menu/SystemManagerMenu.cpp

88 lines
2.8 KiB
C++
Raw Normal View History

2025-01-04 04:12:51 +00:00
#include "SystemManagerMenu.h"
#include <QMessageBox>
#include "common/SpdLogger.h"
#include "ui/MainFrame.h"
2025-02-10 15:24:06 +00:00
#include "ui/DockWidget.h"
2025-01-04 04:12:51 +00:00
#include "ui_SystemManagerMenu.h"
SystemManagerMenu::SystemManagerMenu(QWidget* parent)
: QWidget(parent)
, ui(new Ui::SystemManagerMenu) {
ui->setupUi(this);
InitConnect();
2025-02-10 15:24:06 +00:00
LOG_INFO("SystemManagerMenu init");
windowManagerMenu_ = new QMenu(this);
2025-02-12 00:58:27 +00:00
windowManagerMenu_->setWindowFlags(windowManagerMenu_->windowFlags() | Qt::FramelessWindowHint);
2025-10-27 15:25:31 +00:00
ui->menu_uisetting->setVisible(false);
2025-01-04 04:12:51 +00:00
}
SystemManagerMenu::~SystemManagerMenu() {
delete ui;
}
2025-02-10 15:24:06 +00:00
void SystemManagerMenu::AddDockWidget(class DockWidget* dockWidget) {
QAction* action = new QAction(dockWidget->windowTitle(), this);
2025-02-10 16:27:16 +00:00
connect(dockWidget, &DockWidget::windowTitleChanged, [action](const QString& title) {
action->setText(title);
}
);
action->setCheckable(true);
2025-11-03 23:23:35 +00:00
// 勾选状态应与可见状态一致
action->setChecked(dockWidget->isVisible());
// 绑定 dock 到 action便于打开菜单时同步状态
action->setData(QVariant::fromValue(dockWidget));
2025-02-10 16:27:16 +00:00
connect(action, &QAction::triggered, [dockWidget, action]() {
dockWidget->setVisible(action->isChecked());
}
);
2025-11-03 23:23:35 +00:00
// 同步可见性变化到勾选状态
connect(dockWidget, &DockWidget::visibilityChanged, [action](bool visible) {
action->setChecked(visible);
});
2025-02-12 14:04:02 +00:00
connect(dockWidget, &DockWidget::signalClose, [action]() {
action->setChecked(false);
});
2025-02-10 16:27:16 +00:00
windowManagerMenu_->addAction(action);
2025-02-10 15:24:06 +00:00
}
void SystemManagerMenu::RemoveDockWidget(class DockWidget* dockWidget) {
}
2025-01-04 04:12:51 +00:00
void SystemManagerMenu::InitConnect() {
connect(ui->menu_exit, &QToolButton::clicked, this, &SystemManagerMenu::OnExit);
2025-02-10 16:27:16 +00:00
//ui->menu_window_manager->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->menu_window_manager, &QToolButton::clicked,
this, &SystemManagerMenu::OnWindowManagerMenu);
2025-01-04 04:12:51 +00:00
connect(ui->menu_uisetting, &QToolButton::clicked, this, &SystemManagerMenu::signalShowUISetting);
}
void SystemManagerMenu::OnExit() {
int ret = QMessageBox::question(&MainFrame::Get(), tr("question"), tr("are you sure to exit"),
QMessageBox::Ok | QMessageBox::No);
if (QMessageBox::Ok == ret) {
LOG_INFO("user exit");
qApp->quit();
}
}
2025-02-10 15:24:06 +00:00
void SystemManagerMenu::OnWindowManagerMenu() {
2025-11-03 23:23:35 +00:00
// <20><><EFBFBD>Ӵ<EFBFBD><D3B4>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>˵<EFBFBD>
2025-02-10 15:24:06 +00:00
LOG_INFO("add window manager menu");
2025-11-03 23:23:35 +00:00
// 打开菜单前,同步所有条目的勾选状态与当前 dock 可见性
for (QAction* act : windowManagerMenu_->actions()) {
QVariant v = act->data();
if (v.isValid()) {
DockWidget* dock = v.value<DockWidget*>();
if (dock) {
act->setChecked(dock->isVisible());
}
}
}
2025-02-10 16:27:16 +00:00
windowManagerMenu_->exec(QCursor::pos());
2025-02-10 15:24:06 +00:00
}