44 lines
1.0 KiB
C
44 lines
1.0 KiB
C
|
#ifndef EXPRESSIONSORTER_H
|
||
|
#define EXPRESSIONSORTER_H
|
||
|
|
||
|
#include "sorter.h"
|
||
|
#include <QQmlScriptString>
|
||
|
|
||
|
class QQmlExpression;
|
||
|
|
||
|
namespace qqsfpm {
|
||
|
|
||
|
class QQmlSortFilterProxyModel;
|
||
|
|
||
|
class ExpressionSorter : public Sorter
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
Q_PROPERTY(QQmlScriptString expression READ expression WRITE setExpression NOTIFY expressionChanged)
|
||
|
|
||
|
public:
|
||
|
using Sorter::Sorter;
|
||
|
|
||
|
const QQmlScriptString& expression() const;
|
||
|
void setExpression(const QQmlScriptString& scriptString);
|
||
|
|
||
|
void proxyModelCompleted(const QQmlSortFilterProxyModel& proxyModel) override;
|
||
|
|
||
|
Q_SIGNALS:
|
||
|
void expressionChanged();
|
||
|
|
||
|
protected:
|
||
|
int compare(const QModelIndex& sourceLeft, const QModelIndex& sourceRight, const QQmlSortFilterProxyModel& proxyModel) const override;
|
||
|
|
||
|
private:
|
||
|
void updateContext(const QQmlSortFilterProxyModel& proxyModel);
|
||
|
void updateExpression();
|
||
|
|
||
|
QQmlScriptString m_scriptString;
|
||
|
QQmlExpression* m_expression = nullptr;
|
||
|
QQmlContext* m_context = nullptr;
|
||
|
};
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif // EXPRESSIONSORTER_H
|