From cb598949e7311ea02c64178bc982ad7258b269ed Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Mon, 3 Oct 2016 10:30:23 +0200 Subject: [PATCH] feat(app): filter/sorter is provided for any instances --- .../src/components/contacts/ContactModel.cpp | 11 ++++++++ .../src/components/contacts/ContactModel.hpp | 11 +------- .../contacts/ContactsListProxyModel.cpp | 28 +++++++++++++++++-- .../contacts/ContactsListProxyModel.hpp | 10 +++---- tests/src/main.cpp | 3 ++ tests/ui/views/MainWindow/Contacts.qml | 8 +++--- 6 files changed, 49 insertions(+), 22 deletions(-) diff --git a/tests/src/components/contacts/ContactModel.cpp b/tests/src/components/contacts/ContactModel.cpp index 46de9a4f5..3fb88708e 100644 --- a/tests/src/components/contacts/ContactModel.cpp +++ b/tests/src/components/contacts/ContactModel.cpp @@ -1,3 +1,14 @@ #include "ContactModel.hpp" // =================================================================== + +ContactModel::PresenceLevel ContactModel:: getPresenceLevel () const { + if (m_presence == Online) + return Green; + if (m_presence == DoNotDisturb) + return Red; + if (m_presence == Offline) + return White; + + return Orange; +} diff --git a/tests/src/components/contacts/ContactModel.hpp b/tests/src/components/contacts/ContactModel.hpp index 5419fa889..5404710e0 100644 --- a/tests/src/components/contacts/ContactModel.hpp +++ b/tests/src/components/contacts/ContactModel.hpp @@ -100,16 +100,7 @@ private: return m_presence; } - PresenceLevel getPresenceLevel () const { - if (m_presence == Online) - return Green; - if (m_presence == DoNotDisturb) - return Red; - if (m_presence == Offline) - return White; - - return Orange; - } + PresenceLevel getPresenceLevel () const; QStringList getSipAddresses () const { return m_sip_addresses; diff --git a/tests/src/components/contacts/ContactsListProxyModel.cpp b/tests/src/components/contacts/ContactsListProxyModel.cpp index 444b7c561..18ee4b17b 100644 --- a/tests/src/components/contacts/ContactsListProxyModel.cpp +++ b/tests/src/components/contacts/ContactsListProxyModel.cpp @@ -1,17 +1,41 @@ -#include "ContactsListProxyModel.hpp" - #include +#include "ContactsListProxyModel.hpp" + // =================================================================== +ContactsListModel *ContactsListProxyModel::m_list = nullptr; + +ContactsListProxyModel::ContactsListProxyModel (QObject *parent) : QSortFilterProxyModel(parent) { + setSourceModel(m_list); + setDynamicSortFilter(true); + sort(0); +} + +void ContactsListProxyModel::initContactsListModel (ContactsListModel *list) { + if (!m_list) + m_list = list; + else + qWarning() << "Contacts list model already defined."; +} + bool ContactsListProxyModel::filterAcceptsRow (int source_row, const QModelIndex &source_parent) const { QModelIndex index = sourceModel()->index(source_row, 0, source_parent); const ContactModel *contact = qvariant_cast( index.data(ContactsListModel::ContactRole) ); + qDebug() << "A"; + return contact->getUsername().contains( filterRegExp().pattern(), Qt::CaseInsensitive ); } + +bool ContactsListProxyModel::lessThan (const QModelIndex &left, const QModelIndex &right) const { + + qDebug() << "B"; + + return true; +} diff --git a/tests/src/components/contacts/ContactsListProxyModel.hpp b/tests/src/components/contacts/ContactsListProxyModel.hpp index bcb2c50e5..b29fceeb9 100644 --- a/tests/src/components/contacts/ContactsListProxyModel.hpp +++ b/tests/src/components/contacts/ContactsListProxyModel.hpp @@ -11,17 +11,15 @@ class ContactsListProxyModel : public QSortFilterProxyModel { Q_OBJECT; public: - ContactsListProxyModel (QObject *parent = Q_NULLPTR) : QSortFilterProxyModel(parent) { - setSourceModel(&m_list); - setDynamicSortFilter(true); - sort(0); - } + ContactsListProxyModel (QObject *parent = Q_NULLPTR); + static void initContactsListModel (ContactsListModel *list); protected: bool filterAcceptsRow (int source_row, const QModelIndex &source_parent) const; + bool lessThan(const QModelIndex &left, const QModelIndex &right) const; private: - ContactsListModel m_list; + static ContactsListModel *m_list; }; #endif // CONTACTS_LIST_PROXY_MODEL_H diff --git a/tests/src/main.cpp b/tests/src/main.cpp index a25318cb9..3635269ed 100644 --- a/tests/src/main.cpp +++ b/tests/src/main.cpp @@ -51,6 +51,9 @@ void registerTypes () { qmlRegisterUncreatableType( "Linphone", 1, 0, "ContactModel", "ContactModel is uncreatable" ); + + ContactsListProxyModel::initContactsListModel(new ContactsListModel()); + qmlRegisterType("Linphone", 1, 0, "ContactsListModel"); } void addContextProperties (QQmlApplicationEngine &engine) { diff --git a/tests/ui/views/MainWindow/Contacts.qml b/tests/ui/views/MainWindow/Contacts.qml index 5a3004a2d..2fd786abe 100644 --- a/tests/ui/views/MainWindow/Contacts.qml +++ b/tests/ui/views/MainWindow/Contacts.qml @@ -32,9 +32,7 @@ ColumnLayout { } placeholderText: qsTr('searchContactPlaceholder') - Component.onCompleted: ContactsListModel.setFilterRegExp('') - - onTextChanged: ContactsListModel.setFilterRegExp(text) + onTextChanged: contacts.setFilterRegExp(text) } ExclusiveButtons { @@ -62,7 +60,9 @@ ColumnLayout { anchors.fill: parent spacing: 2 - model: ContactsListModel + model: ContactsListModel { + id: contacts + } delegate: Rectangle { id: contact