CCIMXDesktop
 
Loading...
Searching...
No Matches
CardStackWidget.h
1#ifndef CARDSTACKWIDGET_H
2#define CARDSTACKWIDGET_H
3
4#include "library/limited_value/ValueLimiter.hpp"
5#include <QPointer>
6#include <QStackedWidget>
7
8// Forward declarations
9class QPropertyAnimation;
10class QParallelAnimationGroup;
11class QGraphicsOpacityEffect;
12class QMutex;
13
21class CardStackWidget : public QStackedWidget {
22 Q_OBJECT
23
24public:
25 static constexpr ValueLimitSimplePair animation_bound { 250, 500 };
26 static constexpr ValueLimitSimplePair timer_switch_invoker { 3000, 10000 };
32 explicit CardStackWidget(QWidget* parent = nullptr);
33
38 enum class CardTransitionMode {
39 Slide,
40 Fade
41 };
42
48
54
59 void slideTo(int newIndex);
60
65 void setablility_of_autoSwitch(bool ability);
66
71 bool autoSwitchAbility();
72
73 __BOUND_PROPERTY_GETSET_UNALLOWED_OUTRANGE(
74 int, animation_duration, animation_bound);
75
76 __BOUND_PROPERTY_GETSET_UNALLOWED_OUTRANGE(
77 int, randomize_duration, timer_switch_invoker);
78
79protected:
84 void mousePressEvent(QMouseEvent* event) override;
85
90 void mouseReleaseEvent(QMouseEvent* event) override;
91
96 void mouseMoveEvent(QMouseEvent* event) override;
97
98private:
99 bool isDragging { false };
100 QPoint startPos;
101 QPropertyAnimation* current_animation;
102 QPropertyAnimation* next_animation;
103 QParallelAnimationGroup* group;
104 QPointer<QWidget> hideAfterAnimation;
105 int animation_duration { 350 };
106 int randomize_duration { 2000 };
107 QTimer* auto_switcher;
108 std::shared_ptr<QMutex> mutex;
116 void slideTo(int newIndex, bool slideUp);
117
123 void bouceBack(int dy, int index);
124
130 QGraphicsOpacityEffect* ensureOpacity(QWidget* w);
131};
132
133#endif // CARDSTACKWIDGET_H
An enhanced QStackedWidget with animated card transitions.
Definition CardStackWidget.h:21
void mousePressEvent(QMouseEvent *event) override
Handles mouse press events for drag detection.
Definition CardStackWidget.cpp:39
void mouseMoveEvent(QMouseEvent *event) override
Handles mouse move events for drag tracking.
Definition CardStackWidget.cpp:44
void setablility_of_autoSwitch(bool ability)
Enables/disables automatic card switching.
Definition CardStackWidget.cpp:159
void slideTo(int newIndex)
Animates transition to a specific card.
Definition CardStackWidget.cpp:155
bool autoSwitchAbility()
Checks if auto-switching is enabled.
Definition CardStackWidget.cpp:168
static constexpr ValueLimitSimplePair animation_bound
Definition CardStackWidget.h:25
void setCardTransitionMode(CardTransitionMode mode)
Sets the transition animation mode.
Definition CardStackWidget.cpp:147
CardTransitionMode
Available transition animation modes.
Definition CardStackWidget.h:38
CardTransitionMode cardTransitionMode() const
Gets the current transition mode.
Definition CardStackWidget.cpp:151
void mouseReleaseEvent(QMouseEvent *event) override
Handles mouse release events for drag completion.
Definition CardStackWidget.cpp:74
static constexpr ValueLimitSimplePair timer_switch_invoker
Definition CardStackWidget.h:26