doc/src/snippets/persistentindexes/model.cpp
changeset 7 f7bc934e204c
equal deleted inserted replaced
3:41300fa6a67c 7:f7bc934e204c
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the documentation of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 /*
       
    43   model.cpp
       
    44 
       
    45   A simple model that uses a QStringList as its data source.
       
    46 */
       
    47 
       
    48 #include <qdebug.h>
       
    49 
       
    50 #include "model.h"
       
    51 
       
    52 /*!
       
    53     Returns the number of items in the string list as the number of rows
       
    54     in the model.
       
    55 */
       
    56 
       
    57 int StringListModel::rowCount(const QModelIndex &parent) const
       
    58 {
       
    59     return stringList.count();
       
    60 }
       
    61 
       
    62 /*!
       
    63     Returns an appropriate value for the requested data.
       
    64     If the view requests an invalid index, an invalid variant is returned.
       
    65     If a header is requested then we just return the column or row number,
       
    66     depending on the orientation of the header.
       
    67     Any valid index that corresponds to a string in the list causes that
       
    68     string to be returned.
       
    69 */
       
    70 
       
    71 QVariant StringListModel::data(const QModelIndex &index, int role) const
       
    72 {
       
    73     if (!index.isValid())
       
    74         return QVariant();
       
    75 
       
    76     if (index.row() < 0 || index.row() >= stringList.size())
       
    77         return QVariant();
       
    78 
       
    79     if (role == Qt::DisplayRole)
       
    80         return stringList.at(index.row());
       
    81     else
       
    82         return QVariant();
       
    83 }
       
    84 
       
    85 /*!
       
    86     Returns the appropriate header string depending on the orientation of
       
    87     the header and the section. If anything other than the display role is
       
    88     requested, we return an invalid variant.
       
    89 */
       
    90 
       
    91 QVariant StringListModel::headerData(int section, Qt::Orientation orientation,
       
    92                                      int role) const
       
    93 {
       
    94     if (role != Qt::DisplayRole)
       
    95         return QVariant();
       
    96 
       
    97     if (orientation == Qt::Horizontal)
       
    98         return QString("Column %1").arg(section);
       
    99     else
       
   100         return QString("Row %1").arg(section);
       
   101 }
       
   102 
       
   103 /*!
       
   104     Returns an appropriate value for the item's flags. Valid items are
       
   105     enabled, selectable, and editable.
       
   106 */
       
   107 
       
   108 Qt::ItemFlags StringListModel::flags(const QModelIndex &index) const
       
   109 {
       
   110     if (!index.isValid())
       
   111         return Qt::ItemIsEnabled;
       
   112 
       
   113     return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
       
   114 }
       
   115 
       
   116 /*!
       
   117     Changes an item in the string list, but only if the following conditions
       
   118     are met:
       
   119 
       
   120     * The index supplied is valid.
       
   121     * The index corresponds to an item to be shown in a view.
       
   122     * The role associated with editing text is specified.
       
   123 
       
   124     The dataChanged() signal is emitted if the item is changed.
       
   125 */
       
   126 
       
   127 bool StringListModel::setData(const QModelIndex &index,
       
   128                               const QVariant &value, int role)
       
   129 {
       
   130     if (index.isValid() && role == Qt::EditRole) {
       
   131 
       
   132         stringList.replace(index.row(), value.toString());
       
   133         emit dataChanged(index, index);
       
   134         return true;
       
   135     }
       
   136     return false;
       
   137 }
       
   138 
       
   139 /*!
       
   140     Inserts a number of rows into the model at the specified position.
       
   141 */
       
   142 
       
   143 bool StringListModel::insertRows(int position, int rows, const QModelIndex &parent)
       
   144 {
       
   145     beginInsertRows(parent, position, position + rows - 1);
       
   146 
       
   147     for (int row = 0; row < rows; ++row) {
       
   148         stringList.insert(position, "");
       
   149     }
       
   150 
       
   151     endInsertRows();
       
   152     return true;
       
   153 }
       
   154 
       
   155 /*!
       
   156     Removes a number of rows from the model at the specified position.
       
   157 */
       
   158 
       
   159 bool StringListModel::removeRows(int position, int rows, const QModelIndex &parent)
       
   160 {
       
   161     beginRemoveRows(parent, position, position + rows - 1);
       
   162 
       
   163     for (int row = 0; row < rows; ++row) {
       
   164         stringList.removeAt(position);
       
   165     }
       
   166 
       
   167     endRemoveRows();
       
   168     return true;
       
   169 }