Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_collapsible_button_group.cpp
Go to the documentation of this file.
2
3#include <QToolButton>
4#include <QHBoxLayout>
5#include <QAction>
6
7#include "kis_debug.h"
8
10
12 }
13
15 }
16
17 QScopedPointer<QToolButton> collapsedButton;
19 bool autoCollapse {true};
20 bool collapsed {false};
21
22 QHBoxLayout* layout {nullptr};
23};
24
26 : QWidget(parent)
28{
29 m_d->layout = new QHBoxLayout;
30 m_d->layout->setSpacing(0);
31 m_d->layout->setContentsMargins(0, 0, 0, 0);
32 setLayout(m_d->layout);
33
34 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
35
36 m_d->collapsedButton.reset(new QToolButton(this));
37 m_d->layout->addWidget(m_d->collapsedButton.data());
38
39 connect(m_d->collapsedButton.data(), &QToolButton::triggered, [this](QAction* triggered) {
40 m_d->collapsedButton->setDefaultAction(triggered);
41 });
42}
43
45{
46 m_d->collapsedButton->setAutoRaise(autoRaise);
47
48 Q_FOREACH (QToolButton* button, m_d->allButtons) {
49 button->setAutoRaise(autoRaise);
50 }
51}
52
56
58{
59 return m_d->collapsedButton->autoRaise();
60}
61
63{
64 m_d->collapsedButton->setIconSize(size);
65
66 Q_FOREACH (QToolButton* button, m_d->allButtons) {
67 button->setIconSize(size);
68 }
69}
70
72{
73 return m_d->collapsedButton->iconSize();
74}
75
77{
78 m_d->autoCollapse = autoCollapse;
79}
80
82{
83 m_d->collapsed = collapse;
84
85 m_d->collapsedButton->setVisible(m_d->collapsed);
86
87 Q_FOREACH (QToolButton* button, m_d->allButtons) {
88 button->setVisible(!m_d->collapsed);
89 }
90}
91
93{
94 return m_d->collapsed;
95}
96
98{
99 return m_d->collapsedButton->sizeHint() * m_d->allButtons.count();
100}
101
103{
104 return m_d->collapsedButton->size();
105}
106
107QToolButton* KisCollapsibleButtonGroup::addAction(QAction *action)
108{
109 QToolButton* button = new QToolButton(this);
110 button->setDefaultAction(action);
111 button->setIconSize(iconSize());
112
113 m_d->allButtons.append(button);
114 m_d->layout->insertWidget(1, button);
115
116 action->setIconVisibleInMenu(true);
117 if (action->text().isEmpty()) {
118 // TODO: Once we're out of string freeze, we should try to use a shorter string here.
119 // Tooltip is too long, but at least we know it's localized!
120 action->setText(action->toolTip());
121 }
122
123 m_d->collapsedButton->addAction(action);
124 m_d->collapsedButton->setDefaultAction(action);
125
126 button->setAutoRaise(autoRaise());
127 button->setVisible(!m_d->collapsed);
128
129 return button;
130}
131
133{
134 Q_UNUSED(event);
135 if (m_d->autoCollapse) {
136 if (size().width() < sizeHint().width()) {
137 setCollapsed(true);
138 } else {
139 setCollapsed(false);
140 }
141 }
142}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
virtual void resizeEvent(class QResizeEvent *event) override
virtual QSize sizeHint() const override
QToolButton * addAction(QAction *action)
virtual QSize minimumSizeHint() const override
KisCollapsibleButtonGroup(QWidget *parent=nullptr)
QString button(const QWheelEvent &ev)