source: trunk/demos/interview/model.cpp@ 846

Last change on this file since 846 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 4.6 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the demonstration applications of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
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** 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 have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "model.h"
43#include <QIcon>
44#include <QPixmap>
45
46Model::Model(int rows, int columns, QObject *parent)
47 : QAbstractItemModel(parent),
48 services(QPixmap(":/images/services.png")),
49 rc(rows), cc(columns),
50 tree(new QVector<Node>(rows, Node(0)))
51{
52
53}
54
55Model::~Model()
56{
57 delete tree;
58}
59
60QModelIndex Model::index(int row, int column, const QModelIndex &parent) const
61{
62 if (row < rc && row >= 0 && column < cc && column >= 0) {
63 Node *p = static_cast<Node*>(parent.internalPointer());
64 Node *n = node(row, p);
65 if (n)
66 return createIndex(row, column, n);
67 }
68 return QModelIndex();
69}
70
71QModelIndex Model::parent(const QModelIndex &child) const
72{
73 if (child.isValid()) {
74 Node *n = static_cast<Node*>(child.internalPointer());
75 Node *p = parent(n);
76 if (p)
77 return createIndex(row(p), 0, p);
78 }
79 return QModelIndex();
80}
81
82int Model::rowCount(const QModelIndex &parent) const
83{
84 return (parent.isValid() && parent.column() != 0) ? 0 : rc;
85}
86
87int Model::columnCount(const QModelIndex &parent) const
88{
89 Q_UNUSED(parent);
90 return cc;
91}
92
93QVariant Model::data(const QModelIndex &index, int role) const
94{
95 if (!index.isValid())
96 return QVariant();
97 if (role == Qt::DisplayRole)
98 return "Item " + QString::number(index.row()) + ":" + QString::number(index.column());
99 if (role == Qt::DecorationRole) {
100 if (index.column() == 0)
101 return iconProvider.icon(QFileIconProvider::Folder);
102 return iconProvider.icon(QFileIconProvider::File);
103 }
104 return QVariant();
105}
106
107QVariant Model::headerData(int section, Qt::Orientation orientation, int role) const
108{
109 if (role == Qt::DisplayRole)
110 return QString::number(section);
111 if (role == Qt::DecorationRole)
112 return qVariantFromValue(services);
113 return QAbstractItemModel::headerData(section, orientation, role);
114}
115
116bool Model::hasChildren(const QModelIndex &parent) const
117{
118 if (parent.isValid() && parent.column() != 0)
119 return false;
120 return rc > 0 && cc > 0;
121}
122
123Qt::ItemFlags Model::flags(const QModelIndex &index) const
124{
125 if (!index.isValid())
126 return 0;
127 return (Qt::ItemIsDragEnabled|Qt::ItemIsSelectable|Qt::ItemIsEnabled);
128}
129
130Model::Node *Model::node(int row, Node *parent) const
131{
132 if (parent && !parent->children)
133 parent->children = new QVector<Node>(rc, Node(parent));
134 QVector<Node> *v = parent ? parent->children : tree;
135 return const_cast<Node*>(&(v->at(row)));
136}
137
138Model::Node *Model::parent(Node *child) const
139{
140 return child ? child->parent : 0;
141}
142
143int Model::row(Node *node) const
144{
145 const Node *first = node->parent ? &(node->parent->children->at(0)) : &(tree->at(0));
146 return (node - first);
147}
Note: See TracBrowser for help on using the repository browser.