added RangeFilter

This commit is contained in:
oKcerG 2016-10-12 01:06:01 +02:00
parent 9f97b12e8f
commit 41f61077f1
2 changed files with 66 additions and 0 deletions

View File

@ -203,11 +203,50 @@ bool RegexpFilter::filterRow(const QModelIndex& sourceIndex) const
return m_regExp.indexIn(string) != -1;
}
QVariant RangeFilter::minimumValue() const
{
return m_minimumValue;
}
void RangeFilter::setMinimumValue(QVariant minimumValue)
{
if (m_minimumValue == minimumValue)
return;
m_minimumValue = minimumValue;
emit minimumValueChanged();
emit filterChanged();
}
QVariant RangeFilter::maximumValue() const
{
return m_maximumValue;
}
void RangeFilter::setMaximumValue(QVariant maximumValue)
{
if (m_maximumValue == maximumValue)
return;
m_maximumValue = maximumValue;
emit maximumValueChanged();
emit filterChanged();
}
bool RangeFilter::filterRow(const QModelIndex& sourceIndex) const
{
QVariant value = sourceData(sourceIndex);
bool lessThanMin = m_minimumValue.isValid() && value < m_minimumValue;
bool moreThanMax = m_maximumValue.isValid() && value > m_maximumValue;
return !(lessThanMin || moreThanMax);
}
void registerFilterTypes() {
qmlRegisterUncreatableType<Filter>("SortFilterProxyModel", 0, 2, "Filter", "Filter is an abstract class");
qmlRegisterType<ValueFilter>("SortFilterProxyModel", 0, 2, "ValueFilter");
qmlRegisterType<IndexFilter>("SortFilterProxyModel", 0, 2, "IndexFilter");
qmlRegisterType<RegexpFilter>("SortFilterProxyModel", 0, 2, "RegexpFilter");
qmlRegisterType<RangeFilter>("SortFilterProxyModel", 0, 2, "RangeFilter");
}
Q_COREAPP_STARTUP_FUNCTION(registerFilterTypes)

View File

@ -150,6 +150,33 @@ private:
QString m_pattern = m_regExp.pattern();
};
class RangeFilter : public RoleFilter
{
Q_OBJECT
Q_PROPERTY(QVariant minimumValue READ minimumValue WRITE setMinimumValue NOTIFY minimumValueChanged)
Q_PROPERTY(QVariant maximumValue READ maximumValue WRITE setMaximumValue NOTIFY maximumValueChanged)
public:
using RoleFilter::RoleFilter;
QVariant minimumValue() const;
void setMinimumValue(QVariant minimumValue);
QVariant maximumValue() const;
void setMaximumValue(QVariant maximumValue);
protected:
bool filterRow(const QModelIndex& sourceIndex) const override;
signals:
void minimumValueChanged();
void maximumValueChanged();
private:
QVariant m_minimumValue;
QVariant m_maximumValue;
};
}
#endif // FILTER_H