21 #include "ifchanged.h" 25 #include <QtCore/QDateTime> 27 IfChangedNodeFactory::IfChangedNodeFactory() {}
31 #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) 41 = p->
parse(n, {QStringLiteral(
"else"), QStringLiteral(
"endifchanged")});
42 n->setTrueList(trueList);
46 falseList = p->
parse(n, QStringLiteral(
"endifchanged"));
47 n->setFalseList(falseList);
56 :
Node(parent), m_filterExpressions(feList)
62 void IfChangedNode::setTrueList(
const NodeList &trueList)
64 m_trueList = trueList;
67 void IfChangedNode::setFalseList(
const NodeList &falseList)
69 m_falseList = falseList;
75 && (!c->
lookup(QStringLiteral(
"forloop"))
76 .
value<QVariantHash>()
79 auto hash = c->
lookup(QStringLiteral(
"forloop")).
value<QVariantHash>();
81 c->
insert(QStringLiteral(
"forloop"), hash);
86 auto watchedStream = stream->
clone(&watchedTextStream);
87 if (m_filterExpressions.
isEmpty()) {
88 m_trueList.
render(watchedStream.get(), c);
90 QVariantList watchedVars;
91 for (
auto &i : m_filterExpressions) {
92 auto var = i.resolve(c);
97 watchedVars.append(var);
103 QVariantList lastSeenVarList;
104 if (m_lastSeen.
userType() != qMetaTypeId<QString>()) {
105 lastSeenVarList = m_lastSeen.
value<QVariantList>();
111 if ((watchedVars != lastSeenVarList)
114 auto firstLoop = !m_lastSeen.
isValid();
116 m_lastSeen = watchedString;
118 m_lastSeen = watchedVars;
122 hash.insert(QStringLiteral(
"firstloop"), firstLoop);
123 c->
insert(QStringLiteral(
"ifchanged"), hash);
124 m_trueList.
render(stream, c);
126 }
else if (!m_falseList.
isEmpty()) {
127 m_falseList.
render(stream, c);
NodeList parse(Node *parent, const QStringList &stopAt={})
The Context class holds the context to render a Template with.
QList< FilterExpression > getFilterExpressionList(const QStringList &list, Parser *p) const
QString content
The content of this Token.
QString number(int n, int base)
bool isEmpty() const const
bool isEmpty() const const
QStringList split(const QString &sep, QString::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
Base class for all nodes.
int userType() const const
The OutputStream class is used to render templates to a QTextStream.
The Parser class processes a string template into a tree of nodes.
Node * getNode(const QString &tagContent, Parser *p) const override
A list of Nodes with some convenience API for rendering them.
bool isValid() const const
virtual std::shared_ptr< OutputStream > clone(QTextStream *stream) const
virtual QVariant lookup(const QString &str) const
void render(OutputStream *stream, Context *c) const override
void insert(const QString &name, QObject *object)
void render(OutputStream *stream, Context *c) const