/**************************************************************************** ** ** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtLocation module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QDECLARATIVEPLACE_P_H #define QDECLARATIVEPLACE_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QPlaceReply; class QPlaceManager; class QPlaceSupplier; class QDeclarativeContactDetails; class Q_LOCATION_PRIVATE_EXPORT QDeclarativePlace : public QObject, public QQmlParserStatus { Q_OBJECT Q_ENUMS(Status Visibility) Q_PROPERTY(QPlace place READ place WRITE setPlace) Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged) Q_PROPERTY(QQmlListProperty categories READ categories NOTIFY categoriesChanged) Q_PROPERTY(QDeclarativeGeoLocation *location READ location WRITE setLocation NOTIFY locationChanged) Q_PROPERTY(QPlaceRatings ratings READ ratings WRITE setRatings NOTIFY ratingsChanged) Q_PROPERTY(QPlaceSupplier supplier READ supplier WRITE setSupplier NOTIFY supplierChanged) Q_PROPERTY(QPlaceIcon icon READ icon WRITE setIcon NOTIFY iconChanged) Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(QString placeId READ placeId WRITE setPlaceId NOTIFY placeIdChanged) Q_PROPERTY(QString attribution READ attribution WRITE setAttribution NOTIFY attributionChanged) Q_PROPERTY(QDeclarativePlaceReviewModel *reviewModel READ reviewModel NOTIFY reviewModelChanged) Q_PROPERTY(QDeclarativePlaceImageModel *imageModel READ imageModel NOTIFY imageModelChanged) Q_PROPERTY(QDeclarativePlaceEditorialModel *editorialModel READ editorialModel NOTIFY editorialModelChanged) Q_PROPERTY(QObject *extendedAttributes READ extendedAttributes NOTIFY extendedAttributesChanged) Q_PROPERTY(QDeclarativeContactDetails *contactDetails READ contactDetails NOTIFY contactDetailsChanged) Q_PROPERTY(bool detailsFetched READ detailsFetched NOTIFY detailsFetchedChanged) Q_PROPERTY(Status status READ status NOTIFY statusChanged) Q_PROPERTY(QString primaryPhone READ primaryPhone NOTIFY primaryPhoneChanged) Q_PROPERTY(QString primaryFax READ primaryFax NOTIFY primaryFaxChanged) Q_PROPERTY(QString primaryEmail READ primaryEmail NOTIFY primaryEmailChanged) Q_PROPERTY(QUrl primaryWebsite READ primaryWebsite NOTIFY primaryWebsiteChanged) Q_PROPERTY(Visibility visibility READ visibility WRITE setVisibility NOTIFY visibilityChanged) Q_PROPERTY(QDeclarativePlace *favorite READ favorite WRITE setFavorite NOTIFY favoriteChanged) Q_INTERFACES(QQmlParserStatus) public: explicit QDeclarativePlace(QObject *parent = nullptr); QDeclarativePlace(const QPlace &src, QDeclarativeGeoServiceProvider *plugin, QObject *parent = nullptr); ~QDeclarativePlace(); enum Status {Ready, Saving, Fetching, Removing, Error}; enum Visibility { UnspecifiedVisibility = QLocation::UnspecifiedVisibility, DeviceVisibility = QLocation::DeviceVisibility, PrivateVisibility = QLocation::PrivateVisibility, PublicVisibility = QLocation::PublicVisibility }; //From QQmlParserStatus void classBegin() override {} void componentComplete() override; void setPlugin(QDeclarativeGeoServiceProvider *plugin); QDeclarativeGeoServiceProvider *plugin() const; QDeclarativePlaceReviewModel *reviewModel(); QDeclarativePlaceImageModel *imageModel(); QDeclarativePlaceEditorialModel *editorialModel(); QPlace place() const; void setPlace(const QPlace &src); QQmlListProperty categories(); static void category_append(QQmlListProperty *prop, QDeclarativeCategory *value); static qsizetype category_count(QQmlListProperty *prop); static QDeclarativeCategory *category_at(QQmlListProperty *prop, qsizetype index); static void category_clear(QQmlListProperty *prop); QDeclarativeGeoLocation *location() const; void setLocation(QDeclarativeGeoLocation *location); QPlaceRatings ratings() const; void setRatings(const QPlaceRatings &ratings); QPlaceSupplier supplier() const; void setSupplier(const QPlaceSupplier &supplier); QPlaceIcon icon() const; void setIcon(const QPlaceIcon &icon); QString name() const; void setName(const QString &name); QString placeId() const; void setPlaceId(const QString &placeId); QString attribution() const; void setAttribution(const QString &attribution); bool detailsFetched() const; Status status() const; void setStatus(Status status, const QString &errorString = QString()); Q_INVOKABLE void getDetails(); Q_INVOKABLE void save(); Q_INVOKABLE void remove(); Q_INVOKABLE QString errorString() const; QString primaryPhone() const; QString primaryFax() const; QString primaryEmail() const; QUrl primaryWebsite() const; QQmlPropertyMap *extendedAttributes() const; QDeclarativeContactDetails *contactDetails() const; Visibility visibility() const; void setVisibility(Visibility visibility); QDeclarativePlace *favorite() const; void setFavorite(QDeclarativePlace *favorite); Q_INVOKABLE void copyFrom(QDeclarativePlace *original); Q_INVOKABLE void initializeFavorite(QDeclarativeGeoServiceProvider *plugin); Q_SIGNALS: void pluginChanged(); void categoriesChanged(); void locationChanged(); void ratingsChanged(); void supplierChanged(); void iconChanged(); void nameChanged(); void placeIdChanged(); void attributionChanged(); void detailsFetchedChanged(); void reviewModelChanged(); void imageModelChanged(); void editorialModelChanged(); void primaryPhoneChanged(); void primaryFaxChanged(); void primaryEmailChanged(); void primaryWebsiteChanged(); void extendedAttributesChanged(); void contactDetailsChanged(); void statusChanged(); void visibilityChanged(); void favoriteChanged(); private Q_SLOTS: void finished(); void contactsModified(const QString &, const QVariant &); void pluginReady(); void cleanupDeletedCategories(); private: void synchronizeCategories(); void pullExtendedAttributes(); void synchronizeContacts(); void primarySignalsEmission(const QString &type = QString()); QString primaryValue(const QString &contactType) const; private: QPlaceManager *manager(); QList m_categories; QDeclarativeGeoLocation *m_location = nullptr; QPlaceRatings m_ratings; QPlaceSupplier m_supplier; QPlaceIcon m_icon; QDeclarativePlaceReviewModel *m_reviewModel = nullptr; QDeclarativePlaceImageModel *m_imageModel = nullptr; QDeclarativePlaceEditorialModel *m_editorialModel = nullptr; QQmlPropertyMap *m_extendedAttributes = nullptr; QDeclarativeContactDetails *m_contactDetails = nullptr; QPlace m_src; QPlaceReply *m_reply = nullptr; QDeclarativeGeoServiceProvider *m_plugin = nullptr; bool m_complete = false; QString m_prevPrimaryPhone; QString m_prevPrimaryEmail; QString m_prevPrimaryFax; QUrl m_prevPrimaryWebsite; QDeclarativePlace *m_favorite = nullptr; Status m_status = Ready; QString m_errorString; QListm_categoriesToBeDeleted; }; QT_END_NAMESPACE QML_DECLARE_TYPE(QDeclarativePlace) #endif // QDECLARATIVEPLACE_P_H