1
0
mirror of https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git synced 2025-03-16 11:09:50 +08:00
Qt-Advanced-Docking-System/AdvancedDockingSystem/src/ads/floating_widget.cpp

82 lines
2.3 KiB
C++
Raw Normal View History

2015-12-09 19:21:38 +08:00
#include "floating_widget.h"
#include <QDebug>
#include <QBoxLayout>
#include <QPushButton>
#include <QSizePolicy>
#include <QMouseEvent>
#include <QStyle>
#include "container_widget.h"
2015-12-09 19:21:38 +08:00
#include "section_title_widget.h"
#include "section_content_widget.h"
ADS_NAMESPACE_BEGIN
FloatingWidget::FloatingWidget(ContainerWidget* container, SectionContent::RefPtr sc, SectionTitleWidget* titleWidget, SectionContentWidget* contentWidget, QWidget* parent) :
2015-12-09 19:21:38 +08:00
QWidget(parent, Qt::CustomizeWindowHint | Qt::Tool),
_container(container),
2015-12-09 19:21:38 +08:00
_content(sc),
_titleWidget(titleWidget),
_contentWidget(contentWidget)
{
auto l = new QBoxLayout(QBoxLayout::TopToBottom);
l->setContentsMargins(0, 0, 0, 0);
l->setSpacing(0);
setLayout(l);
// Title + Controls
_titleLayout = new QBoxLayout(QBoxLayout::LeftToRight);
_titleLayout->addWidget(titleWidget, 1);
auto maximizeButton = new QPushButton();
maximizeButton->setObjectName("maximizeButton");
maximizeButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarMaxButton));
maximizeButton->setToolTip(tr("Maximize"));
maximizeButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
_titleLayout->addWidget(maximizeButton);
auto closeButton = new QPushButton();
closeButton->setObjectName("closeButton");
closeButton->setIcon(style()->standardIcon(QStyle::SP_TitleBarCloseButton));
closeButton->setToolTip(tr("Close"));
closeButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
_titleLayout->addWidget(closeButton);
QObject::connect(closeButton, &QPushButton::clicked, this, &FloatingWidget::close);
l->addLayout(_titleLayout, 0);
// Content
l->addWidget(contentWidget, 1);
contentWidget->show();
_container->_floatingWidgets.append(this);
}
FloatingWidget::~FloatingWidget()
{
qDebug() << Q_FUNC_INFO;
_container->_floatingWidgets.removeAll(this);
2015-12-09 19:21:38 +08:00
}
InternalContentData FloatingWidget::takeContent()
{
InternalContentData data;
data.content = _content;
data.titleWidget = _titleWidget;
data.contentWidget = _contentWidget;
_titleLayout->removeWidget(_titleWidget);
_titleWidget = NULL;
layout()->removeWidget(_contentWidget);
_contentWidget = NULL;
return data;
}
void FloatingWidget::closeEvent(QCloseEvent*)
{
}
ADS_NAMESPACE_END