QmlMaterial 0.1.0
Loading...
Searching...
No Matches
pull_to_refresh_state.hpp
1#pragma once
2
3#include "qml_material/input/nested_scroll_connection.hpp"
4
5namespace qml_material
6{
7class QML_MATERIAL_API PullToRefreshState : public NestedScrollConnection {
8 Q_OBJECT
9 QML_ELEMENT
10 Q_PROPERTY(qreal threshold READ threshold WRITE setThreshold NOTIFY thresholdChanged FINAL)
11 Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged FINAL)
12 Q_PROPERTY(bool refreshing READ refreshing WRITE setRefreshing NOTIFY refreshingChanged FINAL)
13 Q_PROPERTY(bool settling READ settling WRITE setSettling NOTIFY settlingChanged FINAL)
14 Q_PROPERTY(bool dragging READ dragging NOTIFY draggingChanged FINAL)
15 Q_PROPERTY(bool armed READ armed NOTIFY distanceChanged FINAL)
16 Q_PROPERTY(qreal offset READ offset NOTIFY distanceChanged FINAL)
17 Q_PROPERTY(qreal distanceFraction READ distanceFraction NOTIFY distanceChanged FINAL)
18public:
19 explicit PullToRefreshState(QObject* parent = nullptr);
20 qreal threshold() const { return m_threshold; }
21 bool enabled() const { return m_enabled; }
22 bool refreshing() const { return m_refreshing; }
23 bool settling() const { return m_settling; }
24 bool dragging() const { return m_dragging; }
25 bool armed() const { return m_dragging && m_rawDistance * 0.5 > m_threshold; }
26 qreal offset() const { return m_offset; }
27 qreal distanceFraction() const { return m_offset / m_threshold; }
28 void setThreshold(qreal);
29 void setEnabled(bool);
30 void setRefreshing(bool);
31 void setSettling(bool);
32 QPointF preScroll(QPointF, Source) override;
33 QPointF postScroll(QPointF, QPointF, Source) override;
34 bool canConsume(QPointF, Source) const override;
35 void begin(Source) override;
36 QPointF release(QPointF velocity) override;
37 void end(bool cancelled) override;
38 Q_SIGNAL void thresholdChanged();
39 Q_SIGNAL void enabledChanged();
40 Q_SIGNAL void refreshingChanged();
41 Q_SIGNAL void settlingChanged();
42 Q_SIGNAL void draggingChanged();
43 Q_SIGNAL void distanceChanged();
44 Q_SIGNAL void refreshRequested();
45
46private:
47 void update(qreal rawDistance, bool dragging);
48 QPointF consume(QPointF available);
49 qreal m_threshold = 80;
50 qreal m_rawDistance = 0;
51 qreal m_offset = 0;
52 bool m_enabled = true;
53 bool m_refreshing = false;
54 bool m_settling = false;
55 bool m_dragging = false;
56 quint64 m_revision = 0;
57};
58} // namespace qml_material