insilmaril@804: //#include insilmaril@795: insilmaril@795: #include "mysortfilterproxymodel.h" insilmaril@795: insilmaril@795: MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent) insilmaril@795: : QSortFilterProxyModel(parent) insilmaril@795: { insilmaril@795: } insilmaril@802: //! [0] insilmaril@802: insilmaril@804: /* insilmaril@802: //! [1] insilmaril@795: void MySortFilterProxyModel::setFilterMinimumDate(const QDate &date) insilmaril@795: { insilmaril@795: minDate = date; insilmaril@795: invalidateFilter(); insilmaril@795: } insilmaril@802: //! [1] insilmaril@802: insilmaril@802: //! [2] insilmaril@795: void MySortFilterProxyModel::setFilterMaximumDate(const QDate &date) insilmaril@795: { insilmaril@795: maxDate = date; insilmaril@795: invalidateFilter(); insilmaril@795: } insilmaril@804: */ insilmaril@795: insilmaril@822: bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow, // FIXME-3 find a way to show _all_ rows which match, independent of parent insilmaril@795: const QModelIndex &sourceParent) const insilmaril@795: { insilmaril@795: QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent); insilmaril@795: QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent); insilmaril@802: QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent); insilmaril@795: insilmaril@802: return (sourceModel()->data(index0).toString().contains(filterRegExp()) insilmaril@804: || sourceModel()->data(index1).toString().contains(filterRegExp())); insilmaril@804: // && dateInRange(sourceModel()->data(index2).toDate()); insilmaril@795: } insilmaril@795: insilmaril@804: /* insilmaril@795: bool MySortFilterProxyModel::lessThan(const QModelIndex &left, insilmaril@795: const QModelIndex &right) const insilmaril@795: { insilmaril@795: QVariant leftData = sourceModel()->data(left); insilmaril@795: QVariant rightData = sourceModel()->data(right); insilmaril@802: //! [4] insilmaril@802: insilmaril@802: //! [6] insilmaril@795: if (leftData.type() == QVariant::DateTime) { insilmaril@795: return leftData.toDateTime() < rightData.toDateTime(); insilmaril@795: } else { insilmaril@795: QRegExp *emailPattern = new QRegExp("([\\w\\.]*@[\\w\\.]*)"); insilmaril@795: insilmaril@795: QString leftString = leftData.toString(); insilmaril@795: if(left.column() == 1 && emailPattern->indexIn(leftString) != -1) insilmaril@795: leftString = emailPattern->cap(1); insilmaril@795: insilmaril@795: QString rightString = rightData.toString(); insilmaril@795: if(right.column() == 1 && emailPattern->indexIn(rightString) != -1) insilmaril@795: rightString = emailPattern->cap(1); insilmaril@795: insilmaril@795: return QString::localeAwareCompare(leftString, rightString) < 0; insilmaril@795: } insilmaril@795: } insilmaril@802: //! [5] //! [6] insilmaril@802: insilmaril@802: //! [7] insilmaril@795: bool MySortFilterProxyModel::dateInRange(const QDate &date) const insilmaril@795: { insilmaril@795: return (!minDate.isValid() || date > minDate) insilmaril@795: && (!maxDate.isValid() || date < maxDate); insilmaril@795: } insilmaril@802: //! [7] insilmaril@804: */