QmlMaterial 0.1.0
Loading...
Searching...
No Matches
panel.hpp
1#pragma once
2
3#include <QQmlListProperty>
4
5#include "qml_material/control/control.hpp"
6
7namespace qml_material
8{
9
13class QML_MATERIAL_API Panel : public Control {
14 Q_OBJECT
15 QML_NAMED_ELEMENT(PanelBase)
16 Q_CLASSINFO("DefaultProperty", "contentData")
17 Q_PROPERTY(QQmlListProperty<QObject> contentData READ contentData FINAL)
18 Q_PROPERTY(QQmlListProperty<QQuickItem> contentChildren READ contentChildren NOTIFY
19 contentChildrenChanged FINAL)
20 Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth RESET resetContentWidth
21 NOTIFY contentWidthChanged FINAL)
22 Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight RESET
23 resetContentHeight NOTIFY contentHeightChanged FINAL)
24
25public:
26 explicit Panel(QQuickItem* parent = nullptr);
27 ~Panel() override;
28
29 QQmlListProperty<QObject> contentData();
30 QQmlListProperty<QQuickItem> contentChildren();
31 qreal contentWidth() const;
32 qreal contentHeight() const;
33 void setContentWidth(qreal value);
34 void setContentHeight(qreal value);
35 void resetContentWidth();
36 void resetContentHeight();
37
38 Q_SIGNAL void contentWidthChanged();
39 Q_SIGNAL void contentHeightChanged();
40 Q_SIGNAL void contentChildrenChanged();
41
42protected:
43 QSizeF measureImplicitContent() const override;
44 void componentComplete() override;
45 void mousePressEvent(QMouseEvent* event) override;
46 void mouseReleaseEvent(QMouseEvent* event) override;
47 void mouseMoveEvent(QMouseEvent* event) override;
48 void touchEvent(QTouchEvent* event) override;
49
50private:
51 QSizeF calculateContentSize() const;
52 void observeContentItem();
53 void observeChildren();
54 void updateContentSize();
55
56 QSizeF m_content_size { 0, 0 };
57 std::optional<qreal> m_content_width;
58 std::optional<qreal> m_content_height;
59 QMetaObject::Connection m_slot_connection;
60 QList<QMetaObject::Connection> m_host_connections;
61 QList<QMetaObject::Connection> m_child_connections;
62};
63
64} // namespace qml_material
Definition panel.hpp:13