mysortfilterproxymodel.cpp
author insilmaril
Fri, 02 Oct 2009 13:24:55 +0000
changeset 802 f076fdec767d
parent 795 6b0a5f4923d3
child 804 14f2b1b15242
permissions -rw-r--r--
More fixes for using proxy
     1 /****************************************************************************
     2 **
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     4 ** Contact: Nokia Corporation (qt-info@nokia.com)
     5 **
     6 ** This file is part of the examples of the Qt Toolkit.
     7 **
     8 ** $QT_BEGIN_LICENSE:LGPL$
     9 ** Commercial Usage
    10 ** Licensees holding valid Qt Commercial licenses may use this file in
    11 ** accordance with the Qt Commercial License Agreement provided with the
    12 ** Software or, alternatively, in accordance with the terms contained in
    13 ** a written agreement between you and Nokia.
    14 **
    15 ** GNU Lesser General Public License Usage
    16 ** Alternatively, this file may be used under the terms of the GNU Lesser
    17 ** General Public License version 2.1 as published by the Free Software
    18 ** Foundation and appearing in the file LICENSE.LGPL included in the
    19 ** packaging of this file.  Please review the following information to
    20 ** ensure the GNU Lesser General Public License version 2.1 requirements
    21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    22 **
    23 ** In addition, as a special exception, Nokia gives you certain
    24 ** additional rights. These rights are described in the Nokia Qt LGPL
    25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
    26 ** package.
    27 **
    28 ** GNU General Public License Usage
    29 ** Alternatively, this file may be used under the terms of the GNU
    30 ** General Public License version 3.0 as published by the Free Software
    31 ** Foundation and appearing in the file LICENSE.GPL included in the
    32 ** packaging of this file.  Please review the following information to
    33 ** ensure the GNU General Public License version 3.0 requirements will be
    34 ** met: http://www.gnu.org/copyleft/gpl.html.
    35 **
    36 ** If you are unsure which license is appropriate for your use, please
    37 ** contact the sales department at http://www.qtsoftware.com/contact.
    38 ** $QT_END_LICENSE$
    39 **
    40 ****************************************************************************/
    41 
    42 #include <QtGui>
    43 
    44 #include "mysortfilterproxymodel.h"
    45 
    46 //! [0]
    47 MySortFilterProxyModel::MySortFilterProxyModel(QObject *parent)
    48     : QSortFilterProxyModel(parent)
    49 {
    50 }
    51 //! [0]
    52 
    53 //! [1]
    54 void MySortFilterProxyModel::setFilterMinimumDate(const QDate &date)
    55 {
    56     minDate = date;
    57     invalidateFilter();
    58 }
    59 //! [1]
    60 
    61 //! [2]
    62 void MySortFilterProxyModel::setFilterMaximumDate(const QDate &date)
    63 {
    64     maxDate = date;
    65     invalidateFilter();
    66 }
    67 //! [2]
    68 
    69 //! [3]
    70 bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow,
    71         const QModelIndex &sourceParent) const
    72 {
    73     QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
    74     QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
    75     QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent);
    76 
    77     return (sourceModel()->data(index0).toString().contains(filterRegExp())
    78             || sourceModel()->data(index1).toString().contains(filterRegExp()))
    79            && dateInRange(sourceModel()->data(index2).toDate());
    80 }
    81 //! [3]
    82 
    83 //! [4] //! [5]
    84 bool MySortFilterProxyModel::lessThan(const QModelIndex &left,
    85                                       const QModelIndex &right) const
    86 {
    87     QVariant leftData = sourceModel()->data(left);
    88     QVariant rightData = sourceModel()->data(right);
    89 //! [4]
    90 
    91 //! [6]
    92     if (leftData.type() == QVariant::DateTime) {
    93         return leftData.toDateTime() < rightData.toDateTime();
    94     } else {
    95         QRegExp *emailPattern = new QRegExp("([\\w\\.]*@[\\w\\.]*)");
    96 
    97         QString leftString = leftData.toString();
    98         if(left.column() == 1 && emailPattern->indexIn(leftString) != -1)
    99             leftString = emailPattern->cap(1);
   100 
   101         QString rightString = rightData.toString();
   102         if(right.column() == 1 && emailPattern->indexIn(rightString) != -1)
   103             rightString = emailPattern->cap(1);
   104 
   105         return QString::localeAwareCompare(leftString, rightString) < 0;
   106     }
   107 }
   108 //! [5] //! [6]
   109 
   110 //! [7]
   111 bool MySortFilterProxyModel::dateInRange(const QDate &date) const
   112 {
   113     return (!minDate.isValid() || date > minDate)
   114            && (!maxDate.isValid() || date < maxDate);
   115 }
   116 //! [7]