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