Warning, file /network/kdeconnect-kde/smsapp/conversationssortfilterproxymodel.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /** 0002 * SPDX-FileCopyrightText: 2018 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 * SPDX-FileCopyrightText: 2018 Simon Redman <simon@ergotech.com> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0006 */ 0007 0008 #ifndef CONVERSATIONSSORTFILTERPROXYMODEL_H 0009 #define CONVERSATIONSSORTFILTERPROXYMODEL_H 0010 0011 #include <QLoggingCategory> 0012 #include <QQmlParserStatus> 0013 #include <QSortFilterProxyModel> 0014 0015 Q_DECLARE_LOGGING_CATEGORY(KDECONNECT_SMS_CONVERSATIONS_SORT_FILTER_PROXY_MODEL) 0016 0017 class ConversationsSortFilterProxyModel : public QSortFilterProxyModel, public QQmlParserStatus 0018 { 0019 Q_OBJECT 0020 Q_INTERFACES(QQmlParserStatus) 0021 Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder) 0022 public: 0023 Qt::SortOrder sortOrder() const 0024 { 0025 return m_sortOrder; 0026 } 0027 void setSortOrder(Qt::SortOrder sortOrder) 0028 { 0029 if (m_sortOrder != sortOrder) { 0030 m_sortOrder = sortOrder; 0031 sortNow(); 0032 } 0033 } 0034 void classBegin() override 0035 { 0036 } 0037 void componentComplete() override 0038 { 0039 m_completed = true; 0040 sortNow(); 0041 } 0042 0043 Q_INVOKABLE void setConversationsFilterRole(int role); 0044 0045 /** 0046 * This method gets name of conversations or contact if it find any matching address 0047 * Needed to check if the conversation or contact already exist or no before adding an arbitrary contact 0048 */ 0049 Q_INVOKABLE bool doesAddressExists(const QString &address); 0050 0051 ConversationsSortFilterProxyModel(); 0052 ~ConversationsSortFilterProxyModel() override; 0053 0054 protected: 0055 bool lessThan(const QModelIndex &leftIndex, const QModelIndex &rightIndex) const override; 0056 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; 0057 0058 private: 0059 void sortNow() 0060 { 0061 if (m_completed && dynamicSortFilter()) 0062 sort(0, m_sortOrder); 0063 } 0064 0065 bool m_completed = false; 0066 Qt::SortOrder m_sortOrder = Qt::AscendingOrder; 0067 }; 0068 0069 #endif // CONVERSATIONSSORTFILTERPROXYMODEL_H