From e52a02bb77c5292a016d2c14e0730d44d25d4000 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 10 Mar 2017 21:50:08 +0100 Subject: Simple peoplemodel for addressbook Currently just queries for a flat list of contacts. Read-only. --- framework/domain/peoplemodel.cpp | 101 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 framework/domain/peoplemodel.cpp (limited to 'framework/domain/peoplemodel.cpp') diff --git a/framework/domain/peoplemodel.cpp b/framework/domain/peoplemodel.cpp new file mode 100644 index 00000000..7cc2f3fa --- /dev/null +++ b/framework/domain/peoplemodel.cpp @@ -0,0 +1,101 @@ +/* + Copyright (c) 2016 Michael Bohlender + Copyright (c) 2016 Christian Mollekopf + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. +*/ +#include "peoplemodel.h" + +#include +#include + +PeopleModel::PeopleModel(QObject *parent) + : QSortFilterProxyModel() +{ + using namespace Sink::ApplicationDomain; + + setDynamicSortFilter(true); + sort(0, Qt::DescendingOrder); + Sink::Query query; + query.setFlags(Sink::Query::LiveQuery); + query.request(); + query.request(); + query.request(); + query.request(); + runQuery(query); +} + +PeopleModel::~PeopleModel() +{ + +} + +QHash< int, QByteArray > PeopleModel::roleNames() const +{ + static QHash roles = { + {Name, "name"}, + {Emails, "emails"}, + {Addressbook, "addressbook"}, + {Type, "type"}, + {DomainObject, "domainObject"} + }; + return roles; +} + +QVariant PeopleModel::data(const QModelIndex &idx, int role) const +{ + auto srcIdx = mapToSource(idx); + auto contact = srcIdx.data(Sink::Store::DomainObjectRole).value(); + switch (role) { + case Name: + return contact->getFn(); + case Emails: + return QVariant::fromValue(contact->getEmails()); + case Addressbook: + return contact->getAddressbook(); + case Type: + return "contact"; + case DomainObject: + return QVariant::fromValue(contact); + } + return QSortFilterProxyModel::data(idx, role); +} + +bool PeopleModel::lessThan(const QModelIndex &left, const QModelIndex &right) const +{ + const auto leftName = left.data(Sink::Store::DomainObjectRole).value()->getFn(); + const auto rightName = right.data(Sink::Store::DomainObjectRole).value()->getFn(); + return leftName < rightName; +} + +void PeopleModel::runQuery(const Sink::Query &query) +{ + mModel = Sink::Store::loadModel(query); + setSourceModel(mModel.data()); +} + +void PeopleModel::setAddressbook(const QVariant &parentFolder) +{ + //TODO filter query by addressbook + qWarning() << "The addressbook filter is not yet implemented"; +} + +QVariant PeopleModel::addressbook() const +{ + return QVariant(); +} + + -- cgit v1.2.3