Files
HPPA/HPPA/CustomDockWidgetBase.cpp

205 lines
5.6 KiB
C++

#include "CustomDockWidgetBase.h"
CustomDockWidgetBase::CustomDockWidgetBase(QMainWindow* parent)
: QDockWidget(parent),
m_mainWindow(parent),
m_isMaximized(false)
{
initialize();
}
CustomDockWidgetBase::CustomDockWidgetBase(QString title, QMainWindow* parent)
: QDockWidget(title, parent),
m_mainWindow(parent),
m_isMaximized(false)
{
initialize();
setTile(title);
}
void CustomDockWidgetBase::initialize()
{
QWidget* titleBar_Background = new QWidget(this);
titleBar_Background->setObjectName("titleBar_Background");
QGridLayout* layout_titleBar_Background = new QGridLayout(titleBar_Background);
layout_titleBar_Background->setContentsMargins(0, 0, 0, 0);
titleBar_Background->setStyleSheet(R"(
QWidget #titleBar_Background{
background: #040125;
}
)");
QWidget* titleBar = new QWidget(titleBar_Background);
titleBar->setObjectName("titleBar");
QHBoxLayout* layout = new QHBoxLayout(titleBar);
titleBar->setFixedHeight(30);
title_label = new QLabel(titleBar);
layout->setContentsMargins(10, 0, 10, 0);
layout->addWidget(title_label);
layout->addStretch();
m_maxButton = new QToolButton(titleBar);
m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton));
layout->addWidget(m_maxButton);
titleBar->setStyleSheet(R"(
QWidget #titleBar{
background: #0E1C4C;
/*border: 4px solid #2c586b;*/
/*padding-top: 10px;
padding-bottom: 10px;*/
border-top: 1px solid #2c586b;
border-left: 1px solid #2c586b;
border-right: 1px solid #2c586b;
border-bottom: none; /* È¡Ïûµ×²¿±ß¿ò */
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
)");
title_label->setStyleSheet("color: white;");
m_maxButton->setStyleSheet("");
layout_titleBar_Background->addWidget(titleBar);
setTitleBarWidget(titleBar_Background);
setFeatures(QDockWidget::DockWidgetClosable);
connect(m_maxButton, &QToolButton::clicked, this, &CustomDockWidgetBase::toggleMaximize);
}
void CustomDockWidgetBase::setTile(QString title)
{
title_label->setText(title);
}
void CustomDockWidgetBase::hideMaxButton()
{
m_maxButton->hide();
}
void CustomDockWidgetBase::toggleMaximize()
{
if (!m_isMaximized)
{
m_hiddenDocks.clear();
m_originalSizes.clear();
m_savedState = m_mainWindow->saveState();
const QList<QDockWidget*> docks = m_mainWindow->findChildren<QDockWidget*>();
for (QDockWidget* dock : docks)
{
m_originalSizes[dock] = dock->size();
if (dock != this && dock->isVisible())
{
dock->hide();
m_hiddenDocks.append(dock);
}
}
m_isMaximized = true;
emit maximizeStateChanged(m_isMaximized);
m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarNormalButton));
}
else
{
for (QDockWidget* dock : m_hiddenDocks)
{
dock->show();
}
if (!m_savedState.isEmpty())
{
m_mainWindow->restoreState(m_savedState);
m_savedState.clear();
}
QList<QDockWidget*> docks;
QList<int> widths, heights;
for (auto it = m_originalSizes.begin(); it != m_originalSizes.end(); ++it)
{
docks.append(it.key());
widths.append(it.value().width());
heights.append(it.value().height());
}
m_mainWindow->resizeDocks(docks, widths, Qt::Horizontal);
m_mainWindow->resizeDocks(docks, heights, Qt::Vertical);
m_isMaximized = false;
emit maximizeStateChanged(m_isMaximized);
m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton));
}
}
CustomDockWidgetHideAbove::CustomDockWidgetHideAbove(QString title, QMainWindow* parent)
:CustomDockWidgetBase(title, parent)
{
}
CustomDockWidgetHideAbove::CustomDockWidgetHideAbove(QMainWindow* parent)
:CustomDockWidgetBase(parent)
{
}
void CustomDockWidgetHideAbove::toggleMaximize()
{
if (!m_isMaximized)
{
m_hiddenDocks.clear();
m_originalSizes.clear();
m_savedState = m_mainWindow->saveState();
const QList<QDockWidget*> docks = m_mainWindow->findChildren<QDockWidget*>();
for (QDockWidget* dock : docks)
{
m_originalSizes[dock] = dock->size();
if (dock->objectName().contains("mDockCarousel") && dock->isVisible())
{
dock->hide();
m_hiddenDocks.append(dock);
}
}
m_isMaximized = true;
emit maximizeStateChanged(m_isMaximized);
m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarNormalButton));
}
else
{
for (QDockWidget* dock : m_hiddenDocks)
{
dock->show();
}
if (!m_savedState.isEmpty())
{
m_mainWindow->restoreState(m_savedState);
m_savedState.clear();
}
//QList<QDockWidget*> docks;
//QList<int> widths, heights;
//for (auto it = m_originalSizes.begin(); it != m_originalSizes.end(); ++it)
//{
// docks.append(it.key());
// widths.append(it.value().width());
// heights.append(it.value().height());
//}
//m_mainWindow->resizeDocks(docks, widths, Qt::Horizontal);
//m_mainWindow->resizeDocks(docks, heights, Qt::Vertical);
m_isMaximized = false;
emit maximizeStateChanged(m_isMaximized);
m_maxButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton));
}
}