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.setPointSizeF(font.pointSizeF() * 0.9);
38 int titleSize = QFontMetrics(font).height();
39 w->setMinimumSize(titleSize, titleSize);
40 setTitleBarWidget(w);
41
42 KConfigGroup cfg = KSharedConfig::openConfig()->group("KoToolBox");
43 const int layoutDirUnchecked = cfg.readEntry<int>("layoutDir", Qt::LayoutDirectionAuto);
44 switch (layoutDirUnchecked) {
45 case Qt::LayoutDirectionAuto:
46 case Qt::LeftToRight:
47 case Qt::RightToLeft:
48 m_layoutDir = static_cast<Qt::LayoutDirection>(layoutDirUnchecked);
49 break;
50 default:
51 m_layoutDir = Qt::LayoutDirectionAuto;
52 break;
53 }
55
56 connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
57 this, SLOT(updateToolBoxOrientation(Qt::DockWidgetArea)));
58 connect(this, SIGNAL(topLevelChanged(bool)),
59 this, SLOT(updateFloating(bool)));
60}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KoToolBoxScrollArea * m_scrollArea
Qt::LayoutDirection m_layoutDir
void updateToolBoxOrientation(Qt::DockWidgetArea area)
void updateFloating(bool)
KoToolBox * m_toolBox

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

Member Function Documentation

◆ changeLayoutDir()

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

Definition at line 114 of file KoToolBoxDocker.cpp.

115{
116 KConfigGroup cfg = KSharedConfig::openConfig()->group("KoToolBox");
117 cfg.writeEntry<int>("layoutDir", dir);
118 m_layoutDir = dir;
120}

References m_layoutDir, and updateLayoutDir().

◆ contextMenuEvent()

void KoToolBoxDocker::contextMenuEvent ( QContextMenuEvent * event)
overrideprotected

Definition at line 138 of file KoToolBoxDocker.cpp.

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

References changeLayoutDir(), connect(), 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 76 of file KoToolBoxDocker.cpp.

77{
78 QDockWidget::resizeEvent(event);
79 if (isFloating()) {
80 if (width() > height()) {
81 setToolBoxOrientation(Qt::Horizontal);
82 } else {
83 setToolBoxOrientation(Qt::Vertical);
84 }
85 }
86}
void setToolBoxOrientation(Qt::Orientation orientation)

References setToolBoxOrientation().

◆ setCanvas()

void KoToolBoxDocker::setCanvas ( KoCanvasBase * canvas)
overridevirtual

reimplemented from KoCanvasObserverBase

Implements KoCanvasObserverBase.

Definition at line 62 of file KoToolBoxDocker.cpp.

63{
64 Q_UNUSED(canvas);
65}

◆ setToolBoxOrientation()

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

Definition at line 122 of file KoToolBoxDocker.cpp.

123{
124 if (orientation == Qt::Horizontal) {
125 setFeatures(features() | QDockWidget::DockWidgetVerticalTitleBar);
126 m_scrollArea->setOrientation(Qt::Horizontal);
127 } else {
128 setFeatures(features() & ~QDockWidget::DockWidgetVerticalTitleBar);
129 m_scrollArea->setOrientation(Qt::Vertical);
130 }
131}
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 71 of file KoToolBoxDocker.cpp.

72{
73 m_toolBox->setViewManager(viewManager);
74}
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 67 of file KoToolBoxDocker.cpp.

68{
69}

◆ updateFloating

void KoToolBoxDocker::updateFloating ( bool v)
protectedslot

Definition at line 133 of file KoToolBoxDocker.cpp.

134{
136}
qreal v
void setFloating(bool v)

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

◆ updateLayoutDir()

void KoToolBoxDocker::updateLayoutDir ( )
private

Definition at line 99 of file KoToolBoxDocker.cpp.

100{
101 if (m_layoutDir == Qt::LayoutDirectionAuto) {
102 if (m_dockArea == Qt::RightDockWidgetArea) {
103 m_scrollArea->setLayoutDirection(Qt::RightToLeft);
104 } else if (m_dockArea == Qt::LeftDockWidgetArea) {
105 m_scrollArea->setLayoutDirection(Qt::LeftToRight);
106 } else {
107 m_scrollArea->unsetLayoutDirection();
108 }
109 } else {
110 m_scrollArea->setLayoutDirection(m_layoutDir);
111 }
112}
Qt::DockWidgetArea m_dockArea

References m_dockArea, m_layoutDir, and m_scrollArea.

◆ updateToolBoxOrientation

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

Definition at line 88 of file KoToolBoxDocker.cpp.

89{
90 m_dockArea = area;
92 if (area == Qt::TopDockWidgetArea || area == Qt::BottomDockWidgetArea) {
93 setToolBoxOrientation(Qt::Horizontal);
94 } else {
95 setToolBoxOrientation(Qt::Vertical);
96 }
97}

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: