3 #include <JS/Executor/JSAPIWrapper.hpp>
4 #include <JS/Qml/Metatypes.hpp>
5 #include <JS/Qml/QmlObjects.hpp>
6 #include <JS/Qml/ValueTypes.Qt6.hpp>
8 #include <ossia/dataflow/graph/graph_interface.hpp>
9 #include <ossia/dataflow/graph_edge.hpp>
10 #include <ossia/dataflow/graph_edge_helpers.hpp>
11 #include <ossia/dataflow/graph_node.hpp>
12 #include <ossia/dataflow/node_process.hpp>
13 #include <ossia/dataflow/port.hpp>
14 #include <ossia/detail/logger.hpp>
15 #include <ossia/detail/ssize.hpp>
16 #include <ossia/editor/scenario/time_interval.hpp>
17 #include <ossia/editor/state/message.hpp>
18 #include <ossia/editor/state/state.hpp>
20 #include <ossia-qt/invoke.hpp>
21 #include <ossia-qt/js_utilities.hpp>
22 #include <ossia-qt/time.hpp>
23 #include <ossia-qt/token_request.hpp>
28 class js_node final :
public ossia::graph_node
31 js_node(ossia::execution_state& st);
34 void run(
const ossia::token_request& t, ossia::exec_state_facade) noexcept
override;
35 void setupComponent();
36 void setScript(
const QString& val);
38 ossia::execution_state& m_st;
40 QQmlEngine* m_engine{};
41 std::vector<Inlet*> m_jsInlets;
42 std::vector<std::pair<ControlInlet*, ossia::inlet_ptr>> m_ctrlInlets;
43 std::vector<std::pair<Impulse*, ossia::inlet_ptr>> m_impulseInlets;
44 std::vector<std::pair<ValueInlet*, ossia::inlet_ptr>> m_valInlets;
45 std::vector<std::pair<ValueOutlet*, ossia::outlet_ptr>> m_valOutlets;
46 std::vector<std::pair<AudioInlet*, ossia::inlet_ptr>> m_audInlets;
47 std::vector<std::pair<AudioOutlet*, ossia::outlet_ptr>> m_audOutlets;
48 std::vector<std::pair<MidiInlet*, ossia::inlet_ptr>> m_midInlets;
49 std::vector<std::pair<MidiOutlet*, ossia::outlet_ptr>> m_midOutlets;
50 JS::Script* m_object{};
52 QJSValueList m_tickCall;
53 std::size_t m_gcIndex{};
60 void setControl(std::size_t index,
const QVariant& val)
62 if(index > m_jsInlets.size())
64 if(
auto v = qobject_cast<ValueInlet*>(m_jsInlets[index]))
66 else if(
auto v = qobject_cast<ControlInlet*>(m_jsInlets[index]))
69 void impulse(std::size_t index)
71 if(index > m_jsInlets.size())
73 if(
auto v = qobject_cast<Impulse*>(m_jsInlets[index]))
80 using node_process::node_process;
82 void start()
override { js().triggerStart =
true; }
83 void stop()
override { js().triggerStop =
true; }
84 void pause()
override { js().triggerPause =
true; }
85 void resume()
override { js().triggerResume =
true; }
86 void transport_impl(ossia::time_value date)
override
88 QMetaObject::invokeMethod(
89 js().m_object,
"transport", Qt::DirectConnection,
90 Q_ARG(QVariant,
double(date.impl)));
92 void offset_impl(ossia::time_value date)
override
94 QMetaObject::invokeMethod(
95 js().m_object,
"offset", Qt::DirectConnection,
96 Q_ARG(QVariant,
double(date.impl)));
Definition: JSAPIWrapper.hpp:19
Definition: CPUNode.hpp:29
Definition: CPUNode.hpp:79