DYTSrouce/src/ui/Menu/SystemManagerMenu.cpp
2025-11-04 07:23:35 +08:00

88 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "SystemManagerMenu.h"
#include <QMessageBox>
#include "common/SpdLogger.h"
#include "ui/MainFrame.h"
#include "ui/DockWidget.h"
#include "ui_SystemManagerMenu.h"
SystemManagerMenu::SystemManagerMenu(QWidget* parent)
: QWidget(parent)
, ui(new Ui::SystemManagerMenu) {
ui->setupUi(this);
InitConnect();
LOG_INFO("SystemManagerMenu init");
windowManagerMenu_ = new QMenu(this);
windowManagerMenu_->setWindowFlags(windowManagerMenu_->windowFlags() | Qt::FramelessWindowHint);
ui->menu_uisetting->setVisible(false);
}
SystemManagerMenu::~SystemManagerMenu() {
delete ui;
}
void SystemManagerMenu::AddDockWidget(class DockWidget* dockWidget) {
QAction* action = new QAction(dockWidget->windowTitle(), this);
connect(dockWidget, &DockWidget::windowTitleChanged, [action](const QString& title) {
action->setText(title);
}
);
action->setCheckable(true);
// 勾选状态应与可见状态一致
action->setChecked(dockWidget->isVisible());
// 绑定 dock 到 action便于打开菜单时同步状态
action->setData(QVariant::fromValue(dockWidget));
connect(action, &QAction::triggered, [dockWidget, action]() {
dockWidget->setVisible(action->isChecked());
}
);
// 同步可见性变化到勾选状态
connect(dockWidget, &DockWidget::visibilityChanged, [action](bool visible) {
action->setChecked(visible);
});
connect(dockWidget, &DockWidget::signalClose, [action]() {
action->setChecked(false);
});
windowManagerMenu_->addAction(action);
}
void SystemManagerMenu::RemoveDockWidget(class DockWidget* dockWidget) {
}
void SystemManagerMenu::InitConnect() {
connect(ui->menu_exit, &QToolButton::clicked, this, &SystemManagerMenu::OnExit);
//ui->menu_window_manager->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->menu_window_manager, &QToolButton::clicked,
this, &SystemManagerMenu::OnWindowManagerMenu);
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();
}
}
void SystemManagerMenu::OnWindowManagerMenu() {
// <20><><EFBFBD>Ӵ<EFBFBD><D3B4>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD>˵<EFBFBD>
LOG_INFO("add window manager menu");
// 打开菜单前,同步所有条目的勾选状态与当前 dock 可见性
for (QAction* act : windowManagerMenu_->actions()) {
QVariant v = act->data();
if (v.isValid()) {
DockWidget* dock = v.value<DockWidget*>();
if (dock) {
act->setChecked(dock->isVisible());
}
}
}
windowManagerMenu_->exec(QCursor::pos());
}