54IfChangedNode::IfChangedNode(
const QList<FilterExpression> &feList,
74 if (c->
lookup(QStringLiteral(
"forloop")).isValid()
75 && (!c->
lookup(QStringLiteral(
"forloop"))
76 .value<QVariantHash>()
79 auto hash = c->
lookup(QStringLiteral(
"forloop")).value<QVariantHash>();
81 c->
insert(QStringLiteral(
"forloop"), hash);
85 QTextStream watchedTextStream(&watchedString);
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)
112 || (!watchedString.isEmpty()
113 && (watchedString != m_lastSeen.value<
QString>()))) {
114 auto firstLoop = !m_lastSeen.isValid();
115 if (!watchedString.isEmpty())
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);
The Context class holds the context to render a Template with.
void insert(const QString &name, QObject *object)
virtual QVariant lookup(const QString &str) const