OSSIA
Open Scenario System for Interactive Application
qml_property_reader.hpp
1 #pragma once
2 #include <ossia/network/base/parameter.hpp>
3 
4 #include <ossia-qt/device/qml_node_base.hpp>
5 #include <ossia-qt/qml_context.hpp>
6 #include <ossia-qt/value_metatypes.hpp>
7 
8 #include <QObject>
9 #include <QQmlExpression>
10 #include <QQmlProperty>
11 #include <QQmlPropertyValueSource>
12 #include <QQmlScriptString>
13 
14 #include <verdigris>
15 namespace ossia
16 {
17 namespace qt
18 {
19 class qml_node;
20 class qml_device;
21 class qml_property_context : public QObject
22 {
23  W_OBJECT(qml_property_context)
24 public:
25  qml_property_context(
26  QQmlProperty& p, ossia::net::parameter_base& addr, QObject* parent);
27 
28  QQmlProperty& targetProperty;
30 
31 public:
32  void qtVariantChanged();
33  W_SLOT(qtVariantChanged);
34 };
35 
36 class qml_property_reader
37  : public qml_node_base
38  , public QQmlPropertyValueSource
39 {
40  W_OBJECT(qml_property_reader)
41  W_INTERFACE(QQmlPropertyValueSource)
42 
43 public:
44  qml_property_reader(QQuickItem* parent = nullptr);
45  ~qml_property_reader() override;
46 
47  void setTarget(const QQmlProperty& prop) override;
48  void setDevice(QObject* device) override;
49  void resetNode() override;
50 
51 private:
52  void setupAddress(bool reading);
53  void on_node_deleted(const ossia::net::node_base&);
54  void clearNode();
55 
56  QQmlProperty m_targetProperty;
57  ossia::net::parameter_base* m_param{};
58  qml_property_context* m_propCtx{};
59 };
60 
61 class qml_property_writer
62  : public qml_node_base
63  , public QQmlPropertyValueSource
64 {
65  W_OBJECT(qml_property_writer)
66  W_INTERFACE(QQmlPropertyValueSource)
67 
68 public:
69  qml_property_writer(QQuickItem* parent = nullptr);
70  ~qml_property_writer() override;
71 
72  void setTarget(const QQmlProperty& prop) override;
73  void setDevice(QObject* device) override;
74  void resetNode() override;
75 
76 public:
77  void setValue_sig(const value& arg_1) E_SIGNAL(OSSIA_EXPORT, setValue_sig, arg_1);
78 
79 private:
80  void setValue_slot(const value&);
81  W_SLOT(setValue_slot);
82 
83 private:
84  void setupAddress(bool reading);
85  void on_node_deleted(const ossia::net::node_base&);
86  void clearNode();
87 
88  QQmlProperty m_targetProperty;
89  ossia::net::parameter_base* m_param{};
90  ossia::net::parameter_base::iterator m_cb;
91 };
92 
93 class qml_binding : public qml_node_base
94 {
95  W_OBJECT(qml_binding)
96 
97 public:
98  qml_binding(QQuickItem* parent = nullptr);
99  ~qml_binding() override;
100 
101  void setDevice(QObject* device) override;
102  void resetNode() override;
103 
104  QQmlScriptString on() const;
105 
106 public:
107  void setOn(QQmlScriptString on);
108  W_SLOT(setOn);
109 
110 public:
111  void onChanged(QQmlScriptString on) E_SIGNAL(OSSIA_EXPORT, onChanged, on);
112 
113 private:
114  void on_node_deleted(const ossia::net::node_base&);
115  void clearNode();
116 
117  std::unique_ptr<QQmlExpression> m_expr;
118  ossia::net::parameter_base* m_param{};
119  QQmlScriptString m_on;
120 
121  W_PROPERTY(QQmlScriptString, on READ on WRITE setOn NOTIFY onChanged)
122 };
123 
124 class qml_callback : public qml_node_base
125 {
126  W_OBJECT(qml_callback)
127 
128 public:
129  qml_callback(QQuickItem* parent = nullptr);
130  ~qml_callback() override;
131 
132  void setDevice(QObject* device) override;
133  void resetNode() override;
134 
135  QVariant value() const;
136 
137 public:
138  void valueChanged(QVariant arg_1) E_SIGNAL(OSSIA_EXPORT, valueChanged, arg_1);
139  void setValue_sig(const ossia::value& arg_1)
140  E_SIGNAL(OSSIA_EXPORT, setValue_sig, arg_1);
141 
142 public:
143  void setValue(QVariant value);
144  W_SLOT(setValue);
145  void setValue_slot(const ossia::value&);
146  W_SLOT(setValue_slot);
147 
148 private:
149  void on_node_deleted(const ossia::net::node_base&);
150  void clearNode();
151 
152  ossia::net::parameter_base* m_param{};
153  QVariant m_value;
154  ossia::net::parameter_base::iterator m_cb;
155 
156  W_PROPERTY(QVariant, value READ value WRITE setValue NOTIFY valueChanged)
157 };
158 }
159 }
160 
161 W_REGISTER_ARGTYPE(QQmlScriptString)
The node_base class.
Definition: network/base/node.hpp:48
The parameter_base class.
Definition: ossia/network/base/parameter.hpp:48
The value class.
Definition: value.hpp:173
Definition: git_info.h:7