status-desktop/ui/StatusQ/include/StatusQ/fastexpressionrole.h
Michał Cieślak a6cf37278c feat(StatusQ): Faster version of SFPM's ExpressionFilter
Provides FastExpressionFilter component compatible with
SortFilterProxyModel. In comparison to original ExpressionFilter it allows
to define which role values should be provided to the expression's
context and improves performance significantly.

Closes: #13063
2024-01-09 13:47:47 +01:00

48 lines
1.3 KiB
C++

#pragma once
#include <proxyroles/singlerole.h>
#include <QQmlContext>
#include <QQmlExpression>
#include <QQmlScriptString>
#include <memory>
class FastExpressionRole : public qqsfpm::SingleRole
{
Q_OBJECT
Q_PROPERTY(QQmlScriptString expression READ expression WRITE setExpression
NOTIFY expressionChanged)
Q_PROPERTY(QStringList expectedRoles READ expectedRoles
WRITE setExpectedRoles NOTIFY expectedRolesChanged)
public:
using SingleRole::SingleRole;
const QQmlScriptString& expression() const;
void setExpression(const QQmlScriptString& scriptString);
void proxyModelCompleted(
const qqsfpm::QQmlSortFilterProxyModel& proxyModel) override;
void setExpectedRoles(const QStringList& expectedRoles);
const QStringList& expectedRoles() const;
Q_SIGNALS:
void expressionChanged();
void expectedRolesChanged();
private:
QVariant data(const QModelIndex& sourceIndex,
const qqsfpm::QQmlSortFilterProxyModel& proxyModel) override;
void updateContext(const qqsfpm::QQmlSortFilterProxyModel& proxyModel);
void updateExpression();
QQmlScriptString m_scriptString;
std::unique_ptr<QQmlExpression> m_expression;
std::unique_ptr<QQmlContext> m_context;
QStringList m_expectedRoles;
};