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

#include <KoToolBoxDocker_p.h>

+ Inheritance diagram for KoToolBoxDocker:

Public Member Functions

 KoToolBoxDocker (KoToolBox *toolBox)
 
QString observerName () override
 
void setCanvas (KoCanvasBase *canvas) override
 reimplemented from KoCanvasObserverBase
 
void setViewManager (KisViewManager *viewManager) override
 reimplemented from KisMainwindowObserver
 
void unsetCanvas () override
 
- Public Member Functions inherited from KisMainwindowObserver
 KisMainwindowObserver ()
 
 ~KisMainwindowObserver () override
 
- Public Member Functions inherited from KoCanvasObserverBase
 KoCanvasObserverBase ()
 
KoCanvasBaseobservedCanvas () const
 
void setObservedCanvas (KoCanvasBase *canvas)
 
void unsetObservedCanvas ()
 
virtual ~KoCanvasObserverBase ()
 

Protected Slots

void updateFloating (bool)
 
void updateToolBoxOrientation (Qt::DockWidgetArea)
 

Protected Member Functions

void contextMenuEvent (QContextMenuEvent *event) override
 
void resizeEvent (QResizeEvent *event) override
 

Private Types

enum  Orientation { Horizontal = Qt::Horizontal , Vertical = Qt::Vertical , Auto = -1 }
 

Private Member Functions

void changeCompact (bool)
 
void changeLayoutDir (Qt::LayoutDirection)
 
void changeOrientation (Orientation)
 
void setToolBoxOrientation (Qt::Orientation)
 
void updateLayoutDir ()
 

Private Attributes

QMenu * m_contextMenu {nullptr}
 
Qt::DockWidgetArea m_dockArea {Qt::NoDockWidgetArea}
 
Qt::LayoutDirection m_layoutDir {Qt::LayoutDirectionAuto}
 
Orientation m_orientation {Auto}
 
KoToolBoxScrollAream_scrollArea
 
KoToolBoxm_toolBox
 

Detailed Description

Definition at line 23 of file KoToolBoxDocker_p.h.

Member Enumeration Documentation

◆ Orientation

Enumerator
Horizontal 
Vertical 
Auto 

Definition at line 45 of file KoToolBoxDocker_p.h.

45 {
46 Horizontal = Qt::Horizontal,
47 Vertical = Qt::Vertical,
48 Auto = -1,
49 };

Constructor & Destructor Documentation

◆ KoToolBoxDocker()

KoToolBoxDocker::KoToolBoxDocker ( KoToolBox * toolBox)
explicit

Definition at line 25 of file KoToolBoxDocker.cpp.

26 : QDockWidget(i18n("Toolbox"))
27 , m_toolBox(toolBox)
28 , m_scrollArea(new KoToolBoxScrollArea(toolBox, this))
29{
30 setWidget(m_scrollArea);
31
32 QLabel *w = new QLabel(" ", this);
33 w->setFrameShape(QFrame::StyledPanel);
34 w->setFrameShadow(QFrame::Raised);
35 w->setFrameStyle(QFrame::Panel | QFrame::Raised);
36 QFont font = qApp->font();
37 // Font size may be in pixels (on Android) or points (everywhere else.)
38 qreal ratio = 0.9;
39 if (font.pixelSize() == -1) {
40 font.setPointSizeF(font.pointSizeF() * ratio);
41 } else {
42 font.setPixelSize(qRound(font.pixelSize() * ratio));
43 }
44 int titleSize = QFontMetrics(font).height();
45 w->setMinimumSize(titleSize, titleSize);
46 setTitleBarWidget(w);
47
48 KConfigGroup cfg = KSharedConfig::openConfig()->group("KoToolBox");
49 const int layoutDirUnchecked = cfg.readEntry<int>("layoutDir", Qt::LayoutDirectionAuto);
50 switch (layoutDirUnchecked) {
51 case Qt::LayoutDirectionAuto:
52 case Qt::LeftToRight:
53 case Qt::RightToLeft:
54 m_layoutDir = static_cast<Qt::LayoutDirection>(layoutDirUnchecked);
55 break;
56 default:
57 m_layoutDir = Qt::LayoutDirectionAuto;
58 break;
59 }
61
62 const int orientUnchecked = cfg.readEntry<int>("orientation", Auto);
63 switch (orientUnchecked) {
64 case Horizontal:
65 case Vertical:
66 case Auto:
67 m_orientation = static_cast<Orientation>(orientUnchecked);
68 break;
69 default:
71 break;
72 }
73 if (m_orientation != Auto) {
74 setToolBoxOrientation(static_cast<Qt::Orientation>(m_orientation));
75 }
76
77 connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
78 this, SLOT(updateToolBoxOrientation(Qt::DockWidgetArea)));
79 connect(this, SIGNAL(topLevelChanged(bool)),
80 this, SLOT(updateFloating(bool)));
81}
KoToolBoxScrollArea * m_scrollArea
Qt::LayoutDirection m_layoutDir
Orientation m_orientation
void updateFloating(bool)
void updateToolBoxOrientation(Qt::DockWidgetArea)
KoToolBox * m_toolBox
void setToolBoxOrientation(Qt::Orientation)

References Auto, Horizontal, m_layoutDir, m_orientation, m_scrollArea, setToolBoxOrientation(), updateFloating(), updateLayoutDir(), updateToolBoxOrientation(), and Vertical.

Member Function Documentation

◆ changeCompact()

void KoToolBoxDocker::changeCompact ( bool state)
private

Definition at line 152 of file KoToolBoxDocker.cpp.

153{
154 KConfigGroup cfg = KSharedConfig::openConfig()->group("KoToolBox");
155 cfg.writeEntry<bool>("compact", state);
156 m_scrollArea->setCompact(state);
157}
void setCompact(bool state)

References m_scrollArea, and KoToolBoxScrollArea::setCompact().

◆ changeLayoutDir()

void KoToolBoxDocker::changeLayoutDir ( Qt::LayoutDirection dir)
private

Definition at line 129 of file KoToolBoxDocker.cpp.

130{
131 KConfigGroup cfg = KSharedConfig::openConfig()->group("KoToolBox");
132 cfg.writeEntry<int>("layoutDir", dir);
133 m_layoutDir = dir;
135}

References m_layoutDir, and updateLayoutDir().

◆ changeOrientation()

void KoToolBoxDocker::changeOrientation ( Orientation orientation)
private

Definition at line 137 of file KoToolBoxDocker.cpp.

138{
139 if (m_orientation == orientation) {
140 return;
141 }
142 KConfigGroup cfg = KSharedConfig::openConfig()->group("KoToolBox");
143 cfg.writeEntry<int>("orientation", orientation);
144 m_orientation = orientation;
145 if (m_orientation == Auto) {
146 setToolBoxOrientation(width() > height() ? Qt::Horizontal : Qt::Vertical);
147 } else {
148 setToolBoxOrientation(static_cast<Qt::Orientation>(m_orientation));
149 }
150}

References Auto, m_orientation, and setToolBoxOrientation().

◆ contextMenuEvent()

void KoToolBoxDocker::contextMenuEvent ( QContextMenuEvent * event)
overrideprotected

Definition at line 178 of file KoToolBoxDocker.cpp.

179{
180 if (!m_contextMenu) {
181 m_contextMenu = new QMenu(this);
182
183 QAction *compact = m_contextMenu->addAction(i18n("Compact"));
184 compact->setCheckable(true);
185 compact->setChecked(m_toolBox->isCompact());
186 connect(compact, &QAction::triggered, this, &KoToolBoxDocker::changeCompact);
187
188 m_contextMenu->addSection(i18n("Icon Size"));
190
191 m_contextMenu->addSection(i18nc("Toolbox layout", "Layout"));
192 QActionGroup *layoutActionGroup = new QActionGroup(m_contextMenu);
193
194 QAction *layoutAuto = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox layout direction", "&Automatic"));
195 layoutAuto->setActionGroup(layoutActionGroup);
196 layoutAuto->setCheckable(true);
197 connect(layoutAuto, &QAction::triggered, this, [this]() {
198 changeLayoutDir(Qt::LayoutDirectionAuto);
199 });
200
201 QAction *layoutLtr = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox layout direction", "&Left-to-right"));
202 layoutLtr->setActionGroup(layoutActionGroup);
203 layoutLtr->setCheckable(true);
204 connect(layoutLtr, &QAction::triggered, this, [this]() {
205 changeLayoutDir(Qt::LeftToRight);
206 });
207
208 QAction *layoutRtl = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox layout direction", "&Right-to-left"));
209 layoutRtl->setActionGroup(layoutActionGroup);
210 layoutRtl->setCheckable(true);
211 connect(layoutRtl, &QAction::triggered, this, [this]() {
212 changeLayoutDir(Qt::RightToLeft);
213 });
214
215 switch (m_layoutDir) {
216 case Qt::LayoutDirectionAuto:
217 layoutAuto->setChecked(true);
218 break;
219 case Qt::LeftToRight:
220 layoutLtr->setChecked(true);
221 break;
222 case Qt::RightToLeft:
223 layoutRtl->setChecked(true);
224 break;
225 }
226
227 m_contextMenu->addSection(i18nc("Toolbox orientation", "Orientation"));
228 QActionGroup *orientActionGroup = new QActionGroup(m_contextMenu);
229
230 QAction *orientAuto = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox orientation", "&Automatic"));
231 orientAuto->setActionGroup(orientActionGroup);
232 orientAuto->setCheckable(true);
233 connect(orientAuto, &QAction::triggered, this, [this]() {
235 });
236
237 QAction *orientHorizontal = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox orientation", "&Horizontal"));
238 orientHorizontal->setActionGroup(orientActionGroup);
239 orientHorizontal->setCheckable(true);
240 connect(orientHorizontal, &QAction::triggered, this, [this]() {
242 });
243
244 QAction *orientVertical = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox orientation", "&Vertical"));
245 orientVertical->setActionGroup(orientActionGroup);
246 orientVertical->setCheckable(true);
247 connect(orientVertical, &QAction::triggered, this, [this]() {
249 });
250
251 switch (m_orientation) {
252 case Horizontal:
253 orientHorizontal->setChecked(true);
254 break;
255 case Vertical:
256 orientVertical->setChecked(true);
257 break;
258 case Auto:
259 orientAuto->setChecked(true);
260 break;
261 }
262 }
263
264 m_contextMenu->exec(event->globalPos());
265}
void changeOrientation(Orientation)
void changeLayoutDir(Qt::LayoutDirection)
void setupIconSizeMenu(QMenu *menu)
bool isCompact()

References Auto, changeCompact(), changeLayoutDir(), changeOrientation(), Horizontal, KoToolBox::isCompact(), m_contextMenu, m_layoutDir, m_orientation, m_toolBox, KoToolBox::setupIconSizeMenu(), and Vertical.

◆ observerName()

QString KoToolBoxDocker::observerName ( )
inlineoverridevirtual

Reimplemented from KoCanvasObserverBase.

Definition at line 32 of file KoToolBoxDocker_p.h.

32{ return "KoToolBoxDocker"; }

◆ resizeEvent()

void KoToolBoxDocker::resizeEvent ( QResizeEvent * event)
overrideprotected

Definition at line 97 of file KoToolBoxDocker.cpp.

98{
99 QDockWidget::resizeEvent(event);
100 if (m_orientation == Auto) {
101 setToolBoxOrientation(width() > height() ? Qt::Horizontal : Qt::Vertical);
102 }
103}

References Auto, m_orientation, and setToolBoxOrientation().

◆ setCanvas()

void KoToolBoxDocker::setCanvas ( KoCanvasBase * canvas)
overridevirtual

reimplemented from KoCanvasObserverBase

Implements KoCanvasObserverBase.

Definition at line 83 of file KoToolBoxDocker.cpp.

84{
85 Q_UNUSED(canvas);
86}

◆ setToolBoxOrientation()

void KoToolBoxDocker::setToolBoxOrientation ( Qt::Orientation orientation)
private

Definition at line 159 of file KoToolBoxDocker.cpp.

160{
161 if (m_scrollArea->orientation() == orientation) {
162 return;
163 }
164 if (orientation == Qt::Horizontal) {
165 setFeatures(features() | QDockWidget::DockWidgetVerticalTitleBar);
166 m_scrollArea->setOrientation(Qt::Horizontal);
167 } else {
168 setFeatures(features() & ~QDockWidget::DockWidgetVerticalTitleBar);
169 m_scrollArea->setOrientation(Qt::Vertical);
170 }
171}
Qt::Orientation orientation() const
void setOrientation(Qt::Orientation orientation)

References m_scrollArea, KoToolBoxScrollArea::orientation(), and KoToolBoxScrollArea::setOrientation().

◆ setViewManager()

void KoToolBoxDocker::setViewManager ( KisViewManager * viewManager)
overridevirtual

reimplemented from KisMainwindowObserver

Implements KisMainwindowObserver.

Definition at line 92 of file KoToolBoxDocker.cpp.

93{
94 m_toolBox->setViewManager(viewManager);
95}
void setViewManager(KisViewManager *viewManager)

References m_toolBox, and KoToolBox::setViewManager().

◆ unsetCanvas()

void KoToolBoxDocker::unsetCanvas ( )
overridevirtual

Re-implement to notify the observer that its canvas is no longer among the living. The daisies, it is pushing up. This means you don't have to disconnect, it's dead.

The old canvas should be deleted already, so if you stored a pointer to it, don't touch!

Note that currently there is a bug where in certain specific circumstances unsetCanvas can be called when it shouldn't, see for example KWStatisticsDocker for a workaround for this problem.

Implements KoCanvasObserverBase.

Definition at line 88 of file KoToolBoxDocker.cpp.

89{
90}

◆ updateFloating

void KoToolBoxDocker::updateFloating ( bool v)
protectedslot

Definition at line 173 of file KoToolBoxDocker.cpp.

174{
176}
qreal v
void setFloating(bool v)

References m_toolBox, KoToolBox::setFloating(), and v.

◆ updateLayoutDir()

void KoToolBoxDocker::updateLayoutDir ( )
private

Definition at line 114 of file KoToolBoxDocker.cpp.

115{
116 if (m_layoutDir == Qt::LayoutDirectionAuto) {
117 if (m_dockArea == Qt::RightDockWidgetArea) {
118 m_scrollArea->setLayoutDirection(Qt::RightToLeft);
119 } else if (m_dockArea == Qt::LeftDockWidgetArea) {
120 m_scrollArea->setLayoutDirection(Qt::LeftToRight);
121 } else {
122 m_scrollArea->unsetLayoutDirection();
123 }
124 } else {
125 m_scrollArea->setLayoutDirection(m_layoutDir);
126 }
127}
Qt::DockWidgetArea m_dockArea

References m_dockArea, m_layoutDir, and m_scrollArea.

◆ updateToolBoxOrientation

void KoToolBoxDocker::updateToolBoxOrientation ( Qt::DockWidgetArea area)
protectedslot

Definition at line 105 of file KoToolBoxDocker.cpp.

106{
107 m_dockArea = area;
109 if (m_orientation == Auto) {
110 setToolBoxOrientation(width() > height() ? Qt::Horizontal : Qt::Vertical);
111 }
112}

References Auto, m_dockArea, m_orientation, setToolBoxOrientation(), and updateLayoutDir().

Member Data Documentation

◆ m_contextMenu

QMenu* KoToolBoxDocker::m_contextMenu {nullptr}
private

Definition at line 60 of file KoToolBoxDocker_p.h.

60{nullptr};

◆ m_dockArea

Qt::DockWidgetArea KoToolBoxDocker::m_dockArea {Qt::NoDockWidgetArea}
private

Definition at line 61 of file KoToolBoxDocker_p.h.

61{Qt::NoDockWidgetArea};

◆ m_layoutDir

Qt::LayoutDirection KoToolBoxDocker::m_layoutDir {Qt::LayoutDirectionAuto}
private

Definition at line 62 of file KoToolBoxDocker_p.h.

62{Qt::LayoutDirectionAuto};

◆ m_orientation

Orientation KoToolBoxDocker::m_orientation {Auto}
private

Definition at line 63 of file KoToolBoxDocker_p.h.

63{Auto};

◆ m_scrollArea

KoToolBoxScrollArea* KoToolBoxDocker::m_scrollArea
private

Definition at line 59 of file KoToolBoxDocker_p.h.

◆ m_toolBox

KoToolBox* KoToolBoxDocker::m_toolBox
private

Definition at line 58 of file KoToolBoxDocker_p.h.


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