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>
9#include <ossia-qt/js_utilities.hpp>
31using qml_device_cache = ossia::small_vector<ossia::net::device_base*, 4>;
32using qml_device_push_function
33 = smallfun::function<void(ossia::net::parameter_base&,
const ossia::value_port&)>;
35class OSSIA_EXPORT qml_engine_functions :
public QObject
37 W_OBJECT(qml_engine_functions)
40 const qml_device_cache& state, qml_device_push_function push, QQmlEngine& engine, QObject* parent)
42 , on_push{std::move(push)}
48 ~qml_engine_functions()
override;
50 QVariant read(
const QString& address);
52 void write(
const QString& address,
const QVariant& value);
54 void exec(
const QString& code) E_SIGNAL(OSSIA_EXPORT, exec, code);
55 void compute(
const QString& code,
const QString& cb)
56 E_SIGNAL(OSSIA_EXPORT, compute, code, cb);
57 void system(
const QString& code) E_SIGNAL(OSSIA_EXPORT, system, code);
60 QVariant asArray(QVariant)
const noexcept;
62 QVariant asColor(QVariant)
const noexcept;
64 QVariant asVec2(QVariant)
const noexcept;
66 QVariant asVec3(QVariant)
const noexcept;
68 QVariant asVec4(QVariant)
const noexcept;
71 QJSValue toValue(QJSValue)
const noexcept;
74 static ossia::net::node_base*
75 find_node(qml_device_cache& devices, std::string_view name);
79 ossia::net::node_base* find(
const QString& address);
88 void setDevice(ossia::net::device_base*);
95 void setDevices(qml_device_cache devices);
96 void addDevice(ossia::net::device_base* device);
97 void removeDevice(ossia::net::device_base* device);
105 using device_span = std::span<ossia::net::device_base* const>;
109 struct resolved_address
111 const ossia::destination_t& destination;
118 resolved_address find_address(
const QString&);
120 qml_device_push_function on_push;
121 QQmlEngine& m_engine;
123 ossia::hash_map<QString, ossia::destination_t> m_address_cache;
124 ossia::value_port m_port_cache;
129 void clear_address_cache() { m_address_cache.clear(); }
133 std::recursive_mutex m_mutex;
134 qml_device_cache m_devices;
135 ossia::net::device_base* m_own_device{};
136 bool m_enabled{
true};
139class OSSIA_EXPORT qml_device_engine_functions :
public qml_engine_functions
141 W_OBJECT(qml_device_engine_functions)
144 using qml_engine_functions::qml_engine_functions;
145 ~qml_device_engine_functions();
149 void addNode(QString address, QString type);
152 void removeNode(QString address, QString type);
159 using tree_editor = std::function<void(std::function<
void()>)>;
160 void setTreeEditor(tree_editor);
163 void editTree(std::function<
void(ossia::net::node_base& root)> edit);
165 tree_editor m_tree_editor;
Root of a device tree.
Definition ossia/network/base/device.hpp:58
Definition qml_device.cpp:43