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

#include <KoToolDocker.h>

+ Inheritance diagram for KoToolDocker:

Public Slots

bool hasOptionWidget ()
 
void setOptionWidgets (const QList< QPointer< QWidget > > &optionWidgetList)
 
void slotScrollerStateChange (QScroller::State state)
 

Public Member Functions

 KoToolDocker (QWidget *parent=0)
 
void locationChanged (Qt::DockWidgetArea area)
 
 Private (KoToolDocker *dock)
 
void recreateLayout (const QList< QPointer< QWidget > > &optionWidgetList)
 
void resetWidgets ()
 
void resetWidgets ()
 
void setCanvas (KoCanvasBase *canvas) override
 reimplemented
 
void unsetCanvas () override
 
 ~KoToolDocker () override
 
 ~Private ()
 
- Public Member Functions inherited from KoCanvasObserverBase
 KoCanvasObserverBase ()
 
KoCanvasBaseobservedCanvas () const
 
virtual QString observerName ()
 
void setObservedCanvas (KoCanvasBase *canvas)
 
void unsetObservedCanvas ()
 
virtual ~KoCanvasObserverBase ()
 

Public Attributes

QSet< QWidget * > currentAuxWidgets
 
QList< QPointer< QWidget > > currentWidgetList
 
Qt::DockWidgetArea dockingArea {Qt::NoDockWidgetArea}
 
QWidget * hiderWidget {nullptr}
 
QGridLayout * housekeeperLayout {nullptr}
 
QBoxLayout * housekeeperMainLayout {nullptr}
 
QWidget * housekeeperWidget {nullptr}
 
KoToolDockerq {nullptr}
 
QScrollArea * scrollArea {nullptr}
 

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

The tool docker shows the tool option widget associated with the current tool and the current canvas.

Definition at line 20 of file KoToolDocker.cpp.

Constructor & Destructor Documentation

◆ ~Private()

KoToolDocker::~Private ( )
inline

Hider widget is not part of any widget hierarchy (which is intentional due to bug 447522), so we need to delete it manually

Definition at line 28 of file KoToolDocker.cpp.

28 {
31 delete hiderWidget;
32 }
QWidget * hiderWidget

◆ KoToolDocker()

KoToolDocker::KoToolDocker ( QWidget * parent = 0)
explicit

Definition at line 147 of file KoToolDocker.cpp.

148 : QDockWidget(i18n("Tool Options"), parent),
149 d(new Private(this))
150{
151 connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(locationChanged(Qt::DockWidgetArea)));
152
153 d->housekeeperWidget = new QWidget();
154 d->housekeeperLayout = new QGridLayout;
155 d->housekeeperLayout->setContentsMargins(4,4,4,0);
156 d->housekeeperLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
157 d->housekeeperMainLayout =
158 new QBoxLayout(QBoxLayout::TopToBottom, d->housekeeperWidget);
159 d->housekeeperMainLayout->setContentsMargins(0, 0, 0, 0);
160 d->housekeeperMainLayout->setSpacing(0);
161 d->housekeeperMainLayout->addLayout(d->housekeeperLayout, 0);
162 d->housekeeperMainLayout->addStretch(1);
163
164 d->hiderWidget = new QWidget();
165 d->hiderWidget->setVisible(false);
166
167 d->scrollArea = new QScrollArea();
168 d->scrollArea->setWidget(d->housekeeperWidget);
169 d->scrollArea->setFrameShape(QFrame::NoFrame);
170 d->scrollArea->setWidgetResizable(true);
171 d->scrollArea->setFocusPolicy(Qt::NoFocus);
172
173 QScroller *scroller = KisKineticScroller::createPreconfiguredScroller(d->scrollArea);
174 if( scroller ) {
175 connect(scroller, SIGNAL(stateChanged(QScroller::State)), this, SLOT(slotScrollerStateChange(QScroller::State)));
176 }
177
178 setWidget(d->scrollArea);
179}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void slotScrollerStateChange(QScroller::State state)
void locationChanged(Qt::DockWidgetArea area)
Private *const d
KRITAWIDGETUTILS_EXPORT QScroller * createPreconfiguredScroller(QAbstractScrollArea *target)

References connect(), KisKineticScroller::createPreconfiguredScroller(), d, locationChanged(), and slotScrollerStateChange().

◆ ~KoToolDocker()

KoToolDocker::~KoToolDocker ( )
override

Definition at line 181 of file KoToolDocker.cpp.

182{
183 delete d;
184}

References d.

Member Function Documentation

◆ hasOptionWidget

bool KoToolDocker::hasOptionWidget ( )
slot

Returns whether the docker has an option widget attached

Definition at line 186 of file KoToolDocker.cpp.

187{
188 return !d->currentWidgetList.isEmpty();
189}

References d.

◆ locationChanged()

void KoToolDocker::locationChanged ( Qt::DockWidgetArea area)
inline

Definition at line 139 of file KoToolDocker.cpp.

140 {
141 dockingArea = area;
143 }
Qt::DockWidgetArea dockingArea
QList< QPointer< QWidget > > currentWidgetList
void recreateLayout(const QList< QPointer< QWidget > > &optionWidgetList)

◆ Private()

KoToolDocker::Private ( KoToolDocker * dock)
inline

Definition at line 23 of file KoToolDocker.cpp.

24 : q(dock)
25 {
26 }
KoToolDocker * q

◆ recreateLayout()

void KoToolDocker::recreateLayout ( const QList< QPointer< QWidget > > & optionWidgetList)
inline

Definition at line 51 of file KoToolDocker.cpp.

52 {
53 Q_FOREACH (QPointer<QWidget> widget, currentWidgetList) {
54 if (!widget.isNull() && widget && hiderWidget) {
55 widget->setParent(hiderWidget);
56 }
57 }
58 qDeleteAll(currentAuxWidgets);
59 currentAuxWidgets.clear();
60
61 currentWidgetList = optionWidgetList;
62
63 // need to unstretch row that have previously been stretched
64 housekeeperLayout->setRowStretch(housekeeperLayout->rowCount()-1, 0);
65
66 int cnt = 0;
67 QFrame *s;
68 QLabel *l;
69 switch (dockingArea) {
70 case Qt::TopDockWidgetArea:
71 case Qt::BottomDockWidgetArea:
72 housekeeperMainLayout->setDirection(QBoxLayout::LeftToRight);
73 housekeeperMainLayout->setStretch(0, 1);
74 housekeeperMainLayout->setStretch(1, 0);
75 housekeeperLayout->setHorizontalSpacing(2);
76 housekeeperLayout->setVerticalSpacing(0);
77 Q_FOREACH (QPointer<QWidget> widget, currentWidgetList) {
78 if (widget.isNull() || widget->objectName().isEmpty()) {
79 continue;
80 }
81 if (!widget->windowTitle().isEmpty()) {
82 housekeeperLayout->addWidget(
83 l = new QLabel(widget->windowTitle()),
84 0,
85 2 * cnt);
86 currentAuxWidgets.insert(l);
87 }
88 housekeeperLayout->addWidget(widget, 1, 2 * cnt);
89 widget->show();
90 if (widget != currentWidgetList.last()) {
91 housekeeperLayout->addWidget(s = new QFrame(),
92 0,
93 2 * cnt + 1,
94 2,
95 1);
96 s->setFrameShape(QFrame::VLine);
97 currentAuxWidgets.insert(s);
98 }
99 cnt++;
100 }
101 break;
102 case Qt::NoDockWidgetArea:
103 case Qt::LeftDockWidgetArea:
104 case Qt::RightDockWidgetArea: {
105 housekeeperMainLayout->setDirection(QBoxLayout::TopToBottom);
106 housekeeperMainLayout->setStretch(0, 0);
107 housekeeperMainLayout->setStretch(1, 1);
108 housekeeperLayout->setHorizontalSpacing(0);
109 housekeeperLayout->setVerticalSpacing(2);
110 Q_FOREACH (QPointer<QWidget> widget, currentWidgetList) {
111 if (widget.isNull() || widget->objectName().isEmpty()) {
112 continue;
113 }
114 if (!widget->windowTitle().isEmpty()) {
115 housekeeperLayout->addWidget(
116 l = new QLabel(widget->windowTitle()),
117 cnt++,
118 0);
119 currentAuxWidgets.insert(l);
120 }
121 housekeeperLayout->addWidget(widget, cnt++, 0);
122 widget->show();
123 if (widget != currentWidgetList.last()) {
124 housekeeperLayout->addWidget(s = new QFrame(), cnt++, 0);
125 s->setFrameStyle(QFrame::HLine | QFrame::Sunken);
126 currentAuxWidgets.insert(s);
127 }
128 }
129 break;
130 }
131 default:
132 break;
133 }
134
135 housekeeperLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
136 housekeeperLayout->invalidate();
137 }
QSet< QWidget * > currentAuxWidgets
QBoxLayout * housekeeperMainLayout
QGridLayout * housekeeperLayout

◆ resetWidgets() [1/2]

void KoToolDocker::resetWidgets ( )
inline

Definition at line 44 of file KoToolDocker.cpp.

45 {
46 currentWidgetList.clear();
47 qDeleteAll(currentAuxWidgets);
48 currentAuxWidgets.clear();
49 }

◆ resetWidgets() [2/2]

void KoToolDocker::resetWidgets ( )

◆ setCanvas()

void KoToolDocker::setCanvas ( KoCanvasBase * canvas)
overridevirtual

reimplemented

Implements KoCanvasObserverBase.

Definition at line 207 of file KoToolDocker.cpp.

208{
209 setEnabled(canvas != 0);
210}
KisCanvas2 * canvas

References Private::canvas.

◆ setOptionWidgets

void KoToolDocker::setOptionWidgets ( const QList< QPointer< QWidget > > & optionWidgetList)
slot

Update the option widgets to the argument one, removing the currently set widget.

Definition at line 191 of file KoToolDocker.cpp.

192{
193 d->recreateLayout(optionWidgetList);
194}

References d.

◆ slotScrollerStateChange

void KoToolDocker::slotScrollerStateChange ( QScroller::State state)
slot

Definition at line 196 of file KoToolDocker.cpp.

197{
198 KisKineticScroller::updateCursor(d->scrollArea, state);
199}
KRITAWIDGETUTILS_EXPORT void updateCursor(QWidget *source, QScroller::State state)

References d, and KisKineticScroller::updateCursor().

◆ unsetCanvas()

void KoToolDocker::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 212 of file KoToolDocker.cpp.

213{
214 setEnabled(false);
215}

Member Data Documentation

◆ currentAuxWidgets

QSet<QWidget *> KoToolDocker::currentAuxWidgets

Definition at line 35 of file KoToolDocker.cpp.

◆ currentWidgetList

QList<QPointer<QWidget> > KoToolDocker::currentWidgetList

Definition at line 34 of file KoToolDocker.cpp.

◆ d

Private* const KoToolDocker::d
private

Definition at line 52 of file KoToolDocker.h.

◆ dockingArea

Qt::DockWidgetArea KoToolDocker::dockingArea {Qt::NoDockWidgetArea}

Definition at line 42 of file KoToolDocker.cpp.

42{Qt::NoDockWidgetArea};

◆ hiderWidget

QWidget* KoToolDocker::hiderWidget {nullptr}

Definition at line 37 of file KoToolDocker.cpp.

37{nullptr}; // non current widgets are hidden by being children of this

◆ housekeeperLayout

QGridLayout* KoToolDocker::housekeeperLayout {nullptr}

Definition at line 39 of file KoToolDocker.cpp.

39{nullptr};

◆ housekeeperMainLayout

QBoxLayout* KoToolDocker::housekeeperMainLayout {nullptr}

Definition at line 40 of file KoToolDocker.cpp.

40{nullptr};

◆ housekeeperWidget

QWidget* KoToolDocker::housekeeperWidget {nullptr}

Definition at line 38 of file KoToolDocker.cpp.

38{nullptr};

◆ q

KoToolDocker* KoToolDocker::q {nullptr}

Definition at line 41 of file KoToolDocker.cpp.

41{nullptr};

◆ scrollArea

QScrollArea* KoToolDocker::scrollArea {nullptr}

Definition at line 36 of file KoToolDocker.cpp.

36{nullptr};

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