QmlMaterial 0.1.0
Loading...
Searching...
No Matches
progress_indicator_shape.hpp
1#pragma once
2
3#include <QtQuickShapes/private/qquickshape_p.h>
4#include <QtCore/QPointer>
5#include "qml_material/control/progress_indicator.hpp"
6
7namespace qml_material
8{
9class ProgressIndicatorShape : public QQuickShape {
10 Q_OBJECT
11 QML_ELEMENT
12 Q_PROPERTY(ProgressIndicator* source READ source WRITE setSource NOTIFY sourceChanged FINAL)
13 Q_PROPERTY(bool circular MEMBER m_circular NOTIFY appearanceChanged FINAL)
14 Q_PROPERTY(bool legacyRadius MEMBER m_legacyRadius NOTIFY appearanceChanged FINAL)
15 Q_PROPERTY(bool wavy MEMBER m_wavy NOTIFY appearanceChanged FINAL)
16 Q_PROPERTY(qreal strokeWidth MEMBER m_stroke NOTIFY appearanceChanged FINAL)
17 Q_PROPERTY(QColor strokeColor MEMBER m_color NOTIFY appearanceChanged FINAL)
18 Q_PROPERTY(QColor trackColor MEMBER m_track NOTIFY appearanceChanged FINAL)
19 Q_PROPERTY(
20 QVariantList indicators READ indicators WRITE setIndicators NOTIFY appearanceChanged FINAL)
21 Q_PROPERTY(qreal startAngle MEMBER m_start NOTIFY appearanceChanged FINAL)
22 Q_PROPERTY(qreal endAngle MEMBER m_end NOTIFY appearanceChanged FINAL)
23 Q_PROPERTY(qreal inactiveStartAngle MEMBER m_trackStart NOTIFY appearanceChanged FINAL)
24 Q_PROPERTY(qreal inactiveSweepAngle MEMBER m_trackSweep NOTIFY appearanceChanged FINAL)
25 Q_PROPERTY(qreal waveLength MEMBER m_wavelength NOTIFY appearanceChanged FINAL)
26 Q_PROPERTY(qreal waveAmplitude MEMBER m_amplitude NOTIFY appearanceChanged FINAL)
27 Q_PROPERTY(qreal phase MEMBER m_phase NOTIFY appearanceChanged FINAL)
28public:
29 explicit ProgressIndicatorShape(QQuickItem* parent = nullptr);
30 ProgressIndicator* source() const { return m_source; }
31 void setSource(ProgressIndicator* source);
32 QVariantList indicators() const { return m_indicators; }
33 void setIndicators(QVariantList indicators);
34 Q_INVOKABLE QPointF drawLine(qreal startFraction, qreal endFraction, qreal gapSize) const;
35 Q_SIGNAL void sourceChanged();
36 Q_SIGNAL void appearanceChanged();
37
38protected:
39 void componentComplete() override;
40 void geometryChange(const QRectF& now, const QRectF& old) override;
41 void updatePolish() override;
42
43private:
44 void invalidate();
45 void updatePaths();
46 ProgressIndicatorState standaloneState() const;
47 QPointer<ProgressIndicator> m_source;
48 QList<QMetaObject::Connection> m_connections;
49 QList<QMetaObject::Connection> m_indicatorConnections;
50 ProgressIndicatorGeometry m_geometry;
51 QList<QQuickShapePath*> m_paths;
52 bool m_dirty = true;
53 bool m_circular = false;
54 bool m_legacyRadius = false;
55 bool m_wavy = false;
56 qreal m_stroke = 4;
57 QColor m_color = Qt::black;
58 QColor m_track = Qt::transparent;
59 QVariantList m_indicators;
60 qreal m_start = 0;
61 qreal m_end = 0;
62 qreal m_trackStart = 0;
63 qreal m_trackSweep = 0;
64 qreal m_wavelength = 30;
65 qreal m_amplitude = 3;
66 qreal m_phase = 0;
67};
68} // namespace qml_material