88 lines
2.8 KiB
C++
88 lines
2.8 KiB
C++
#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());
|
||
}
|