1 | /*************************************************************************** |
2 | * Copyright (C) 2005-2014 by the Quassel Project * |
3 | * devel@quassel-irc.org * |
4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) version 3. * |
9 | * * |
10 | * This program is distributed in the hope that it will be useful, * |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
13 | * GNU General Public License for more details. * |
14 | * * |
15 | * You should have received a copy of the GNU General Public License * |
16 | * along with this program; if not, write to the * |
17 | * Free Software Foundation, Inc., * |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * |
19 | ***************************************************************************/ |
20 | |
21 | #ifndef COREACCOUNTMODEL_H_ |
22 | #define COREACCOUNTMODEL_H_ |
23 | |
24 | #include <QAbstractListModel> |
25 | #include <QUuid> |
26 | |
27 | #include "coreaccount.h" |
28 | |
29 | class CoreAccountModel : public QAbstractListModel |
30 | { |
31 | Q_OBJECT |
32 | |
33 | public: |
34 | enum { |
35 | AccountIdRole = Qt::UserRole, |
36 | UuidRole |
37 | }; |
38 | |
39 | CoreAccountModel(QObject *parent = 0); |
40 | CoreAccountModel(const CoreAccountModel *other, QObject *parent = 0); |
41 | |
42 | inline int rowCount(const QModelIndex &parent = QModelIndex()) const; |
43 | virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; |
44 | |
45 | CoreAccount account(const QModelIndex &) const; |
46 | CoreAccount account(AccountId) const; |
47 | QList<CoreAccount> accounts() const; |
48 | QList<AccountId> accountIds() const; |
49 | QModelIndex accountIndex(AccountId id) const; |
50 | |
51 | inline AccountId internalAccount() const; |
52 | |
53 | AccountId createOrUpdateAccount(const CoreAccount &newAccountData); |
54 | CoreAccount takeAccount(AccountId); |
55 | void removeAccount(AccountId); |
56 | |
57 | void update(const CoreAccountModel *other); |
58 | |
59 | bool operator==(const CoreAccountModel &other) const; |
60 | |
61 | public slots: |
62 | void save(); |
63 | void load(); |
64 | void clear(); |
65 | |
66 | protected: |
67 | void insertAccount(const CoreAccount &); |
68 | int findAccountIdx(AccountId) const; |
69 | |
70 | private: |
71 | int listIndex(AccountId); |
72 | |
73 | QList<CoreAccount> _accounts; |
74 | QSet<AccountId> _removedAccounts; |
75 | AccountId _internalAccount; |
76 | }; |
77 | |
78 | |
79 | // Inlines |
80 | int CoreAccountModel::rowCount(const QModelIndex &) const |
81 | { |
82 | return _accounts.count(); |
83 | } |
84 | |
85 | |
86 | AccountId CoreAccountModel::internalAccount() const |
87 | { |
88 | return _internalAccount; |
89 | } |
90 | |
91 | |
92 | #endif |
93 | |