2025-01-04 04:12:51 +00:00
|
|
|
#include "FrameTitleBar.h"
|
|
|
|
|
|
|
|
#include <QStyleOption>
|
|
|
|
#include <QPainter>
|
|
|
|
#include <QAction>
|
|
|
|
#include <QButtonGroup>
|
2025-04-13 15:12:17 +00:00
|
|
|
#include <QMouseEvent>
|
2025-01-04 04:12:51 +00:00
|
|
|
|
|
|
|
#include <qDebug>
|
|
|
|
|
|
|
|
#include "common/RecourceHelper.h"
|
|
|
|
|
|
|
|
#include "ui_FrameTitleBar.h"
|
|
|
|
|
|
|
|
FrameTitleBar::FrameTitleBar(QWidget* parent)
|
|
|
|
: QFrame(parent)
|
|
|
|
, ui(new Ui::FrameTitleBar) {
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
|
|
setFocusPolicy(Qt::StrongFocus);
|
|
|
|
connect(ui->sys_close, &QPushButton::clicked, this, &FrameTitleBar::OnCloseBtnClicked);
|
|
|
|
connect(ui->sys_min, &QPushButton::clicked, this, &FrameTitleBar::OnMinBtnClicked);
|
|
|
|
connect(ui->sys_max, &QPushButton::clicked, this, &FrameTitleBar::OnMaxBtnClicked);
|
2025-04-20 03:57:25 +00:00
|
|
|
//connect(ui->sys_restore, &QPushButton::clicked, this, &FrameTitleBar::OnRestorClicked);
|
2025-01-04 04:12:51 +00:00
|
|
|
//connect(this, &FrameTitleBar::doubleClick, this, &FrameTitleBar::OnDoubleClicked);
|
|
|
|
|
2025-04-20 03:57:25 +00:00
|
|
|
/*ui->sys_close->setIcon(style()->standardPixmap(QStyle::SP_TitleBarCloseButton));
|
|
|
|
ui->sys_min->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMinButton));
|
|
|
|
ui->sys_max->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMaxButton));*/
|
2025-01-04 04:12:51 +00:00
|
|
|
|
|
|
|
SetSysButton(0);
|
|
|
|
|
|
|
|
setAttribute(Qt::WA_StyledBackground);
|
|
|
|
}
|
|
|
|
|
|
|
|
FrameTitleBar::~FrameTitleBar() {
|
|
|
|
delete ui;
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::SetTitle(const QString& title) {
|
2025-01-05 09:41:54 +00:00
|
|
|
ui->sys_title->setText(title);
|
2025-01-04 04:12:51 +00:00
|
|
|
if (mainWidget_) {
|
|
|
|
mainWidget_->setWindowTitle(title);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::SetMainWidget(QWidget* widget) {
|
|
|
|
mainWidget_ = widget;
|
2025-04-13 15:12:17 +00:00
|
|
|
if (nullptr == mainWidget_) {
|
|
|
|
qDebug() << __FUNCTION__ << "mainWidget is nullptr";
|
|
|
|
return;
|
|
|
|
}
|
2025-01-04 04:12:51 +00:00
|
|
|
}
|
|
|
|
void FrameTitleBar::OnMaximized(bool maximized) {
|
|
|
|
ui->sys_max->setVisible(!maximized);
|
|
|
|
}
|
|
|
|
|
|
|
|
QPushButton* FrameTitleBar::InsertPushButtonMenu(const QString& name, int index) {
|
|
|
|
if (nullptr == menuLayout_) {
|
|
|
|
qDebug() << __FUNCTION__ << "menu layout is nullptr";
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
QPushButton* btn = new QPushButton(this);
|
|
|
|
btn->setText(name);
|
|
|
|
btn->setCheckable(true);
|
|
|
|
menuLayout_->insertWidget(index, btn);
|
|
|
|
buttonCourp_->addButton(btn, index);
|
|
|
|
return btn;
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::paintEvent(QPaintEvent* event) {
|
|
|
|
QStyleOption opt;
|
|
|
|
opt.initFrom(this);
|
|
|
|
|
|
|
|
QPainter p(this);
|
|
|
|
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
|
|
|
}
|
|
|
|
|
2025-04-13 15:12:17 +00:00
|
|
|
void FrameTitleBar::mouseReleaseEvent(QMouseEvent* event) {
|
|
|
|
Q_UNUSED(event);
|
|
|
|
pressed_ = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::mousePressEvent(QMouseEvent* event) {
|
|
|
|
if (nullptr == mainWidget_ || mainWidget_->isMaximized()) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (event->button() == Qt::LeftButton) {
|
|
|
|
pressed_ = true;
|
|
|
|
point_ = event->pos();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::mouseMoveEvent(QMouseEvent* event) {
|
|
|
|
if (pressed_ && nullptr != mainWidget_) {
|
|
|
|
mainWidget_->move(event->pos() - point_ + mainWidget_->pos());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-01-04 04:12:51 +00:00
|
|
|
void FrameTitleBar::OnMinBtnClicked() {
|
|
|
|
if (nullptr == mainWidget_) {
|
|
|
|
qDebug() << __FUNCTION__ << "mainWidget is nullptr";
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
mainWidget_->showMinimized();
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::OnMaxBtnClicked() {
|
|
|
|
if (nullptr == mainWidget_) {
|
|
|
|
qDebug() << __FUNCTION__ << "mainWidget is nullptr";
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2025-04-13 15:12:17 +00:00
|
|
|
if (mainWidget_->isMaximized()) {
|
|
|
|
mainWidget_->showNormal();
|
2025-04-20 03:57:25 +00:00
|
|
|
ui->sys_max->setIcon(QPixmap(":/res/sys_max.png"));
|
2025-04-13 15:12:17 +00:00
|
|
|
} else {
|
|
|
|
mainWidget_->showMaximized();
|
2025-04-20 03:57:25 +00:00
|
|
|
ui->sys_max->setIcon(QPixmap(":/res/sys_restore.png"));
|
2025-04-13 15:12:17 +00:00
|
|
|
}
|
2025-01-04 04:12:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::OnCloseBtnClicked() {
|
|
|
|
if (nullptr == mainWidget_) {
|
|
|
|
qDebug() << __FUNCTION__ << "mainWidget is nullptr";
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
mainWidget_->close();
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::InitSkinMemu() {
|
|
|
|
QStringList names;
|
|
|
|
names << tr("default") << tr("silver") << tr("blue");
|
|
|
|
QStringList values;
|
|
|
|
values << "default" << "silver" << "blue";
|
|
|
|
|
|
|
|
assert(values.count() == names.count());
|
|
|
|
|
|
|
|
ui->sys_skin->setPopupMode(QToolButton::InstantPopup);
|
|
|
|
for (int i = 0; i < names.count(); ++i) {
|
|
|
|
QAction* action = new QAction(names[i], this);
|
|
|
|
action->setData(values[i]);
|
|
|
|
ui->sys_skin->addAction(action);
|
|
|
|
connect(action, &QAction::triggered, &RecourceHelper::Get(), &RecourceHelper::OnChangeStyle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::InitMenuWidget() {
|
|
|
|
menuLayout_ = new QHBoxLayout(ui->menu_Widget);
|
|
|
|
menuLayout_->setSpacing(6);
|
|
|
|
menuLayout_->setContentsMargins(9, 0, 0, 0);
|
|
|
|
|
|
|
|
buttonCourp_ = new QButtonGroup(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
void FrameTitleBar::SetSysButton(unsigned int sysBtn) {
|
|
|
|
ftbButton_ = sysBtn;
|
|
|
|
ui->sys_icon->setVisible(static_cast<bool>(ftbButton_ & FTB_ICON));
|
|
|
|
ui->sys_title->setVisible(static_cast<bool>(ftbButton_ & FTB_TTILE));
|
|
|
|
ui->menu_Widget->setVisible(static_cast<bool>(ftbButton_ & FTB_MENU));
|
|
|
|
ui->sys_skin->setVisible(static_cast<bool>(ftbButton_ & FTB_SKIN));
|
|
|
|
ui->sys_min->setVisible(static_cast<bool>(ftbButton_ & FTB_MIN));
|
|
|
|
ui->sys_max->setVisible(static_cast<bool>(ftbButton_ & FTB_MAX));
|
|
|
|
ui->sys_close->setVisible(static_cast<bool>(ftbButton_ & FTB_CLOSE));
|
|
|
|
}
|