digiKam
Loading...
Searching...
No Matches
itemvisibilitycontroller.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2010-09-20
7 * Description : Managing visibility state with animations
8 *
9 * SPDX-FileCopyrightText: 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2012-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QAbstractAnimation>
21#include <QVariant>
22
23// Local includes
24
25#include "digikam_export.h"
26
27class QEasingCurve;
28class QPropertyAnimation;
29
30namespace Digikam
31{
32
33class DIGIKAM_EXPORT ItemVisibilityController : public QObject
34{
35 Q_OBJECT
36 Q_PROPERTY(bool shallBeShown READ shallBeShown WRITE setShallBeShown)
37 Q_PROPERTY(bool visible READ isVisible WRITE setVisible)
38
39public:
40
61 enum State
62 {
66 FadingOut
67 };
68 Q_ENUM(State)
69
71 {
74
76 ExcludeFadingOut
77 };
78
79public:
80
81 explicit ItemVisibilityController(QObject* const parent = nullptr);
83
84 bool shallBeShown() const;
85 bool isVisible() const;
86 State state() const;
87
93 bool hasVisibleItems(IncludeFadingOutMode mode = IncludeFadingOut) const;
94
98 void clear();
99
108 void addItem(QObject* const object);
109 void removeItem(QObject* const object);
110
114 QList<QObject*> items() const;
115
119 QList<QObject*> visibleItems(IncludeFadingOutMode mode = IncludeFadingOut) const;
120
124 void setEasingCurve(const QEasingCurve& easing);
125 void setAnimationDuration(int msecs);
126
127Q_SIGNALS:
128
132 void propertiesAssigned(bool visible);
133
138 void propertiesAssigned(QObject* item, bool visible);
139
143 void hiddenAndRemoved(QObject* item);
144
145public Q_SLOTS:
146
150 void setShallBeShown(bool shallBeShown);
151 void setShallBeShownDirectly(bool shallBeShown);
152
158 void setItemThatShallBeShown(QObject* item);
159
166 void show();
167 void hide();
168 void setVisible(bool visible);
169 void setDirectlyVisible(bool visible);
170
177 void showItem(QObject* item);
178 void hideItem(QObject* item);
179 void setItemVisible(QObject* item, bool visible);
180 void setItemDirectlyVisible(QObject* item, bool visible);
181
186 void hideAndRemoveItem(QObject* item);
187
188protected:
189
197 virtual QPropertyAnimation* createAnimation(QObject* item);
198
199protected Q_SLOTS:
200
201 void animationFinished();
202 void objectDestroyed(QObject*);
203
204private:
205
206 class Private;
207 Private* const d = nullptr;
208};
209
210// ------------------------------------------------------------------------------------------
211
212class DIGIKAM_EXPORT ItemVisibilityControllerPropertyObject : public QObject
213{
214 Q_OBJECT
215 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
216 Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
217
218public:
219
226 explicit ItemVisibilityControllerPropertyObject(QObject* const parent = nullptr);
227
228 qreal opacity() const;
229 void setOpacity(qreal opacity);
230
231 bool isVisible() const;
232 void setVisible(bool visible);
233
234Q_SIGNALS:
235
236 void opacityChanged();
237 void visibleChanged();
238
239protected:
240
241 qreal m_opacity = 0.0;
242 bool m_visible = false;
243};
244
245// ------------------------------------------------------------------------------------------
246
248{
249 Q_OBJECT
250
251public:
252
260 explicit AnimatedVisibility(QObject* const parent = nullptr);
261
262 ItemVisibilityController* controller() const;
263
264protected:
265
266 ItemVisibilityController* m_controller = nullptr;
267};
268
269// ------------------------------------------------------------------------------------------
270
271class DIGIKAM_EXPORT HidingStateChanger : public ItemVisibilityController
272{
273 Q_OBJECT
274
275public:
276
285 explicit HidingStateChanger(QObject* const parent = nullptr);
286
290 HidingStateChanger(QObject* const target, const QByteArray& property, QObject* const parent = nullptr);
291
292 void setTargetObject(QObject* const object);
293 void setPropertyName(const QByteArray& propertyName);
294
295public Q_SLOTS:
296
297 void changeValue(const QVariant& value);
298
299Q_SIGNALS:
300
305
309 void finished();
310
311protected Q_SLOTS:
312
313 void slotPropertiesAssigned(bool);
314
315protected:
316
317 QObject* m_object = nullptr;
318 QByteArray m_property;
319 QVariant m_value;
320};
321
322} // namespace Digikam
Definition itemvisibilitycontroller.h:248
Definition itemvisibilitycontroller.h:272
QVariant m_value
Definition itemvisibilitycontroller.h:319
QByteArray m_property
Definition itemvisibilitycontroller.h:318
Definition itemvisibilitycontroller.h:213
Definition itemvisibilitycontroller.h:34
State
Definition itemvisibilitycontroller.h:62
@ Hidden
Definition itemvisibilitycontroller.h:63
@ FadingIn
Definition itemvisibilitycontroller.h:64
@ Visible
Definition itemvisibilitycontroller.h:65
void propertiesAssigned(bool visible)
void propertiesAssigned(QObject *item, bool visible)
IncludeFadingOutMode
Definition itemvisibilitycontroller.h:71
@ IncludeFadingOut
In addition to items visible or fading in, return those fading out.
Definition itemvisibilitycontroller.h:73
void hiddenAndRemoved(QObject *item)
qulonglong value
Definition itemviewutilities.cpp:585
Definition datefolderview.cpp:34
Definition abstractalbumtreeview_p.h:75