|  | Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |

# mysortfilterproxymodel.cpp Example File
itemviews/customsortfiltermodel/mysortfilterproxymodel.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2006-2006 Trolltech ASA. All rights reserved.
        **
        ** This file is part of the example classes of the Qt Toolkit.
        **
        ** Licensees holding valid Qt Preview licenses may use this file in
        ** accordance with the Qt Preview License Agreement provided with the
        ** Software.
        **
        ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
        ** information about Qt Commercial License Agreements.
        **
        ** Contact info@trolltech.com if any conditions of this licensing are
        ** not clear to you.
        **
        ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
        ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        **
        ****************************************************************************/

        #include <QtGui>

        #include "mysortfilterproxymodel.h"

        MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent)
            : QSortFilterProxyModel(parent)
        {
        }

        void MySortFilterProxyModel::setFilterMinimumDate(const QDate &date)
        {
            minDate = date;
            clear();
        }

        void MySortFilterProxyModel::setFilterMaximumDate(const QDate &date)
        {
            maxDate = date;
            clear();
        }

        bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow,
                const QModelIndex &sourceParent) const
        {
            QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
            QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
            QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent);

            return (sourceModel()->data(index0).toString().contains(filterRegExp())
                    || sourceModel()->data(index1).toString().contains(filterRegExp()))
                   && dateInRange(sourceModel()->data(index2).toDate());
        }

        bool MySortFilterProxyModel::lessThan(const QModelIndex &left,
                                              const QModelIndex &right) const
        {
            QVariant leftData = sourceModel()->data(left);
            QVariant rightData = sourceModel()->data(right);

            if (leftData.type() == QVariant::DateTime) {
                return leftData.toDateTime() < rightData.toDateTime();
            } else {
                return QString::localeAwareCompare(leftData.toString(),
                                                   rightData.toString()) < 0;
            }
        }

        bool MySortFilterProxyModel::dateInRange(const QDate &date) const
        {
            return (!minDate.isValid() || date > minDate)
                   && (!maxDate.isValid() || date < maxDate);
        }