205 lines
5.6 KiB
C++
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));
|
|
}
|
|
}
|