3#include <QtCore/QEasingCurve>
5#include <QtQml/QQmlEngine>
7#include "qml_material/core.hpp"
12class LinearActiveIndicatorData :
public QObject {
16 Q_PROPERTY(
double startFraction READ startFraction NOTIFY updated FINAL)
17 Q_PROPERTY(
double endFraction READ endFraction NOTIFY updated FINAL)
18 Q_PROPERTY(QColor color READ getColor NOTIFY updated FINAL)
19 Q_PROPERTY(qint32 gapSize READ getGapSize NOTIFY updated FINAL)
21 LinearActiveIndicatorData(QObject* parent =
nullptr);
22 auto startFraction() const noexcept ->
double;
23 auto endFraction() const noexcept ->
double;
24 auto getColor() const noexcept -> QColor;
25 auto getGapSize() const noexcept -> qint32;
27 Q_SIGNAL
void updated();
29 float start_fraction = 0;
30 float end_fraction = 0;
34 float amplitude_fraction = 1;
36 float phase_fraction = 0;
39class LinearIndicatorUpdator :
public QObject {
43 Q_PROPERTY(QList<QColor> colors READ colors WRITE setColors NOTIFY colorsChanged FINAL)
45 Q_PROPERTY(QList<qml_material::LinearActiveIndicatorData*> activeIndicators READ
46 activeIndicators NOTIFY indeterminateAnimationTypeChanged FINAL)
48 Q_PROPERTY(
double progress READ progress WRITE update NOTIFY updated FINAL)
49 Q_PROPERTY(
double completeEndProgress READ completeEndProgress WRITE updateCompleteEndProgress
52 Q_PROPERTY(
double duration READ duration NOTIFY indeterminateAnimationTypeChanged FINAL)
53 Q_PROPERTY(
double completeEndDuration READ completeEndDuration NOTIFY
54 indeterminateAnimationTypeChanged FINAL)
57 IndeterminateAnimationType indeterminateAnimationType READ indeterminateAnimationType WRITE
58 setIndeterminateAnimationType NOTIFY indeterminateAnimationTypeChanged FINAL)
61 LinearIndicatorUpdator(QObject* parent =
nullptr);
63 enum class IndeterminateAnimationType
68 Q_ENUM(IndeterminateAnimationType)
70 auto activeIndicators() -> QList<LinearActiveIndicatorData*>;
71 auto progress() const noexcept ->
double;
72 auto completeEndProgress() const noexcept ->
double;
73 auto duration() const noexcept ->
double;
74 auto completeEndDuration() const noexcept ->
double;
76 auto colors() const -> QList<QColor>;
77 void setColors(const QList<QColor>&);
79 auto indeterminateAnimationType() const noexcept -> IndeterminateAnimationType;
80 void setIndeterminateAnimationType(IndeterminateAnimationType t);
82 void updateContiguous(
double progress) noexcept;
83 void updateDisjoint(
double progress) noexcept;
84 void updateColors() noexcept;
85 Q_SLOT
void initIndicatorDatas() noexcept;
87 Q_SLOT
void update(
double progress);
88 Q_SLOT
void updateCompleteEndProgress(
double progress);
89 Q_SIGNAL
void updated();
90 Q_SIGNAL
void indeterminateAnimationTypeChanged();
91 Q_SIGNAL
void colorsChanged();
94 IndeterminateAnimationType m_type;
96 QEasingCurve m_contiguous_interpolator;
97 std::array<QEasingCurve, 4> m_interpolators;
99 double m_complete_end_progress;
101 std::array<LinearActiveIndicatorData*, 3> m_active_indicators;
102 QList<QColor> m_colors;