Krita Source Code Documentation
Loading...
Searching...
No Matches
KoDockWidgetTitleBar Class Reference

A custom title bar for dock widgets. More...

#include <KoDockWidgetTitleBar.h>

+ Inheritance diagram for KoDockWidgetTitleBar:

Public Slots

void setLocked (bool locked)
 

Public Member Functions

void dockWidgetTitleChanged (const QString &title)
 
void featuresChanged (QDockWidget::DockWidgetFeatures features)
 
 KoDockWidgetTitleBar (QDockWidget *dockWidget)
 
 Private (KoDockWidgetTitleBar *thePublic)
 
void toggleFloating ()
 
void topLevelChanged (bool topLevel)
 
void updateButtonSizes ()
 
void updateIcons ()
 
void updateIcons ()
 
 ~KoDockWidgetTitleBar () override
 

Public Attributes

QAbstractButton * closeButton {nullptr}
 
QDockWidget::DockWidgetFeatures features
 
QAbstractButton * floatButton {nullptr}
 
QIcon floatIcon
 
QAbstractButton * lockButton {nullptr}
 
bool locked {false}
 
QIcon lockIcon
 
QIcon removeIcon
 
KoDockWidgetTitleBarthePublic {nullptr}
 
KSqueezedTextLabel * titleLabel {nullptr}
 

Protected Member Functions

void paintEvent (QPaintEvent *event) override
 reimplemented from QWidget
 
void resizeEvent (QResizeEvent *event) override
 reimplemented from QWidget
 

Private Attributes

Private *const d
 
- Private Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Additional Inherited Members

- Private Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Detailed Description

A custom title bar for dock widgets.

Allow customization such as hidden text.

See also
KoDockWidgetTitleBarButton

Definition at line 19 of file KoDockWidgetTitleBar.h.

Constructor & Destructor Documentation

◆ KoDockWidgetTitleBar()

KoDockWidgetTitleBar::KoDockWidgetTitleBar ( QDockWidget * dockWidget)
explicit

Definition at line 36 of file KoDockWidgetTitleBar.cpp.

37 : QWidget(dockWidget), d(new Private(this))
38{
39 d->floatIcon = kisIcon("docker_float");
40 d->floatButton = new KoDockWidgetTitleBarButton(this);
41 d->floatButton->setIcon(d->floatIcon);
42 connect(d->floatButton, SIGNAL(clicked()), SLOT(toggleFloating()));
43 d->floatButton->setVisible(true);
44 d->floatButton->setToolTip(i18nc("@info:tooltip", "Float Docker"));
45 d->floatButton->setStyleSheet("border: 0");
46
47 d->removeIcon = kisIcon("docker_close");
48 d->closeButton = new KoDockWidgetTitleBarButton(this);
49 d->closeButton->setIcon(d->removeIcon);
50 connect(d->closeButton, SIGNAL(clicked()), dockWidget, SLOT(close()));
51 d->closeButton->setVisible(true);
52 d->closeButton->setToolTip(i18nc("@info:tooltip", "Close Docker"));
53 d->closeButton->setStyleSheet("border: 0"); // border makes the header busy looking (appears on some OSs)
54
55 d->lockIcon = kisIcon("docker_lock_a");
56 d->lockButton = new KoDockWidgetTitleBarButton(this);
57 d->lockButton->setCheckable(true);
58 d->lockButton->setIcon(d->lockIcon);
59 connect(d->lockButton, SIGNAL(toggled(bool)), SLOT(setLocked(bool)));
60 d->lockButton->setVisible(true);
61 d->lockButton->setToolTip(i18nc("@info:tooltip", "Lock Docker"));
62 d->lockButton->setStyleSheet("border: 0");
63
64 d->updateButtonSizes();
65
66 d->titleLabel = new KSqueezedTextLabel(this);
67 d->titleLabel->setTextElideMode(Qt::ElideRight);
68 d->titleLabel->setText(dockWidget->windowTitle());
69
70 QHBoxLayout *layout = new QHBoxLayout(this);
71 layout->setContentsMargins(2, 0, 2, 0);
72 layout->setSpacing(SPACING);
73 layout->addWidget(d->lockButton);
74 layout->addWidget(d->titleLabel, 1);
75 layout->addWidget(d->floatButton);
76 layout->addWidget(d->closeButton);
77
78 connect(dockWidget, SIGNAL(featuresChanged(QDockWidget::DockWidgetFeatures)), SLOT(featuresChanged(QDockWidget::DockWidgetFeatures)));
79 connect(dockWidget, SIGNAL(topLevelChanged(bool)), SLOT(topLevelChanged(bool)));
80 connect(dockWidget, SIGNAL(windowTitleChanged(const QString &)), SLOT(dockWidgetTitleChanged(const QString &)));
81
82 d->featuresChanged(QDockWidget::NoDockWidgetFeatures);
83}
constexpr int SPACING
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
A custom title bar button for dock widgets.
void featuresChanged(QDockWidget::DockWidgetFeatures features)
void dockWidgetTitleChanged(const QString &title)
void topLevelChanged(bool topLevel)
#define kisIcon(name)
Definition kis_icon.h:26
QAction * close(const QObject *recvr, const char *slot, QObject *parent)

References connect(), d, dockWidgetTitleChanged(), featuresChanged(), kisIcon, setLocked(), SPACING, toggleFloating(), and topLevelChanged().

◆ ~KoDockWidgetTitleBar()

KoDockWidgetTitleBar::~KoDockWidgetTitleBar ( )
override

Definition at line 85 of file KoDockWidgetTitleBar.cpp.

86{
87 delete d;
88}

References d.

Member Function Documentation

◆ dockWidgetTitleChanged()

void KoDockWidgetTitleBar::dockWidgetTitleChanged ( const QString & title)

◆ featuresChanged()

void KoDockWidgetTitleBar::featuresChanged ( QDockWidget::DockWidgetFeatures features)

◆ paintEvent()

void KoDockWidgetTitleBar::paintEvent ( QPaintEvent * event)
overrideprotected

reimplemented from QWidget

Definition at line 90 of file KoDockWidgetTitleBar.cpp.

91{
92 QStylePainter p(this);
93
94 QDockWidget *q = qobject_cast<QDockWidget*>(parentWidget());
95
96 int fw = q->isFloating() ? q->style()->pixelMetric(QStyle::PM_DockWidgetFrameWidth, 0, q) : 0;
97 int mw = q->style()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, 0, q);
98
99 QStyleOptionDockWidget titleOpt;
100 titleOpt.initFrom(q);
101
102 QSize lockButtonSize(0,0);
103 if (d->lockButton->isVisible()) {
104 lockButtonSize = d->lockButton->size();
105 }
106
107 // To improve the look with Fusion which has weird 13x15 button sizes
108 int fusionTextOffset = 0;
109 QRect styleTestRect = q->style()->subElementRect(QStyle::SE_DockWidgetFloatButton, &titleOpt, q);
110 if (styleTestRect.width() < 16) {
111 fusionTextOffset = d->lockButton->x();
112 }
113
114 titleOpt.rect = QRect(QPoint(fw + mw + lockButtonSize.width() + fusionTextOffset, 0),
115 QSize(geometry().width() - (fw * 2) - mw - lockButtonSize.width(), geometry().height()));
116 // We don't print the title text here. Instead, we have a QLabel.
117 // titleOpt.title = q->windowTitle();
118 // FIXME: Maybe we just shouldn't use a QStylePainter at all?
119 titleOpt.title = QString();
120 titleOpt.closable = hasFeature(q, QDockWidget::DockWidgetClosable);
121 titleOpt.floatable = hasFeature(q, QDockWidget::DockWidgetFloatable);
122 p.drawControl(QStyle::CE_DockWidgetTitle, titleOpt);
123}
const Params2D p
static bool hasFeature(const QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature)

References d, hasFeature(), and p.

◆ Private()

KoDockWidgetTitleBar::Private ( KoDockWidgetTitleBar * thePublic)
inline

Definition at line 29 of file KoDockWidgetTitleBar_p.h.

31 , locked(false)
32 {
33 }
KoDockWidgetTitleBar * thePublic

◆ resizeEvent()

void KoDockWidgetTitleBar::resizeEvent ( QResizeEvent * event)
overrideprotected

reimplemented from QWidget

Definition at line 125 of file KoDockWidgetTitleBar.cpp.

126{
127 QDockWidget *q = qobject_cast<QDockWidget*>(parentWidget());
128
129 if (q->isFloating() || (width() < (d->closeButton->width() + d->floatButton->width() + d->lockButton->width()) + 32)) {
130 d->lockButton->setVisible(false);
131 } else {
132 d->lockButton->setVisible(true);
133 }
134}

References d.

◆ setLocked

void KoDockWidgetTitleBar::setLocked ( bool locked)
slot

Definition at line 136 of file KoDockWidgetTitleBar.cpp.

137{
138 QDockWidget *q = qobject_cast<QDockWidget*>(parentWidget());
139
140 d->locked = locked;
141 d->lockButton->blockSignals(true);
142 d->lockButton->setChecked(locked);
143 d->lockButton->blockSignals(false);
144
145 if (locked) {
146 d->features = q->features();
147 q->setFeatures(QDockWidget::NoDockWidgetFeatures);
148 }
149 else {
150 q->setFeatures(d->features);
151 }
152
153 q->toggleViewAction()->setEnabled(!locked);
154 d->closeButton->setEnabled(!locked);
155 d->floatButton->setEnabled(!locked);
156 d->floatButton->setVisible(!locked);
157
158 d->updateIcons();
159 q->setProperty("Locked", locked);
160}

References d, and locked.

◆ toggleFloating()

void KoDockWidgetTitleBar::toggleFloating ( )

◆ topLevelChanged()

void KoDockWidgetTitleBar::topLevelChanged ( bool topLevel)

◆ updateButtonSizes()

void KoDockWidgetTitleBar::updateButtonSizes ( )

◆ updateIcons() [1/2]

void KoDockWidgetTitleBar::updateIcons ( )

Definition at line 162 of file KoDockWidgetTitleBar.cpp.

163{
164 d->updateIcons();
165}

References d.

◆ updateIcons() [2/2]

void KoDockWidgetTitleBar::updateIcons ( )

Member Data Documentation

◆ closeButton

QAbstractButton* KoDockWidgetTitleBar::closeButton {nullptr}

Definition at line 37 of file KoDockWidgetTitleBar_p.h.

37{nullptr};

◆ d

Private* const KoDockWidgetTitleBar::d
private

Definition at line 41 of file KoDockWidgetTitleBar.h.

◆ features

QDockWidget::DockWidgetFeatures KoDockWidgetTitleBar::features

Definition at line 42 of file KoDockWidgetTitleBar_p.h.

◆ floatButton

QAbstractButton* KoDockWidgetTitleBar::floatButton {nullptr}

Definition at line 38 of file KoDockWidgetTitleBar_p.h.

38{nullptr};

◆ floatIcon

QIcon KoDockWidgetTitleBar::floatIcon

Definition at line 36 of file KoDockWidgetTitleBar_p.h.

◆ lockButton

QAbstractButton* KoDockWidgetTitleBar::lockButton {nullptr}

Definition at line 39 of file KoDockWidgetTitleBar_p.h.

39{nullptr};

◆ locked

bool KoDockWidgetTitleBar::locked {false}

Definition at line 41 of file KoDockWidgetTitleBar_p.h.

41{false};

◆ lockIcon

QIcon KoDockWidgetTitleBar::lockIcon

Definition at line 36 of file KoDockWidgetTitleBar_p.h.

◆ removeIcon

QIcon KoDockWidgetTitleBar::removeIcon

Definition at line 36 of file KoDockWidgetTitleBar_p.h.

◆ thePublic

KoDockWidgetTitleBar* KoDockWidgetTitleBar::thePublic {nullptr}

Definition at line 35 of file KoDockWidgetTitleBar_p.h.

35{nullptr};

◆ titleLabel

KSqueezedTextLabel* KoDockWidgetTitleBar::titleLabel {nullptr}

Definition at line 40 of file KoDockWidgetTitleBar_p.h.

40{nullptr};

The documentation for this class was generated from the following files: