1 /*
2     Copyright (C) 2012 Aleix Pol <aleixpol@kde.org>
3 
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Lesser General Public
6     License as published by the Free Software Foundation; either
7     version 2.1 of the License, or (at your option) any later version.
8 
9     This library is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12     Lesser General Public License for more details.
13 
14     You should have received a copy of the GNU Lesser General Public
15     License along with this library; if not, write to the Free Software
16     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17 */
18 
19 #ifndef PINNEDCONTACTSMODEL_H
20 #define PINNEDCONTACTSMODEL_H
21 
22 #include <QModelIndex>
23 #include <QVector>
24 
25 #include <KTp/types.h>
26 #include <KTp/persistent-contact.h>
27 
28 class ConversationsModel;
29 class PinnedContactsModelPrivate;
30 
31 class PinnedContactsModel : public QAbstractListModel
32 {
33     Q_OBJECT
34 
35     Q_PROPERTY(ConversationsModel *conversations READ conversationsModel WRITE setConversationsModel)
36     Q_PROPERTY(QStringList state READ state WRITE setState NOTIFY stateChanged)
37     Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
38 
39   public:
40     explicit PinnedContactsModel(QObject *parent = nullptr);
41     ~PinnedContactsModel() override;
42 
43     enum role {
44         PresenceIconRole = Qt::UserRole + 1,
45         AvailabilityRole,
46         ContactRole,
47         AccountRole,
48         AlreadyChattingRole
49     };
50 
51     QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
52     QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
53     int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
54 
55     Q_SLOT void setPinning(const Tp::AccountPtr &account, const KTp::ContactPtr &contact, bool newState);
56 
57     QModelIndex indexForContact(const KTp::ContactPtr &contact) const;
58 
59     ConversationsModel* conversationsModel() const;
60     void setConversationsModel(ConversationsModel *model);
61 
62     QStringList state() const;
63     void setState(const QStringList &state);
64 
65   private Q_SLOTS:
66     void contactDataChanged();
67     void contactChanged(const KTp::ContactPtr &contact);
68     void conversationsStateChanged(const QModelIndex &parent, int start, int end);
69 
70   Q_SIGNALS:
71     void countChanged();
72     void stateChanged();
73 
74   private:
75     void appendContactPin(const KTp::PersistentContactPtr &pin);
76     void removeContactPin(const KTp::PersistentContactPtr &pin);
77     PinnedContactsModelPrivate * const d;
78 };
79 
80 #endif // PINNEDCONTACTSMODEL_H
81