QmlMaterial 0.1.0
Loading...
Searching...
No Matches
time_dial.hpp
1#pragma once
2
3#include <QQuickItem>
4#include <QPointer>
5#include "qml_material/input/time_state.hpp"
6
7namespace qml_material
8{
9class QML_MATERIAL_API TimeDial : public QQuickItem {
10 Q_OBJECT
11 QML_ELEMENT
12 Q_PROPERTY(qml_material::TimeState* time READ time WRITE setTime NOTIFY timeChanged FINAL)
13 Q_PROPERTY(qreal handAngle READ handAngle NOTIFY metricsChanged FINAL)
14 Q_PROPERTY(qreal handLength READ handLength NOTIFY metricsChanged FINAL)
15 Q_PROPERTY(QVariantList labels READ labels NOTIFY metricsChanged FINAL)
16 Q_PROPERTY(bool pressed READ pressed NOTIFY pressedChanged FINAL)
17public:
18 explicit TimeDial(QQuickItem* parent = nullptr);
19 TimeState* time() const { return m_time; }
20 void setTime(TimeState*);
21 qreal handAngle() const;
22 qreal handLength() const;
23 QVariantList labels() const;
24 bool pressed() const { return m_active; }
25 Q_SIGNAL void timeChanged();
26 Q_SIGNAL void metricsChanged();
27 Q_SIGNAL void pressedChanged();
28
29protected:
30 void geometryChange(const QRectF&, const QRectF&) override;
31 void itemChange(ItemChange, const ItemChangeData&) override;
32 void mousePressEvent(QMouseEvent*) override;
33 void mouseMoveEvent(QMouseEvent*) override;
34 void mouseReleaseEvent(QMouseEvent*) override;
35 void mouseUngrabEvent() override;
36 void touchEvent(QTouchEvent*) override;
37 void touchUngrabEvent() override;
38 void keyPressEvent(QKeyEvent*) override;
39
40private:
41 qreal radius() const;
42 bool begin(const QPointF&);
43 void update(const QPointF&, bool complete);
44 void cancel();
45 QPointer<TimeState> m_time;
46 QMetaObject::Connection m_changed, m_destroyed, m_windowActive;
47 QPointF m_start;
48 bool m_active = false, m_moved = false, m_updating = false;
49 int m_touchId = -1;
50 quint64 m_revision = 0;
51};
52} // namespace qml_material
Definition time_state.hpp:13