3#include "qml_material/control/panel.hpp"
7class QML_MATERIAL_API SideSheet :
public Control {
9 QML_NAMED_ELEMENT(SideSheetBase)
10 Q_CLASSINFO(
"DefaultProperty",
"contentData")
11 Q_PROPERTY(QQmlListProperty<QObject> contentData READ contentData FINAL)
12 Q_PROPERTY(Panel* sheetItem READ sheetItem CONSTANT FINAL)
13 Q_PROPERTY(QQuickItem* mainContent READ contentItem WRITE setContentItem NOTIFY
14 contentItemChanged FINAL)
15 Q_PROPERTY(
bool expanded READ expanded WRITE setExpanded NOTIFY expandedChanged FINAL)
16 Q_PROPERTY(State state READ state NOTIFY stateChanged FINAL)
17 Q_PROPERTY(State lastStableState READ lastStableState NOTIFY stateChanged FINAL)
18 Q_PROPERTY(
bool dragging READ dragging NOTIFY stateChanged FINAL)
19 Q_PROPERTY(qreal position READ position WRITE setPosition NOTIFY positionChanged FINAL)
20 Q_PROPERTY(Edge edge READ edge WRITE setEdge NOTIFY configurationChanged FINAL)
21 Q_PROPERTY(Qt::Edge effectiveEdge READ effectiveEdge NOTIFY configurationChanged FINAL)
23 qreal sheetWidth READ sheetWidth WRITE setSheetWidth NOTIFY configurationChanged FINAL)
24 Q_PROPERTY(qreal effectiveSheetWidth READ effectiveSheetWidth NOTIFY sheetGeometryChanged FINAL)
25 Q_PROPERTY(qreal occupiedWidth READ occupiedWidth NOTIFY sheetGeometryChanged FINAL)
26 Q_PROPERTY(
bool detached READ detached WRITE setDetached NOTIFY configurationChanged FINAL)
27 Q_PROPERTY(
bool coplanar READ coplanar WRITE setCoplanar NOTIFY configurationChanged FINAL)
28 Q_PROPERTY(
bool draggable READ draggable WRITE setDraggable NOTIFY configurationChanged FINAL)
29 Q_PROPERTY(qreal hideFriction READ hideFriction WRITE setHideFriction NOTIFY
30 configurationChanged FINAL)
48 explicit SideSheet(QQuickItem* parent =
nullptr);
49 QQmlListProperty<QObject> contentData() {
return m_sheet->contentData(); }
50 Panel* sheetItem()
const {
return m_sheet; }
51 bool expanded()
const {
return m_expanded; }
52 State state()
const {
return m_state; }
53 State lastStableState()
const {
return m_lastStable; }
54 bool dragging()
const {
return m_state == Dragging; }
55 qreal position()
const {
return m_position; }
56 Edge edge()
const {
return m_edge; }
57 Qt::Edge effectiveEdge()
const;
58 qreal sheetWidth()
const {
return m_sheetWidth; }
59 qreal effectiveSheetWidth()
const;
60 qreal occupiedWidth()
const;
61 bool detached()
const {
return m_detached; }
62 bool coplanar()
const {
return m_coplanar; }
63 bool draggable()
const {
return m_draggable; }
64 qreal hideFriction()
const {
return m_hideFriction; }
65 void setExpanded(
bool);
66 void setPosition(qreal);
68 void setSheetWidth(qreal);
69 void setDetached(
bool);
70 void setCoplanar(
bool);
71 void setDraggable(
bool);
72 void setHideFriction(qreal);
73 Q_INVOKABLE
void open() { setExpanded(
true); }
74 Q_INVOKABLE
void close() { setExpanded(
false); }
75 Q_INVOKABLE
bool beginDrag();
76 Q_INVOKABLE
void dragBy(QPointF delta);
77 Q_INVOKABLE
void releaseDrag(QPointF velocity);
78 Q_INVOKABLE
void cancelDrag();
79 Q_INVOKABLE
void completeTransition(quint32 revision);
80 Q_SIGNAL
void expandedChanged();
81 Q_SIGNAL
void stateChanged();
82 Q_SIGNAL
void positionChanged();
83 Q_SIGNAL
void configurationChanged();
84 Q_SIGNAL
void sheetGeometryChanged();
85 Q_SIGNAL
void transitionRequested(quint32 revision, qreal position,
bool animate);
86 Q_SIGNAL
void opened();
87 Q_SIGNAL
void closed();
90 QRectF contentRect()
const override;
91 void classBegin()
override;
92 void componentComplete()
override;
93 void geometryChange(
const QRectF&,
const QRectF&)
override;
96 qreal margin()
const {
return m_detached ? 16 : 0; }
97 qreal hiddenX()
const;
98 qreal expandedX()
const;
100 bool releaseOpens(QPointF velocity)
const;
101 void request(
bool expanded,
bool animate);
103 void configurationUpdated();
106 State m_state = Hidden;
107 State m_lastStable = Hidden;
108 qreal m_position = 0;
109 qreal m_sheetWidth = 256;
110 qreal m_hideFriction = 0.1;
111 bool m_expanded =
false;
112 bool m_detached =
false;
113 bool m_coplanar =
false;
114 bool m_draggable =
true;
115 bool m_initializing =
false;
116 bool m_layoutBusy =
false;
117 bool m_layoutDirty =
false;
118 quint32 m_revision = 0;