OSSIA
Open Scenario System for Interactive Application
Loading...
Searching...
No Matches
qml_engine_functions.hpp
1#pragma once
2
3#include <ossia/dataflow/dataflow_fwd.hpp>
4#include <ossia/dataflow/value_port.hpp>
5#include <ossia/detail/hash_map.hpp>
7#include <ossia/network/common/path.hpp>
8
9#include <ossia-qt/js_utilities.hpp>
10
11#include <QObject>
12#include <QQmlContext>
13#include <QQmlEngine>
14
15#include <verdigris>
16
17namespace ossia
18{
19struct value_port;
20namespace net
21{
22class device_base;
23}
24}
25namespace ossia::qt
26{
27using qml_device_cache = ossia::small_vector<ossia::net::device_base*, 4>;
28using qml_device_push_function
29 = smallfun::function<void(ossia::net::parameter_base&, const ossia::value_port&)>;
30
31class OSSIA_EXPORT qml_engine_functions : public QObject
32{
33 W_OBJECT(qml_engine_functions)
34public:
35 qml_engine_functions(
36 const qml_device_cache& state, qml_device_push_function push, QQmlEngine& engine, QObject* parent)
37 : QObject{parent}
38 , devices{state}
39 , on_push{std::move(push)}
40 , m_engine{engine}
41 {
42 }
43
44 ~qml_engine_functions() override;
45
46 QVariant read(const QString& address);
47 W_SLOT(read);
48 void write(const QString& address, const QVariant& value);
49 W_SLOT(write);
50 void exec(const QString& code) E_SIGNAL(OSSIA_EXPORT, exec, code);
51 void compute(const QString& code, const QString& cb)
52 E_SIGNAL(OSSIA_EXPORT, compute, code, cb);
53 void system(const QString& code) E_SIGNAL(OSSIA_EXPORT, system, code);
54
56 QVariant asArray(QVariant) const noexcept;
57 W_SLOT(asArray)
58 QVariant asColor(QVariant) const noexcept;
59 W_SLOT(asColor)
60 QVariant asVec2(QVariant) const noexcept;
61 W_SLOT(asVec2)
62 QVariant asVec3(QVariant) const noexcept;
63 W_SLOT(asVec3)
64 QVariant asVec4(QVariant) const noexcept;
65 W_SLOT(asVec4)
66
67 QJSValue toValue(QJSValue) const noexcept;
68 W_SLOT(toValue)
69
71 find_node(qml_device_cache& devices, std::string_view name);
72 const ossia::destination_t& find_address(const QString&);
73
74 qml_device_cache devices;
75 void clearCache() { m_address_cache.clear(); }
76
77private:
78 qml_device_push_function on_push;
79 QQmlEngine& m_engine;
80
81 ossia::hash_map<QString, ossia::destination_t> m_address_cache;
82 ossia::value_port m_port_cache;
83 // TODO share cache
84};
85
86class OSSIA_EXPORT qml_device_engine_functions : public qml_engine_functions
87{
88 W_OBJECT(qml_device_engine_functions)
90
91public:
92 using qml_engine_functions::qml_engine_functions;
93 ~qml_device_engine_functions();
94
95 void addNode(QString address, QString type);
96 W_SLOT(addNode)
97
98 void removeNode(QString address, QString type);
99 W_SLOT(removeNode)
100
101 void setDevice(ossia::net::device_base*);
102};
103}
Root of a device tree.
Definition ossia/network/base/device.hpp:58
The node_base class.
Definition node.hpp:48
The parameter_base class.
Definition ossia/network/base/parameter.hpp:48
Definition qml_device.cpp:43
Definition git_info.h:7