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(double n, char format, int precision)
bool isEmpty() const const
bool isEmpty() const const
Base class for all nodes.
int userType() const const
The OutputStream class is used to render templates to a QTextStream.
QStringList split(QChar sep, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
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