diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -set(PIM_VERSION "5.11.41") +set(PIM_VERSION "5.11.42") project(KContacts VERSION ${PIM_VERSION}) diff --git a/src/address.h b/src/address.h --- a/src/address.h +++ b/src/address.h @@ -21,12 +21,14 @@ #ifndef KCONTACTS_ADDRESS_H #define KCONTACTS_ADDRESS_H +#include "kcontacts_export.h" +#include "geo.h" + +#include #include #include #include -#include "kcontacts_export.h" - namespace KContacts { class Geo; /** @@ -40,6 +42,21 @@ friend KCONTACTS_EXPORT QDataStream &operator<<(QDataStream &s, const Address &addr); friend KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &s, Address &addr); + Q_GADGET + Q_PROPERTY(QString id READ id WRITE setId) + Q_PROPERTY(bool isEmpty READ isEmpty) + Q_PROPERTY(Type type READ type WRITE setType) + Q_PROPERTY(QString typeLabel READ typeLabel) + Q_PROPERTY(QString postOfficeBox READ postOfficeBox WRITE setPostOfficeBox) + Q_PROPERTY(QString extended READ extended WRITE setExtended) + Q_PROPERTY(QString street READ street WRITE setStreet) + Q_PROPERTY(QString locality READ locality WRITE setLocality) + Q_PROPERTY(QString region READ region WRITE setRegion) + Q_PROPERTY(QString postalCode READ postalCode WRITE setPostalCode) + Q_PROPERTY(QString country READ country WRITE setCountry) + Q_PROPERTY(QString label READ label WRITE setLabel) + Q_PROPERTY(KContacts::Geo geo READ geo WRITE setGeo) + public: /** List of addresses. @@ -60,6 +77,7 @@ }; Q_DECLARE_FLAGS(Type, TypeFlag) + Q_FLAG(Type) /** List of address types. @@ -348,4 +366,6 @@ KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &stream, Address &address); } +Q_DECLARE_METATYPE(KContacts::Address) + #endif diff --git a/src/address.cpp b/src/address.cpp --- a/src/address.cpp +++ b/src/address.cpp @@ -19,7 +19,6 @@ */ #include "address.h" -#include "geo.h" #include "countrytoisomap_data.cpp" #include "isotocountrymap_data.cpp" diff --git a/src/addressee.h b/src/addressee.h --- a/src/addressee.h +++ b/src/addressee.h @@ -83,6 +83,55 @@ friend KCONTACTS_EXPORT QDataStream &operator<<(QDataStream &, const Addressee &); friend KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &, Addressee &); + Q_GADGET + Q_PROPERTY(bool isEmpty READ isEmpty) + Q_PROPERTY(QString uid READ uid WRITE setUid) + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(QString formattedName READ formattedName WRITE setFormattedName) + Q_PROPERTY(QString familyName READ familyName WRITE setFamilyName) + Q_PROPERTY(QString givenName READ givenName WRITE setGivenName) + Q_PROPERTY(QString additionalName READ additionalName WRITE setAdditionalName) + Q_PROPERTY(QString prefix READ prefix WRITE setPrefix) + Q_PROPERTY(QString suffix READ suffix WRITE setSuffix) + Q_PROPERTY(QString nickName READ nickName) + Q_PROPERTY(QDateTime birthday READ birthday) // ### can't set this due to withTime argument + Q_PROPERTY(bool birthdayHasTime READ birthdayHasTime) + Q_PROPERTY(QString mailer READ mailer WRITE setMailer) + Q_PROPERTY(KContacts::Geo geo READ geo WRITE setGeo) + Q_PROPERTY(QString title READ title) + Q_PROPERTY(QString role READ role) + Q_PROPERTY(QString organization READ organization) + Q_PROPERTY(QString department READ department WRITE setDepartment) + Q_PROPERTY(QString note READ note WRITE setNote) + Q_PROPERTY(QString productId READ productId WRITE setProductId) + Q_PROPERTY(QDateTime revision READ revision) + Q_PROPERTY(QString sortString READ sortString WRITE setSortString) + Q_PROPERTY(KContacts::ResourceLocatorUrl url READ url WRITE setUrl) + Q_PROPERTY(QString realName READ realName) + Q_PROPERTY(QString assembledName READ assembledName) + Q_PROPERTY(QString preferredEmail READ preferredEmail) + Q_PROPERTY(QStringList categories READ categories WRITE setCategories) + Q_PROPERTY(QStringList customs READ customs) + Q_PROPERTY(bool changed READ changed WRITE setChanged) + Q_PROPERTY(QDate anniversary READ anniversary WRITE setAnniversary) + Q_PROPERTY(QString assistantsName READ assistantsName WRITE setAssistantsName) + Q_PROPERTY(QString managersName READ managersName WRITE setManagersName) + Q_PROPERTY(QString office READ office WRITE setOffice) + Q_PROPERTY(QString profession READ profession WRITE setProfession) + Q_PROPERTY(QString spousesName READ spousesName WRITE setSpousesName) + + // using variants for QML compatibility, can be changed to proper types once QML supports that + Q_PROPERTY(QVariantList emails READ emailsVariant) + Q_PROPERTY(QVariantList phoneNumbers READ phoneNumbersVariant) + Q_PROPERTY(QVariantList addresses READ addressesVariant) + + // ### the following properties are still missing: + // - logos, photos, sounds + // - keys + // - the list variants for nicks, titles, roles, orgs, urls + // - timezone, secrecy, gender, kind, members, relationships, impps, language + // - field groups, sourceUrls, calendarUrls + public: /** A list of addressee objects @@ -1151,6 +1200,10 @@ void setSpousesName(const QString &spousesName); private: + QVariantList emailsVariant() const; + QVariantList phoneNumbersVariant() const; + QVariantList addressesVariant() const; + class Private; QSharedDataPointer d; }; diff --git a/src/addressee.cpp b/src/addressee.cpp --- a/src/addressee.cpp +++ b/src/addressee.cpp @@ -2661,3 +2661,35 @@ return true; } + +QVariantList Addressee::emailsVariant() const +{ + QVariantList l; + l.reserve(d->mEmails.size()); + std::transform(d->mEmails.constBegin(), d->mEmails.constEnd(), std::back_inserter(l), [](const Email &email) { + return QVariant::fromValue(email); + }); + return l; +} + +QVariantList Addressee::phoneNumbersVariant() const +{ + QVariantList l; + l.reserve(d->mPhoneNumbers.size()); + std::transform(d->mPhoneNumbers.constBegin(), d->mPhoneNumbers.constEnd(), std::back_inserter(l), [](const PhoneNumber &num) { + return QVariant::fromValue(num); + }); + return l; +} + +QVariantList Addressee::addressesVariant() const +{ + QVariantList l; + l.reserve(d->mAddresses.size()); + std::transform(d->mAddresses.constBegin(), d->mAddresses.constEnd(), std::back_inserter(l), [](const Address &addr) { + return QVariant::fromValue(addr); + }); + return l; +} + +#include "moc_addressee.cpp" diff --git a/src/email.h b/src/email.h --- a/src/email.h +++ b/src/email.h @@ -22,9 +22,11 @@ #define EMAIL_H #include "kcontacts_export.h" + +#include +#include #include #include -#include /** @short Class that holds a Email for a contact. * @since 4.14.5 @@ -35,6 +37,11 @@ { friend KCONTACTS_EXPORT QDataStream &operator<<(QDataStream &, const Email &); friend KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &, Email &); + + Q_GADGET + Q_PROPERTY(QString email READ mail WRITE setEmail) + Q_PROPERTY(bool isValid READ isValid) + public: /** * Creates an empty email object. @@ -70,5 +77,6 @@ KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &stream, Email &object); } +Q_DECLARE_METATYPE(KContacts::Email) Q_DECLARE_TYPEINFO(KContacts::Email, Q_MOVABLE_TYPE); #endif // EMAIL_H diff --git a/src/geo.h b/src/geo.h --- a/src/geo.h +++ b/src/geo.h @@ -22,6 +22,8 @@ #define KCONTACTS_GEO_H #include "kcontacts_export.h" + +#include #include #include @@ -36,6 +38,11 @@ friend KCONTACTS_EXPORT QDataStream &operator<<(QDataStream &, const Geo &); friend KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &, Geo &); + Q_GADGET + Q_PROPERTY(float latitude READ latitude WRITE setLatitude) + Q_PROPERTY(float longitude READ longitude WRITE setLongitude) + Q_PROPERTY(bool isValid READ isValid) + public: /** * Creates an invalid geographics position object. @@ -135,5 +142,6 @@ */ KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &stream, Geo &object); } +Q_DECLARE_METATYPE(KContacts::Geo) Q_DECLARE_TYPEINFO(KContacts::Geo, Q_MOVABLE_TYPE); #endif diff --git a/src/phonenumber.h b/src/phonenumber.h --- a/src/phonenumber.h +++ b/src/phonenumber.h @@ -23,10 +23,11 @@ #include "kcontacts_export.h" +#include +#include #include #include #include -#include namespace KContacts { /** @@ -41,6 +42,14 @@ friend KCONTACTS_EXPORT QDataStream &operator<<(QDataStream &, const PhoneNumber &); friend KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &, PhoneNumber &); + Q_GADGET + Q_PROPERTY(QString id READ id WRITE setId) + Q_PROPERTY(QString number READ number WRITE setNumber) + Q_PROPERTY(QString normalizedNumber READ normalizedNumber) + Q_PROPERTY(Type type READ type WRITE setType) + Q_PROPERTY(QString typeLabel READ typeLabel) + Q_PROPERTY(bool isEmpty READ isEmpty) + public: /** Phone number types. @@ -65,6 +74,7 @@ }; Q_DECLARE_FLAGS(Type, TypeFlag) + Q_FLAG(Type) /** * List of phone number types. @@ -240,5 +250,6 @@ */ KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &stream, PhoneNumber &number); } +Q_DECLARE_METATYPE(KContacts::PhoneNumber) Q_DECLARE_TYPEINFO(KContacts::PhoneNumber, Q_MOVABLE_TYPE); #endif diff --git a/src/resourcelocatorurl.h b/src/resourcelocatorurl.h --- a/src/resourcelocatorurl.h +++ b/src/resourcelocatorurl.h @@ -23,10 +23,12 @@ #include "kcontacts_export.h" +#include +#include #include #include -#include -class QUrl; +#include + /** @short Class that holds a Resource Locator * @since 5.0 */ @@ -36,6 +38,11 @@ { friend KCONTACTS_EXPORT QDataStream &operator<<(QDataStream &, const ResourceLocatorUrl &); friend KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &, ResourceLocatorUrl &); + + Q_GADGET + Q_PROPERTY(QUrl url READ url WRITE setUrl) + Q_PROPERTY(bool isValid READ isValid) + public: ResourceLocatorUrl(); @@ -68,6 +75,7 @@ KCONTACTS_EXPORT QDataStream &operator>>(QDataStream &stream, ResourceLocatorUrl &object); } +Q_DECLARE_METATYPE(KContacts::ResourceLocatorUrl) Q_DECLARE_TYPEINFO(KContacts::ResourceLocatorUrl, Q_MOVABLE_TYPE); #endif // RESOURCELOCATORURL_H diff --git a/src/resourcelocatorurl.cpp b/src/resourcelocatorurl.cpp --- a/src/resourcelocatorurl.cpp +++ b/src/resourcelocatorurl.cpp @@ -20,7 +20,6 @@ #include "resourcelocatorurl.h" #include -#include #include #include