71void QQmlRangeFilter::setMinimum(
const QVariant &minimum)
75 QVariant minValue = minimum;
76 bool minInclusive =
true;
77 if (minimum.metaType() == QMetaType::fromType<QQmlRangeFilter::RangeExclusiveBoundary>()) {
78 minValue = minimum.value<QQmlRangeFilter::RangeExclusiveBoundary>().value;
81 if (d->m_minimum == minValue && d->m_minimumInclusive == minInclusive)
83 d->m_minimum = minValue;
84 d->m_minimumInclusive = minInclusive;
85 emit minimumChanged();
116void QQmlRangeFilter::setMaximum(
const QVariant &maximum)
118 Q_D(QQmlRangeFilter);
119 QVariant maxValue = maximum;
120 bool maxInclusive =
true;
121 if (maximum.metaType() == QMetaType::fromType<QQmlRangeFilter::RangeExclusiveBoundary>()) {
122 maxValue = maximum.value<QQmlRangeFilter::RangeExclusiveBoundary>().value;
123 maxInclusive =
false;
125 d->m_maximum = maxValue;
126 d->m_maximumInclusive = maxInclusive;
127 emit maximumChanged();
163bool QQmlRangeFilter::filterAcceptsRowInternal(
int row,
const QModelIndex &sourceParent,
164 const QQmlSortFilterProxyModel *proxyModel)
const
166 Q_D(
const QQmlRangeFilter);
167 if (d->m_roleName.isEmpty())
170 const int role = itemRole(proxyModel);
172 if (!d->m_roleNameValidated) {
173 qWarning(
"Provided role name %s doesn't exist in the model",
174 d->m_roleName.toUtf8().constData());
175 d->m_roleNameValidated =
true;
180 const bool isMinimumSet = d->m_minimum.isValid() && !d->m_minimum.isNull();
181 const bool isMaximumSet = d->m_maximum.isValid() && !d->m_maximum.isNull();
183 if (!isMinimumSet && !isMaximumSet)
186 auto filterData = [&](
const QVariant &value) ->
bool {
187 if (!value.isValid())
189 auto *pModel =
const_cast<QQmlSortFilterProxyModel *>(proxyModel);
191 const auto order = pModel->compareData(value, d->m_minimum);
192 if (d->m_minimumInclusive ? order == Qt::weak_ordering::less :
193 order != Qt::weak_ordering::greater)
197 const auto order = pModel->compareData(value, d->m_maximum);
198 if (d->m_maximumInclusive ? order == Qt::weak_ordering::greater :
199 order != Qt::weak_ordering::less)
206 const QModelIndex &index = proxyModel->sourceModel()->index(row, column(), sourceParent);
207 return filterData(proxyModel->sourceModel()->data(index, role));
209 const int columnCount = proxyModel->sourceModel()->columnCount(sourceParent);
210 for (
int col = 0; col < columnCount; ++col) {
211 const QModelIndex &index = proxyModel->sourceModel()->index(row, col, sourceParent);
212 if (filterData(proxyModel->sourceModel()->data(index, role)))