21 #include "scriptablenode.h" 23 #include <QtQml/QJSEngine> 27 #include "exception.h" 29 #include "scriptablecontext.h" 30 #include "scriptableparser.h" 32 ScriptableNode::ScriptableNode(
QObject *parent)
33 :
Node(parent), m_scriptEngine(0)
37 void ScriptableNode::setScriptEngine(QJSEngine *engine)
39 m_scriptEngine = engine;
42 void ScriptableNode::init(
const QJSValue &concreteNode,
43 const QJSValue &renderMethod)
45 m_concreteNode = concreteNode;
46 m_renderMethod = renderMethod;
52 auto contextObject = m_scriptEngine->newQObject(&sc);
55 args << contextObject;
58 auto value =
const_cast<QJSValue &
>(m_renderMethod)
59 .callWithInstance(m_concreteNode, args);
61 if (!value.isError() && !value.isUndefined())
62 (*stream) << value.toString();
65 ScriptableNodeFactory::ScriptableNodeFactory(
QObject *parent)
70 void ScriptableNodeFactory::setScriptEngine(QJSEngine *engine)
72 m_scriptEngine = engine;
75 void ScriptableNodeFactory::setEngine(
Engine *engine)
80 void ScriptableNodeFactory::setFactory(
const QJSValue &factoryMethod)
82 m_factoryMethod = factoryMethod;
88 auto parserObject = m_scriptEngine->newQObject(sp);
94 auto factory = m_factoryMethod;
96 auto scriptNode = factory.callWithInstance(factory, args);
97 if (scriptNode.isError())
100 auto node = qjsvalue_cast<
Node *>(scriptNode);
105 QJSEngine *ScriptableNode::engine() {
return m_scriptEngine; }
107 void ScriptableNode::setNodeList(
const QString &name,
110 auto objectListArray = m_scriptEngine->newArray(objectList.
size());
112 for (
auto i = 0; i < objectList.
size(); ++i) {
113 objectListArray.setProperty(i,
114 m_scriptEngine->newQObject(objectList.
at(i)));
116 m_concreteNode.setProperty(name, objectListArray);
The Context class holds the context to render a Template with.
QVariant fromValue(T &&value)
const_reference at(qsizetype i) const const
Base class for all NodeFactories.
qsizetype size() const const
Cutelee::Engine is the main entry point for creating Cutelee Templates.
Base class for all nodes.
void setParent(QObject *parent)
The OutputStream class is used to render templates to a QTextStream.
The Parser class processes a string template into a tree of nodes.
void render(OutputStream *stream, Context *c) const override
Node * getNode(const QString &tagContent, Parser *p={}) const override
An exception for use when implementing template tags.