mirror of
https://github.com/status-im/status-desktop.git
synced 2025-02-21 02:58:55 +00:00
59 lines
1.5 KiB
C++
59 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <sorters/sorter.h>
|
|
|
|
#include <QQmlContext>
|
|
#include <QQmlExpression>
|
|
#include <QQmlScriptString>
|
|
#include <QSet>
|
|
#include <QQmlPropertyMap>
|
|
|
|
#include <memory>
|
|
|
|
class FastExpressionSorter : public qqsfpm::Sorter
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QQmlScriptString expression READ expression
|
|
WRITE setExpression NOTIFY expressionChanged)
|
|
|
|
Q_PROPERTY(QSet<QByteArray> expectedRoles READ expectedRoles
|
|
WRITE setExpectedRoles NOTIFY expectedRolesChanged)
|
|
public:
|
|
|
|
using qqsfpm::Sorter::Sorter;
|
|
|
|
const QQmlScriptString& expression() const;
|
|
void setExpression(const QQmlScriptString& scriptString);
|
|
|
|
void proxyModelCompleted(const qqsfpm::QQmlSortFilterProxyModel& proxyModel) override;
|
|
|
|
void setExpectedRoles(const QSet<QByteArray>& expectedRoles);
|
|
const QSet<QByteArray>& expectedRoles() const;
|
|
|
|
void queueInvalidate();
|
|
void onInvalidate();
|
|
|
|
Q_SIGNALS:
|
|
void expressionChanged();
|
|
void expectedRolesChanged();
|
|
|
|
protected:
|
|
int compare(const QModelIndex& sourceLeft, const QModelIndex& sourceRight, const qqsfpm::QQmlSortFilterProxyModel& proxyModel) const override;
|
|
|
|
private:
|
|
void updateContext(const qqsfpm::QQmlSortFilterProxyModel& proxyModel);
|
|
void updateExpression();
|
|
|
|
QQmlScriptString m_scriptString;
|
|
|
|
std::unique_ptr<QQmlExpression> m_expression;
|
|
std::unique_ptr<QQmlContext> m_context;
|
|
|
|
QSet<QByteArray> m_expectedRoles;
|
|
|
|
bool m_queuedInvalidate { false };
|
|
|
|
mutable QQmlPropertyMap m_modelLeftMap;
|
|
mutable QQmlPropertyMap m_modelRightMap;
|
|
};
|