QmlMaterial 0.1.0
Loading...
Searching...
No Matches
switch.hpp
1#pragma once
2#include "qml_material/control/abstract_button.hpp"
3
4namespace qml_material
5{
6class QML_MATERIAL_API Switch : public AbstractButton {
7 Q_OBJECT
8 QML_NAMED_ELEMENT(SwitchBase)
9 Q_PROPERTY(qreal position READ position NOTIFY positionChanged FINAL)
10 Q_PROPERTY(qreal visualPosition READ visualPosition NOTIFY visualPositionChanged FINAL)
11public:
12 explicit Switch(QQuickItem* parent = nullptr);
13 qreal position() const { return m_position; }
14 qreal visualPosition() const { return mirrored() ? 1 - m_position : m_position; }
15 Q_SIGNAL void positionChanged();
16 Q_SIGNAL void visualPositionChanged();
17
18protected:
19 void nextCheckState() override;
20 void pointerStarted(const QPointF&) override;
21 void pointerMoved(const QPointF&) override;
22 void interactionEnded() override;
23 bool retainPressOutside() const override { return true; }
24
25private:
26 qreal positionAt(const QPointF&) const;
27 void setPosition(qreal);
28 qreal m_position = 0;
29 QPointF m_origin;
30 bool m_dragging = false;
31};
32} // namespace qml_material