DYTSrouce/src/ui/FrameTitleBar.cpp

147 lines
4.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>
#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);
connect(ui->sys_restore, &QPushButton::clicked, this, &FrameTitleBar::OnRestorClicked);
//connect(this, &FrameTitleBar::doubleClick, this, &FrameTitleBar::OnDoubleClicked);
ui->sys_restore->hide();
ui->sys_max->hide();
SetSysButton(0);
setAttribute(Qt::WA_StyledBackground);
}
FrameTitleBar::~FrameTitleBar() {
delete ui;
}
void FrameTitleBar::SetTitle(const QString& title) {
// ui->sys_title->setText(title);
if (mainWidget_) {
mainWidget_->setWindowTitle(title);
}
}
void FrameTitleBar::SetMainWidget(QWidget* widget) {
mainWidget_ = widget;
}
void FrameTitleBar::OnMaximized(bool maximized) {
ui->sys_restore->setVisible(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);
}
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;
}
mainWidget_->showMaximized();
}
void FrameTitleBar::OnRestorClicked() {
if (nullptr == mainWidget_) {
qDebug() << __FUNCTION__ << "mainWidget is nullptr";
return;
}
mainWidget_->showNormal();
}
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));
}