DYTSrouce/src/ui/FrameTitleBar.cpp

178 lines
5.1 KiB
C++
Raw Normal View History

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"
2025-06-19 16:06:56 +00:00
#include "common/SpdLogger.h"
#include "config.h"
2025-01-04 04:12:51 +00:00
#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";
2025-06-19 16:06:56 +00:00
dyt_check(values.count() == names.count());
2025-01-04 04:12:51 +00:00
ui->sys_skin->setPopupMode(QToolButton::InstantPopup);
2025-06-19 16:10:57 +00:00
QActionGroup* skinActionGroup = new QActionGroup(this);
skinActionGroup->setExclusive(true);
2025-01-04 04:12:51 +00:00
for (int i = 0; i < names.count(); ++i) {
QAction* action = new QAction(names[i], this);
2025-06-19 16:06:56 +00:00
action->setCheckable(true);
2025-01-04 04:12:51 +00:00
action->setData(values[i]);
ui->sys_skin->addAction(action);
2025-06-19 16:10:57 +00:00
skinActionGroup->addAction(action);
2025-01-04 04:12:51 +00:00
connect(action, &QAction::triggered, &RecourceHelper::Get(), &RecourceHelper::OnChangeStyle);
}
2025-06-19 16:06:56 +00:00
ui->sys_skin->actions().first()->setChecked(true);
2025-01-04 04:12:51 +00:00
}
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));
}