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 area)
 

Protected Member Functions

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

Private Member Functions

void changeLayoutDir (Qt::LayoutDirection)
 
void setToolBoxOrientation (Qt::Orientation orientation)
 
void updateLayoutDir ()
 

Private Attributes

QMenu * m_contextMenu {nullptr}
 
Qt::DockWidgetArea m_dockArea {Qt::NoDockWidgetArea}
 
Qt::LayoutDirection m_layoutDir
 
KoToolBoxScrollAream_scrollArea
 
KoToolBoxm_toolBox
 

Detailed Description

Definition at line 23 of file KoToolBoxDocker_p.h.

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 connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
63 this, SLOT(updateToolBoxOrientation(Qt::DockWidgetArea)));
64 connect(this, SIGNAL(topLevelChanged(bool)),
65 this, SLOT(updateFloating(bool)));
66}
KoToolBoxScrollArea * m_scrollArea
Qt::LayoutDirection m_layoutDir
void updateToolBoxOrientation(Qt::DockWidgetArea area)
void updateFloating(bool)
KoToolBox * m_toolBox

References m_layoutDir, m_scrollArea, updateFloating(), updateLayoutDir(), and updateToolBoxOrientation().

Member Function Documentation

◆ changeLayoutDir()

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

Definition at line 120 of file KoToolBoxDocker.cpp.

121{
122 KConfigGroup cfg = KSharedConfig::openConfig()->group("KoToolBox");
123 cfg.writeEntry<int>("layoutDir", dir);
124 m_layoutDir = dir;
126}

References m_layoutDir, and updateLayoutDir().

◆ contextMenuEvent()

void KoToolBoxDocker::contextMenuEvent ( QContextMenuEvent * event)
overrideprotected

Definition at line 144 of file KoToolBoxDocker.cpp.

145{
146 if (!m_contextMenu) {
147 m_contextMenu = new QMenu(this);
148 m_contextMenu->addSection(i18n("Icon Size"));
150
151 m_contextMenu->addSection(i18nc("Toolbox layout", "Layout"));
152 QActionGroup *layoutActionGroup = new QActionGroup(m_contextMenu);
153
154 QAction *layoutAuto = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox layout direction", "&Automatic"));
155 layoutAuto->setActionGroup(layoutActionGroup);
156 layoutAuto->setCheckable(true);
157 connect(layoutAuto, &QAction::triggered, this, [this]() {
158 changeLayoutDir(Qt::LayoutDirectionAuto);
159 });
160
161 QAction *layoutLtr = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox layout direction", "&Left-to-right"));
162 layoutLtr->setActionGroup(layoutActionGroup);
163 layoutLtr->setCheckable(true);
164 connect(layoutLtr, &QAction::triggered, this, [this]() {
165 changeLayoutDir(Qt::LeftToRight);
166 });
167
168 QAction *layoutRtl = m_contextMenu->addAction(i18nc("@item:inmenu Toolbox layout direction", "&Right-to-left"));
169 layoutRtl->setActionGroup(layoutActionGroup);
170 layoutRtl->setCheckable(true);
171 connect(layoutRtl, &QAction::triggered, this, [this]() {
172 changeLayoutDir(Qt::RightToLeft);
173 });
174
175 switch (m_layoutDir) {
176 case Qt::LayoutDirectionAuto:
177 layoutAuto->setChecked(true);
178 break;
179 case Qt::LeftToRight:
180 layoutLtr->setChecked(true);
181 break;
182 case Qt::RightToLeft:
183 layoutRtl->setChecked(true);
184 break;
185 }
186 }
187
188 m_contextMenu->exec(event->globalPos());
189}
void changeLayoutDir(Qt::LayoutDirection)
void setupIconSizeMenu(QMenu *menu)

References changeLayoutDir(), m_contextMenu, m_layoutDir, m_toolBox, and KoToolBox::setupIconSizeMenu().

◆ 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 82 of file KoToolBoxDocker.cpp.

83{
84 QDockWidget::resizeEvent(event);
85 if (isFloating()) {
86 if (width() > height()) {
87 setToolBoxOrientation(Qt::Horizontal);
88 } else {
89 setToolBoxOrientation(Qt::Vertical);
90 }
91 }
92}
void setToolBoxOrientation(Qt::Orientation orientation)

References setToolBoxOrientation().

◆ setCanvas()

void KoToolBoxDocker::setCanvas ( KoCanvasBase * canvas)
overridevirtual

reimplemented from KoCanvasObserverBase

Implements KoCanvasObserverBase.

Definition at line 68 of file KoToolBoxDocker.cpp.

69{
70 Q_UNUSED(canvas);
71}

◆ setToolBoxOrientation()

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

Definition at line 128 of file KoToolBoxDocker.cpp.

129{
130 if (orientation == Qt::Horizontal) {
131 setFeatures(features() | QDockWidget::DockWidgetVerticalTitleBar);
132 m_scrollArea->setOrientation(Qt::Horizontal);
133 } else {
134 setFeatures(features() & ~QDockWidget::DockWidgetVerticalTitleBar);
135 m_scrollArea->setOrientation(Qt::Vertical);
136 }
137}
void setOrientation(Qt::Orientation orientation)

References m_scrollArea, and KoToolBoxScrollArea::setOrientation().

◆ setViewManager()

void KoToolBoxDocker::setViewManager ( KisViewManager * viewManager)
overridevirtual

reimplemented from KisMainwindowObserver

Implements KisMainwindowObserver.

Definition at line 77 of file KoToolBoxDocker.cpp.

78{
79 m_toolBox->setViewManager(viewManager);
80}
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 73 of file KoToolBoxDocker.cpp.

74{
75}

◆ updateFloating

void KoToolBoxDocker::updateFloating ( bool v)
protectedslot

Definition at line 139 of file KoToolBoxDocker.cpp.

140{
142}
qreal v
void setFloating(bool v)

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

◆ updateLayoutDir()

void KoToolBoxDocker::updateLayoutDir ( )
private

Definition at line 105 of file KoToolBoxDocker.cpp.

106{
107 if (m_layoutDir == Qt::LayoutDirectionAuto) {
108 if (m_dockArea == Qt::RightDockWidgetArea) {
109 m_scrollArea->setLayoutDirection(Qt::RightToLeft);
110 } else if (m_dockArea == Qt::LeftDockWidgetArea) {
111 m_scrollArea->setLayoutDirection(Qt::LeftToRight);
112 } else {
113 m_scrollArea->unsetLayoutDirection();
114 }
115 } else {
116 m_scrollArea->setLayoutDirection(m_layoutDir);
117 }
118}
Qt::DockWidgetArea m_dockArea

References m_dockArea, m_layoutDir, and m_scrollArea.

◆ updateToolBoxOrientation

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

Definition at line 94 of file KoToolBoxDocker.cpp.

95{
96 m_dockArea = area;
98 if (area == Qt::TopDockWidgetArea || area == Qt::BottomDockWidgetArea) {
99 setToolBoxOrientation(Qt::Horizontal);
100 } else {
101 setToolBoxOrientation(Qt::Vertical);
102 }
103}

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

Member Data Documentation

◆ m_contextMenu

QMenu* KoToolBoxDocker::m_contextMenu {nullptr}
private

Definition at line 52 of file KoToolBoxDocker_p.h.

52{nullptr};

◆ m_dockArea

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

Definition at line 53 of file KoToolBoxDocker_p.h.

53{Qt::NoDockWidgetArea};

◆ m_layoutDir

Qt::LayoutDirection KoToolBoxDocker::m_layoutDir
private

Definition at line 54 of file KoToolBoxDocker_p.h.

◆ m_scrollArea

KoToolBoxScrollArea* KoToolBoxDocker::m_scrollArea
private

Definition at line 51 of file KoToolBoxDocker_p.h.

◆ m_toolBox

KoToolBox* KoToolBoxDocker::m_toolBox
private

Definition at line 50 of file KoToolBoxDocker_p.h.


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