1/****************************************************************************
2**
3** Copyright (C) 2017 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the examples of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:BSD$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** BSD License Usage
18** Alternatively, you may use this file under the terms of the BSD license
19** as follows:
20**
21** "Redistribution and use in source and binary forms, with or without
22** modification, are permitted provided that the following conditions are
23** met:
24** * Redistributions of source code must retain the above copyright
25** notice, this list of conditions and the following disclaimer.
26** * Redistributions in binary form must reproduce the above copyright
27** notice, this list of conditions and the following disclaimer in
28** the documentation and/or other materials provided with the
29** distribution.
30** * Neither the name of The Qt Company Ltd nor the names of its
31** contributors may be used to endorse or promote products derived
32** from this software without specific prior written permission.
33**
34**
35** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
38** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
42** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
43** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
44** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
45** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
46**
47** $QT_END_LICENSE$
48**
49****************************************************************************/
50
51#include "contactmodel.h"
52
53ContactModel::ContactModel(QObject *parent ) : QAbstractListModel(parent)
54{
55 m_contacts.append(t: { .fullName: "Angel Hogan", .address: "Chapel St. 368 ", .city: "Clearwater" , .number: "0311 1823993" });
56 m_contacts.append(t: { .fullName: "Felicia Patton", .address: "Annadale Lane 2", .city: "Knoxville" , .number: "0368 1244494" });
57 m_contacts.append(t: { .fullName: "Grant Crawford", .address: "Windsor Drive 34", .city: "Riverdale" , .number: "0351 7826892" });
58 m_contacts.append(t: { .fullName: "Gretchen Little", .address: "Sunset Drive 348", .city: "Virginia Beach" , .number: "0343 1234991" });
59 m_contacts.append(t: { .fullName: "Geoffrey Richards", .address: "University Lane 54", .city: "Trussville" , .number: "0423 2144944" });
60 m_contacts.append(t: { .fullName: "Henrietta Chavez", .address: "Via Volto San Luca 3", .city: "Piobesi Torinese" , .number: "0399 2826994" });
61 m_contacts.append(t: { .fullName: "Harvey Chandler", .address: "North Squaw Creek 11", .city: "Madisonville" , .number: "0343 1244492" });
62 m_contacts.append(t: { .fullName: "Miguel Gomez", .address: "Wild Rose Street 13", .city: "Trussville" , .number: "0343 9826996" });
63 m_contacts.append(t: { .fullName: "Norma Rodriguez", .address: " Glen Eagles Street 53", .city: "Buffalo" , .number: "0241 5826596" });
64 m_contacts.append(t: { .fullName: "Shelia Ramirez", .address: "East Miller Ave 68", .city: "Pickerington" , .number: "0346 4844556" });
65 m_contacts.append(t: { .fullName: "Stephanie Moss", .address: "Piazza Trieste e Trento 77", .city: "Roata Chiusani" , .number: "0363 0510490" });
66}
67
68int ContactModel::rowCount(const QModelIndex &) const
69{
70 return m_contacts.count();
71}
72
73QVariant ContactModel::data(const QModelIndex &index, int role) const
74{
75 if (index.row() < rowCount())
76 switch (role) {
77 case FullNameRole: return m_contacts.at(i: index.row()).fullName;
78 case AddressRole: return m_contacts.at(i: index.row()).address;
79 case CityRole: return m_contacts.at(i: index.row()).city;
80 case NumberRole: return m_contacts.at(i: index.row()).number;
81 default: return QVariant();
82 }
83 return QVariant();
84}
85
86QHash<int, QByteArray> ContactModel::roleNames() const
87{
88 static const QHash<int, QByteArray> roles {
89 { FullNameRole, "fullName" },
90 { AddressRole, "address" },
91 { CityRole, "city" },
92 { NumberRole, "number" }
93 };
94 return roles;
95}
96
97QVariantMap ContactModel::get(int row) const
98{
99 const Contact contact = m_contacts.value(i: row);
100 return { {"fullName", contact.fullName}, {"address", contact.address}, {"city", contact.city}, {"number", contact.number} };
101}
102
103void ContactModel::append(const QString &fullName, const QString &address, const QString &city, const QString &number)
104{
105 int row = 0;
106 while (row < m_contacts.count() && fullName > m_contacts.at(i: row).fullName)
107 ++row;
108 beginInsertRows(parent: QModelIndex(), first: row, last: row);
109 m_contacts.insert(i: row, t: {.fullName: fullName, .address: address, .city: city, .number: number});
110 endInsertRows();
111}
112
113void ContactModel::set(int row, const QString &fullName, const QString &address, const QString &city, const QString &number)
114{
115 if (row < 0 || row >= m_contacts.count())
116 return;
117
118 m_contacts.replace(i: row, t: { .fullName: fullName, .address: address, .city: city, .number: number });
119 dataChanged(topLeft: index(row, column: 0), bottomRight: index(row, column: 0), roles: { FullNameRole, AddressRole, CityRole, NumberRole });
120}
121
122void ContactModel::remove(int row)
123{
124 if (row < 0 || row >= m_contacts.count())
125 return;
126
127 beginRemoveRows(parent: QModelIndex(), first: row, last: row);
128 m_contacts.removeAt(i: row);
129 endRemoveRows();
130}
131

source code of qtquickcontrols2/examples/quickcontrols2/contactlist/contactmodel.cpp