Commit d1af84a5 authored by chriadam's avatar chriadam

[qtcontacts-sqlite] Load installed display label generator plugins. Contributes to JB#44742

parent 1db5b4a1
......@@ -31,6 +31,7 @@ This package contains unit tests for the qtcontacts-sqlite-qt5 library.
%files tests
%defattr(-,root,root,-)
/opt/tests/qtcontacts-sqlite-qt5/*
%{_libdir}/qtcontacts-sqlite-qt5/libtestdlgg.so
%package extensions
Summary: QtContacts extension headers for qtcontacts-sqlite-qt5
......@@ -50,7 +51,7 @@ This package contains extension headers for the qtcontacts-sqlite-qt5 library.
%setup -q -n %{name}-%{version}
%build
%qmake5
%qmake5 "VERSION=%{version}"
make %{?_smp_mflags}
%install
......
This diff is collapsed.
......@@ -34,6 +34,7 @@
#include "semaphore_p.h"
#include "contactstransientstore.h"
#include "../extensions/displaylabelgroupgenerator.h"
#include <QHash>
#include <QMutex>
......@@ -42,6 +43,9 @@
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>
#include <QVector>
#include <QContact>
class ContactsDatabase
{
......@@ -148,6 +152,9 @@ public:
bool removeTransientDetails(quint32 contactId);
bool removeTransientDetails(const QList<quint32> &contactIds);
QString determineDisplayLabelGroup(const QContact &c) const;
QStringList displayLabelGroups() const;
static bool execute(QSqlQuery &query);
static bool executeBatch(QSqlQuery &query, QSqlQuery::BatchExecutionMode mode = QSqlQuery::ValuesAsRows);
......@@ -162,8 +169,6 @@ public:
// Output is UTC
static QDateTime fromDateTimeString(const QString &s);
static QString determineDisplayLabelGroup(const QString &firstName, const QString &lastName, const QString &displayLabel);
private:
QSqlDatabase m_database;
ContactsTransientStore m_transientStore;
......@@ -172,6 +177,8 @@ private:
bool m_nonprivileged;
QString m_localeName;
QHash<QString, QSqlQuery> m_preparedQueries;
QVector<QtContactsSqliteExtensions::DisplayLabelGroupGenerator*> m_dlgGenerators;
QScopedPointer<QtContactsSqliteExtensions::DisplayLabelGroupGenerator> m_defaultGenerator;
};
#endif
......@@ -39,6 +39,7 @@
#include "qtcontacts-extensions.h"
#include "qtcontacts-extensions_impl.h"
#include "displaylabelgroupgenerator.h"
#include <QCoreApplication>
#include <QMutex>
......@@ -1182,9 +1183,9 @@ void ContactsEngine::regenerateDisplayLabel(QContact &contact) const
return;
}
const QString group = ContactsDatabase::determineDisplayLabelGroup(contact.detail<QContactName>().firstName(),
contact.detail<QContactName>().lastName(),
label);
QContact tempContact(contact);
setContactDisplayLabel(&tempContact, label, QString());
const QString group = m_database ? m_database->determineDisplayLabelGroup(tempContact) : QString();
setContactDisplayLabel(&contact, label, group);
}
......@@ -1285,6 +1286,11 @@ bool ContactsEngine::removeOOB(const QString &scope)
return writer()->removeOOB(scope, QStringList());
}
QStringList ContactsEngine::displayLabelGroups()
{
return database().displayLabelGroups();
}
bool ContactsEngine::setContactDisplayLabel(QContact *contact, const QString &label, const QString &group)
{
QContactDisplayLabel detail(contact->detail<QContactDisplayLabel>());
......@@ -1406,6 +1412,11 @@ void ContactsEngine::_q_syncContactsChanged(const QStringList &syncTargets)
emit syncContactsChanged(syncTargets);
}
void ContactsEngine::_q_displayLabelGroupsChanged(const QStringList &groups)
{
emit displayLabelGroupsChanged(groups);
}
void ContactsEngine::_q_contactsRemoved(const QVector<quint32> &contactIds)
{
emit contactsRemoved(idList(contactIds));
......
......@@ -165,6 +165,8 @@ public:
QString synthesizedDisplayLabel(const QContact &contact, QContactManager::Error *error) const;
QStringList displayLabelGroups() override;
private slots:
void _q_contactsChanged(const QVector<quint32> &contactIds);
void _q_contactsPresenceChanged(const QVector<quint32> &contactIds);
......@@ -174,6 +176,7 @@ private slots:
void _q_selfContactIdChanged(quint32,quint32);
void _q_relationshipsAdded(const QVector<quint32> &contactIds);
void _q_relationshipsRemoved(const QVector<quint32> &contactIds);
void _q_displayLabelGroupsChanged(const QStringList &groups);
private:
QString databaseUuid();
......
......@@ -5620,7 +5620,7 @@ ContactsDatabase::Query ContactWriter::bindContactDetails(const QContact &contac
QContactDisplayLabel label = contact.detail<QContactDisplayLabel>();
const QString displayLabel = label.label().trimmed();
query.bindValue(0, displayLabel);
query.bindValue(1, ContactsDatabase::determineDisplayLabelGroup(firstName, lastName, displayLabel));
query.bindValue(1, m_database.determineDisplayLabelGroup(contact));
query.bindValue(2, firstName);
query.bindValue(3, firstName.toLower());
......
/*
* Copyright (C) 2019 Jolla Ltd. <chris.adams@jollamobile.com>
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/
#include "defaultdlggenerator.h"
/*
This display label group generator provides the
default (fallback) group generation semantics, and should
be the last generator used (i.e. if no other generator
is valid in the current locale).
The semantics it implements are as follows:
1) if the preferred name field data is empty,
it falls back to display label data to generate the
group.
2) if the first character of the preferred data
is a digit (0..9) then the group is '#'.
3) if the first character of the preferred data
is within 'A'..'Z' it returns that character.
(TODO: perform a unidecode transliteration first.)
4) otherwise, the group is '!'
For example, if the preferred detail is
QContactName::Type and the preferred field is
QContactName::FieldLastName, and the client passes
in a contact with name "John Smith", then the first
letter of the last name (in this case, 'S') will be
returned as the group.
*/
DefaultDlgGenerator::DefaultDlgGenerator(QObject *parent)
: QObject(parent)
{
}
QString DefaultDlgGenerator::name() const
{
return QStringLiteral("default");
}
int DefaultDlgGenerator::priority() const
{
return 0;
}
bool DefaultDlgGenerator::validForLocale(const QLocale &) const
{
return true; // this default plugin is the fallback, and always valid.
}
QStringList DefaultDlgGenerator::displayLabelGroups() const
{
static QStringList groups {
QStringLiteral("A"),
QStringLiteral("B"),
QStringLiteral("C"),
QStringLiteral("D"),
QStringLiteral("E"),
QStringLiteral("F"),
QStringLiteral("G"),
QStringLiteral("H"),
QStringLiteral("I"),
QStringLiteral("J"),
QStringLiteral("K"),
QStringLiteral("L"),
QStringLiteral("M"),
QStringLiteral("N"),
QStringLiteral("O"),
QStringLiteral("P"),
QStringLiteral("Q"),
QStringLiteral("R"),
QStringLiteral("S"),
QStringLiteral("T"),
QStringLiteral("U"),
QStringLiteral("V"),
QStringLiteral("W"),
QStringLiteral("X"),
QStringLiteral("Y"),
QStringLiteral("Z"),
QStringLiteral("#"),
QStringLiteral("!")
};
return groups;
}
QString DefaultDlgGenerator::displayLabelGroup(const QString &data) const
{
QString group;
if (!data.isEmpty()) {
QChar upperChar = data.at(0).toUpper();
ushort val = upperChar.unicode();
if (val >= 'A' && val <= 'Z') {
group = QString(upperChar);
} else if (data.at(0).isDigit()) {
group = QStringLiteral("#");
}
}
if (group.isEmpty()) {
// unknown group. put in "other" group '!'
group = QStringLiteral("!");
}
return group;
}
/*
* Copyright (C) 2019 Jolla Ltd. <chris.adams@jollamobile.com>
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/
#ifndef DEFAULTDLGGENERATOR_H
#define DEFAULTDLGGENERATOR_H
#include <QObject>
#include <displaylabelgroupgenerator.h>
class DefaultDlgGenerator : public QObject, public QtContactsSqliteExtensions::DisplayLabelGroupGenerator
{
Q_OBJECT
Q_INTERFACES(QtContactsSqliteExtensions::DisplayLabelGroupGenerator)
public:
DefaultDlgGenerator(QObject *parent = Q_NULLPTR);
QString name() const Q_DECL_OVERRIDE;
int priority() const Q_DECL_OVERRIDE;
bool validForLocale(const QLocale &locale) const Q_DECL_OVERRIDE;
QString displayLabelGroup(const QString &data) const Q_DECL_OVERRIDE;
QStringList displayLabelGroups() const Q_DECL_OVERRIDE;
};
#endif // DEFAULTDLGGENERATOR_H
......@@ -9,6 +9,9 @@ CONFIG += plugin hide_symbols
PLUGIN_TYPE=contacts
DESTDIR=$${PLUGIN_TYPE}
CONFIG += link_pkgconfig
PKGCONFIG += mlocale5
# we hardcode this for Qt4 as there's no GenericDataLocation offered by QDesktopServices
DEFINES += 'QTCONTACTS_SQLITE_PRIVILEGED_DIR=\'\"privileged\"\''
DEFINES += 'QTCONTACTS_SQLITE_DATABASE_DIR=\'\"Contacts/qtcontacts-sqlite\"\''
......@@ -22,6 +25,7 @@ INCLUDEPATH += \
../extensions
HEADERS += \
defaultdlggenerator.h \
memorytable_p.h \
semaphore_p.h \
trace_p.h \
......@@ -36,6 +40,7 @@ HEADERS += \
../extensions/contactmanagerengine.h
SOURCES += \
defaultdlggenerator.cpp \
memorytable.cpp \
semaphore_p.cpp \
conversion.cpp \
......
......@@ -93,9 +93,12 @@ public:
virtual bool removeOOB(const QString &scope, const QStringList &keys) = 0;
virtual bool removeOOB(const QString &scope) = 0;
virtual QStringList displayLabelGroups() = 0;
Q_SIGNALS:
void contactsPresenceChanged(const QList<QContactId> &contactsIds);
void syncContactsChanged(const QStringList &syncTargets);
void displayLabelGroupsChanged(const QStringList &groups);
protected:
bool m_nonprivileged;
......
/*
* Copyright (C) 2019 Jolla Ltd. <chris.adams@jollamobile.com>
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/
#ifndef DISPLAYLABELGROUPGENERATOR_H
#define DISPLAYLABELGROUPGENERATOR_H
#include <QString>
#include <QStringList>
#include <QLocale>
namespace QtContactsSqliteExtensions {
/*
A display label group generator is able to determine which
"ribbon group" (bucket) a contact should be placed in.
The most common bucket to place a contact in is usually
the first letter of that contact's last name
(so 'John Smith' would be placed into group 'S').
However, for languages other than English, other forms
of grouping are required.
*/
class DisplayLabelGroupGenerator
{
public:
virtual ~DisplayLabelGroupGenerator() {}
virtual QString name() const = 0;
virtual int priority() const = 0; // higher priority will be used before lower priority when generating label groups.
virtual bool validForLocale(const QLocale &locale) const = 0;
virtual QString displayLabelGroup(const QString &data) const = 0;
virtual QStringList displayLabelGroups() const = 0;
};
} // namespace QtContactsSqliteExtensions
#define QtContactsSqliteExtensions_DisplayLabelGroupGeneratorInterface_iid "org.nemomobile.qtcontacts-sqlite.extensions.DisplayLabelGroupGeneratorInterface"
Q_DECLARE_INTERFACE(QtContactsSqliteExtensions::DisplayLabelGroupGenerator, QtContactsSqliteExtensions_DisplayLabelGroupGeneratorInterface_iid)
#endif // DISPLAYLABELGROUPGENERATOR_H
......@@ -3,5 +3,5 @@ includedir=${prefix}/include/qtcontacts-sqlite-qt5-extensions
Name: qtcontacts-sqlite-qt5-extensions
Description: QtContacts extensions implemented by qtcontacts-sqlite-qt5
Version: 0.2.18
Version: 0.2.30
Cflags: -I${includedir}
......@@ -20,5 +20,6 @@ OTHER_FILES = \
extensions/qtcontacts-extensions.h \
extensions/qtcontacts-extensions_impl.h \
extensions/twowaycontactsyncadapter.h \
extensions/twowaycontactsyncadapter_impl.h
extensions/twowaycontactsyncadapter_impl.h \
extensions/displaylabelgroupgenerator.h
TEMPLATE = subdirs
SUBDIRS = qcontactmanager aggregation qcontactmanagerfiltering phonenumber memorytable database
SUBDIRS = \
qcontactmanager \
aggregation \
qcontactmanagerfiltering \
phonenumber \
memorytable \
database \
displaylabelgroups
......@@ -28,6 +28,9 @@ SOURCES += ../../../src/engine/memorytable.cpp
HEADERS += ../../../src/engine/conversion_p.h
SOURCES += ../../../src/engine/conversion.cpp
HEADERS += ../../../src/engine/defaultdlggenerator.h
SOURCES += ../../../src/engine/defaultdlggenerator.cpp
SOURCES += stub_contactsengine.cpp
SOURCES += tst_database.cpp
TEMPLATE=subdirs
SUBDIRS=testplugin test
TARGET = tst_displaylabelgroups
include (../../../common.pri)
SOURCES += tst_displaylabelgroups.cpp
This diff is collapsed.
/*
* Copyright (C) 2019 Jolla Ltd. <chris.adams@jollamobile.com>
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/
#include "testdlggplugin.h"
/*
This test plugin provides a display label group generator
with the following semantics:
1) if the name or display label data is empty,
it returns 'Z' (for "zero-length") as the group.
2) if the name or display label data is greater than
zero but less than six characters in length, it
returns that length as a group
(i.e. '1', '2', '3', '4', or '5').
3) otherwise, if the name or display label data has
an even number of characters it returns 'E' as the
group, else (odd) it returns 'O' as the group.
*/
TestDlgg::TestDlgg(QObject *parent)
: QObject(parent)
{
}
QString TestDlgg::name() const
{
return QStringLiteral("testdlgg");
}
int TestDlgg::priority() const
{
return 1; // test plugin has slightly higher than the default/fallback.
}
bool TestDlgg::validForLocale(const QLocale &locale) const
{
return true; // this test plugin is always "valid".
}
QStringList TestDlgg::displayLabelGroups() const
{
static QStringList allGroups {
QStringLiteral("Z"),
QStringLiteral("1"),
QStringLiteral("2"),
QStringLiteral("3"),
QStringLiteral("4"),
QStringLiteral("5"),
QStringLiteral("E"),
QStringLiteral("O"),
};
return allGroups;
}
QString TestDlgg::displayLabelGroup(const QString &data) const
{
if (data.size() > 5) {
return (data.size() % 2 == 0) ? QStringLiteral("E") : QStringLiteral("O");
}
switch (data.size()) {
case 1: return QStringLiteral("1");
case 2: return QStringLiteral("2");
case 3: return QStringLiteral("3");
case 4: return QStringLiteral("4");
case 5: return QStringLiteral("5");
default: return QStringLiteral("Z");
}
}
/*
* Copyright (C) 2019 Jolla Ltd. <chris.adams@jollamobile.com>
*
* You may use this file under the terms of the BSD license as follows:
*
* "Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Nemo Mobile nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
*/
#ifndef TESTDLGGPLUGIN_H
#define TESTDLGGPLUGIN_H
#include <QObject>
#include <displaylabelgroupgenerator.h>
class TestDlgg : public QObject, QtContactsSqliteExtensions::DisplayLabelGroupGenerator
{
Q_OBJECT
Q_PLUGIN_METADATA(IID QtContactsSqliteExtensions_DisplayLabelGroupGeneratorInterface_iid)
Q_INTERFACES(QtContactsSqliteExtensions::DisplayLabelGroupGenerator)
public:
TestDlgg(QObject *parent = Q_NULLPTR);
QString name() const Q_DECL_OVERRIDE;
int priority() const Q_DECL_OVERRIDE;
bool validForLocale(const QLocale &locale) const Q_DECL_OVERRIDE;
QString displayLabelGroup(const QString &data) const Q_DECL_OVERRIDE;
QStringList displayLabelGroups() const Q_DECL_OVERRIDE;
};
#endif // TESTDLGGPLUGIN_H
TEMPLATE = lib
CONFIG += plugin c++11 link_pkgconfig
INCLUDEPATH += ../../../../src/extensions/
HEADERS = testdlggplugin.h
SOURCES = testdlggplugin.cpp
TARGET = $$qtLibraryTarget(testdlgg)
PLUGIN_TYPE = contacts_dlgg
DESTDIR = $${PLUGIN_TYPE}
PKGCONFIG += Qt5Contacts
target.path = /usr/lib/qtcontacts-sqlite-qt5/
INSTALLS += target
......@@ -3,6 +3,7 @@ include(../config.pri)
QT = \
core \
testlib
TEMPLATE = app
CONFIG -= app_bundle
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment