16class DockFloatingTitleBarPrivate
21 DockFloatingTitleBarPrivate();
25 DockFloatingContainer *m_floatingWidget =
nullptr;
26 DockLabel *m_titleLabel;
27 QToolButton *m_closeButton =
nullptr;
28 QToolButton *m_maximizeButton =
nullptr;
32 bool m_maximized =
false;
35DockFloatingTitleBarPrivate::DockFloatingTitleBarPrivate()
39void DockFloatingTitleBarPrivate::init()
43 m_titleLabel =
new DockLabel();
44 m_titleLabel->setElideMode(Qt::ElideRight);
45 m_titleLabel->setText(
"DockWidget->windowTitle()");
46 m_titleLabel->setObjectName(
"dockFloatingTitleLabel");
47 m_titleLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
49 m_closeButton =
new QToolButton();
50 m_closeButton->setObjectName(
"dockFloatingTitleCloseButton");
51 m_closeButton->setAutoRaise(
true);
53 m_maximizeButton =
new QToolButton();
54 m_maximizeButton->setObjectName(
"dockFloatingTitleMaximizeButton");
55 m_maximizeButton->setAutoRaise(
true);
59 QPixmap normalPixmap = q->style()->standardPixmap(QStyle::SP_TitleBarCloseButton, 0, m_closeButton);
60 closeIcon.addPixmap(normalPixmap, QIcon::Normal);
61 closeIcon.addPixmap(internal::createTransparentPixmap(normalPixmap, 0.25), QIcon::Disabled);
62 m_closeButton->setIcon(q->style()->standardIcon(QStyle::SP_TitleBarCloseButton));
63 m_closeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
64 m_closeButton->setVisible(
true);
65 m_closeButton->setFocusPolicy(Qt::NoFocus);
66 q->connect(m_closeButton, SIGNAL(clicked()), SIGNAL(closeRequested()));
68 q->setMaximizedIcon(
false);
69 m_maximizeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
70 m_maximizeButton->setVisible(
true);
71 m_maximizeButton->setFocusPolicy(Qt::NoFocus);
74 QFontMetrics fm(m_titleLabel->font());
75 int spacing = qRound(fm.height() / 4.0);
78 QBoxLayout *lay =
new QBoxLayout(QBoxLayout::LeftToRight);
79 lay->setContentsMargins(6, 0, 0, 0);
82 lay->addWidget(m_titleLabel, 1);
83 lay->addSpacing(spacing);
84 lay->addWidget(m_maximizeButton);
85 lay->addWidget(m_closeButton);
86 lay->setAlignment(Qt::AlignCenter);
88 m_titleLabel->setVisible(
true);
97 d->m_floatingWidget = parent;
100 auto normalPixmap = this->style()->standardPixmap(QStyle::SP_TitleBarNormalButton,
nullptr, d->m_maximizeButton);
101 d->m_normalIcon.addPixmap(normalPixmap, QIcon::Normal);
102 d->m_normalIcon.addPixmap(internal::createTransparentPixmap(normalPixmap, 0.25), QIcon::Disabled);
104 auto maxPixmap = this->style()->standardPixmap(QStyle::SP_TitleBarMaxButton,
nullptr, d->m_maximizeButton);
105 d->m_maximizeIcon.addPixmap(maxPixmap, QIcon::Normal);
106 d->m_maximizeIcon.addPixmap(internal::createTransparentPixmap(maxPixmap, 0.25), QIcon::Disabled);
118 d->m_closeButton->setEnabled(enable);
124 d->m_titleLabel->setText(
text);
129 internal::repolishStyle(
this, internal::RepolishDirectChildren);
135 d->m_maximized = maximized;
137 d->m_maximizeButton->setIcon(d->m_normalIcon);
139 d->m_maximizeButton->setIcon(d->m_maximizeIcon);
146 return d->m_maximizeIcon;
152 d->m_maximizeIcon = icon;
153 if (d->m_maximized) {
161 return d->m_normalIcon;
167 d->m_normalIcon = icon;
168 if (!d->m_maximized) {
176 if (e->button() == Qt::LeftButton) {
181 Super::mousePressEvent(e);
188 if (d->m_floatingWidget) {
189 d->m_floatingWidget->finishDragging();
191 Super::mouseReleaseEvent(e);
199 Super::mouseMoveEvent(e);
205 if (d->m_floatingWidget->isMaximized()) {
206 d->m_floatingWidget->showNormal(
true);
208 d->m_floatingWidget->moveFloating();
209 Super::mouseMoveEvent(e);
212 Super::mouseMoveEvent(e);
217 if (e->buttons() & Qt::LeftButton) {
221 QWidget::mouseDoubleClickEvent(e);
void setNormalIcon(const QIcon &icon)
void enableCloseButton(bool enable)
virtual ~DockFloatingTitleBar()
QIcon maximizeIcon() const
void setMaximizeIcon(const QIcon &icon)
DockFloatingTitleBar(DockFloatingContainer *parent=nullptr)
virtual void mouseDoubleClickEvent(QMouseEvent *e) override
void setMaximizedIcon(bool maximized)
virtual void mouseReleaseEvent(QMouseEvent *e) override
virtual void mouseMoveEvent(QMouseEvent *e) override
virtual void mousePressEvent(QMouseEvent *e) override
void setTitle(const QString &text)
@ DockDraggingFloatingWidget
#define QX_INIT_PRIVATE(Class)
#define QX_DECLARE_PUBLIC(Class)
#define QX_FINI_PRIVATE()
#define QX_DOCK_END_NAMESPACE
#define QX_DOCK_BEGIN_NAMESPACE