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
|
|
|
|
}
|