mirror of
https://github.com/status-im/SortFilterProxyModel.git
synced 2025-02-22 15:48:29 +00:00
added RangeFilter
This commit is contained in:
parent
9f97b12e8f
commit
41f61077f1
39
filter.cpp
39
filter.cpp
@ -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)
|
||||
|
27
filter.h
27
filter.h
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user