Removed filterExpression and sortExpression

This commit is contained in:
oKcerG 2016-10-11 23:45:31 +02:00
parent 15e46852a4
commit 5b7c10f7b6
2 changed files with 1 additions and 109 deletions

View File

@ -81,35 +81,6 @@ void QQmlSortFilterProxyModel::setFilterValue(const QVariant& filterValue)
emit filterValueChanged();
}
const QQmlScriptString& QQmlSortFilterProxyModel::filterExpression() const
{
return m_filterScriptString;
}
void QQmlSortFilterProxyModel::setFilterExpression(const QQmlScriptString& filterScriptString)
{
if (m_filterScriptString == filterScriptString)
return;
m_filterScriptString = filterScriptString;
QQmlContext* context = new QQmlContext(qmlContext(this));
QVariantMap map;
Q_FOREACH (const QByteArray& roleName, roleNames().values())
map.insert(roleName, QVariant());
context->setContextProperty("model", map);
context->setContextProperty("index", -1);
delete(m_filterExpression);
m_filterExpression = new QQmlExpression(m_filterScriptString, context, 0, this);
connect(m_filterExpression, &QQmlExpression::valueChanged, this, &QQmlSortFilterProxyModel::invalidateFilter);
m_filterExpression->setNotifyOnValueChanged(true);
m_filterExpression->evaluate();
emit filterExpressionChanged();
}
const QString& QQmlSortFilterProxyModel::sortRoleName() const
{
return m_sortRoleName;
@ -131,37 +102,6 @@ void QQmlSortFilterProxyModel::setSortOrder(Qt::SortOrder sortOrder)
sort(0, sortOrder);
}
const QQmlScriptString& QQmlSortFilterProxyModel::sortExpression() const
{
return m_compareScriptString;
}
void QQmlSortFilterProxyModel::setSortExpression(const QQmlScriptString& compareScriptString)
{
if (m_compareScriptString == compareScriptString)
return;
m_compareScriptString = compareScriptString;
QQmlContext* context = new QQmlContext(qmlContext(this));
QVariantMap map;
Q_FOREACH (const QByteArray& roleName, roleNames().values())
map.insert(roleName, QVariant());
context->setContextProperty("modelLeft", map);
context->setContextProperty("indexLeft", -1);
context->setContextProperty("modelRight", map);
context->setContextProperty("indexRight", -1);
delete(m_compareExpression);
m_compareExpression = new QQmlExpression(m_compareScriptString, context, 0, this);
connect(m_compareExpression, &QQmlExpression::valueChanged, this, &QQmlSortFilterProxyModel::invalidate);
m_compareExpression->setNotifyOnValueChanged(true);
m_compareExpression->evaluate();
emit sortExpressionChanged();
}
void QQmlSortFilterProxyModel::classBegin()
{
@ -178,42 +118,12 @@ bool QQmlSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelInde
QModelIndex modelIndex = sourceModel()->index(source_row, 0, source_parent);
bool valueAccepted = !m_filterValue.isValid() || ( m_filterValue == sourceModel()->data(modelIndex, filterRole()) );
bool baseAcceptsRow = valueAccepted && QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
if (baseAcceptsRow && !m_filterScriptString.isEmpty())
{
QVariantMap map = modelDataMap(modelIndex);
QQmlContext context(qmlContext(this));
context.setContextProperty("model", map);
context.setContextProperty("index", source_row);
QQmlExpression expression(m_filterScriptString, &context, 0);
QVariant result = expression.evaluate();
if (!expression.hasError())
return result.toBool();
else
qWarning() << expression.error();
}
return baseAcceptsRow;
}
bool QQmlSortFilterProxyModel::lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const
{
if (!m_compareScriptString.isEmpty())
{
QQmlContext context(qmlContext(this));
context.setContextProperty("modelLeft", modelDataMap(source_left));
context.setContextProperty("indexLeft", source_left.row());
context.setContextProperty("modelRight", modelDataMap(source_right));
context.setContextProperty("indexRight", source_right.row());
QQmlExpression expression(m_compareScriptString, &context, 0);
QVariant result = expression.evaluate();
if (!expression.hasError())
return result.toBool();
else
qWarning() << expression.error();
}
return QSortFilterProxyModel::lessThan(source_left, source_right);
}

View File

@ -3,7 +3,6 @@
#include <QSortFilterProxyModel>
#include <QQmlParserStatus>
#include <QQmlExpression>
class QQmlSortFilterProxyModel : public QSortFilterProxyModel, public QQmlParserStatus
{
@ -16,11 +15,9 @@ class QQmlSortFilterProxyModel : public QSortFilterProxyModel, public QQmlParser
Q_PROPERTY(QString filterPattern READ filterPattern WRITE setFilterPattern NOTIFY filterPatternChanged)
Q_PROPERTY(PatternSyntax filterPatternSyntax READ filterPatternSyntax WRITE setFilterPatternSyntax NOTIFY filterPatternSyntaxChanged)
Q_PROPERTY(QVariant filterValue READ filterValue WRITE setFilterValue NOTIFY filterValueChanged)
Q_PROPERTY(QQmlScriptString filterExpression READ filterExpression WRITE setFilterExpression NOTIFY filterExpressionChanged)
Q_PROPERTY(QString sortRoleName READ sortRoleName WRITE setSortRoleName NOTIFY sortRoleNameChanged)
Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder)
Q_PROPERTY(QQmlScriptString sortExpression READ sortExpression WRITE setSortExpression NOTIFY sortExpressionChanged)
public:
enum PatternSyntax {
@ -48,17 +45,11 @@ public:
const QVariant& filterValue() const;
void setFilterValue(const QVariant& filterValue);
const QQmlScriptString& filterExpression() const;
void setFilterExpression(const QQmlScriptString& filterScriptString);
const QString& sortRoleName() const;
void setSortRoleName(const QString& sortRoleName);
void setSortOrder(Qt::SortOrder sortOrder);
const QQmlScriptString& sortExpression() const;
void setSortExpression(const QQmlScriptString& compareScriptString);
void classBegin() override;
void componentComplete() override;
@ -69,10 +60,8 @@ signals:
void filterPatternSyntaxChanged();
void filterPatternChanged();
void filterValueChanged();
void filterExpressionChanged();
void sortRoleNameChanged();
void sortExpressionChanged();
protected:
bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override;
@ -89,15 +78,8 @@ private:
QVariantMap modelDataMap(const QModelIndex& modelIndex) const;
QString m_filterRoleName;
QString m_sortRoleName;
QQmlScriptString m_filterScriptString;
QQmlExpression* m_filterExpression = nullptr;
QQmlScriptString m_compareScriptString;
QQmlExpression* m_compareExpression = nullptr;
QVariant m_filterValue;
QString m_sortRoleName;
bool m_completed = false;
};