1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2015 The Qt Company Ltd. 4 ** Contact: http://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtLocation module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL3$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see http://www.qt.io/terms-conditions. For further 15 ** information use the contact form at http://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPLv3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or later as published by the Free 28 ** Software Foundation and appearing in the file LICENSE.GPL included in 29 ** the packaging of this file. Please review the following information to 30 ** ensure the GNU General Public License version 2.0 requirements will be 31 ** met: http://www.gnu.org/licenses/gpl-2.0.html. 32 ** 33 ** $QT_END_LICENSE$ 34 ** 35 ****************************************************************************/ 36 37 #ifndef QDECLARATIVEPLACE_P_H 38 #define QDECLARATIVEPLACE_P_H 39 40 // 41 // W A R N I N G 42 // ------------- 43 // 44 // This file is not part of the Qt API. It exists purely as an 45 // implementation detail. This header file may change from version to 46 // version without notice, or even be removed. 47 // 48 // We mean it. 49 // 50 51 #include <QtLocation/private/qlocationglobal_p.h> 52 #include <QtCore/QObject> 53 #include <QtQml/QQmlListProperty> 54 #include <QtQml/QQmlParserStatus> 55 #include <QtQml/QQmlPropertyMap> 56 #include <QtLocation/QPlace> 57 58 #include <QtPositioningQuick/private/qdeclarativegeolocation_p.h> 59 #include <QtLocation/private/qdeclarativecategory_p.h> 60 #include <QtLocation/private/qdeclarativecontactdetail_p.h> 61 #include <QtLocation/private/qdeclarativesupplier_p.h> 62 #include <QtLocation/private/qdeclarativeratings_p.h> 63 #include <QtLocation/private/qdeclarativereviewmodel_p.h> 64 #include <QtLocation/private/qdeclarativeplaceimagemodel_p.h> 65 #include <QtLocation/private/qdeclarativeplaceeditorialmodel_p.h> 66 67 QT_BEGIN_NAMESPACE 68 69 class QPlaceReply; 70 71 class QPlaceManager; 72 class QDeclarativePlaceIcon; 73 74 class Q_LOCATION_PRIVATE_EXPORT QDeclarativePlace : public QObject, public QQmlParserStatus 75 { 76 Q_OBJECT 77 78 Q_ENUMS(Status Visibility) 79 80 Q_PROPERTY(QPlace place READ place WRITE setPlace) 81 Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged) 82 Q_PROPERTY(QQmlListProperty<QDeclarativeCategory> categories READ categories NOTIFY categoriesChanged) 83 Q_PROPERTY(QDeclarativeGeoLocation *location READ location WRITE setLocation NOTIFY locationChanged) 84 Q_PROPERTY(QDeclarativeRatings *ratings READ ratings WRITE setRatings NOTIFY ratingsChanged) 85 Q_PROPERTY(QDeclarativeSupplier *supplier READ supplier WRITE setSupplier NOTIFY supplierChanged) 86 Q_PROPERTY(QDeclarativePlaceIcon *icon READ icon WRITE setIcon NOTIFY iconChanged) 87 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) 88 Q_PROPERTY(QString placeId READ placeId WRITE setPlaceId NOTIFY placeIdChanged) 89 Q_PROPERTY(QString attribution READ attribution WRITE setAttribution NOTIFY attributionChanged) 90 91 Q_PROPERTY(QDeclarativeReviewModel *reviewModel READ reviewModel NOTIFY reviewModelChanged) 92 Q_PROPERTY(QDeclarativePlaceImageModel *imageModel READ imageModel NOTIFY imageModelChanged) 93 Q_PROPERTY(QDeclarativePlaceEditorialModel *editorialModel READ editorialModel NOTIFY editorialModelChanged) 94 95 Q_PROPERTY(QObject *extendedAttributes READ extendedAttributes NOTIFY extendedAttributesChanged) 96 Q_PROPERTY(QObject *contactDetails READ contactDetails NOTIFY contactDetailsChanged) 97 Q_PROPERTY(bool detailsFetched READ detailsFetched NOTIFY detailsFetchedChanged) 98 Q_PROPERTY(Status status READ status NOTIFY statusChanged) 99 100 Q_PROPERTY(QString primaryPhone READ primaryPhone NOTIFY primaryPhoneChanged) 101 Q_PROPERTY(QString primaryFax READ primaryFax NOTIFY primaryFaxChanged) 102 Q_PROPERTY(QString primaryEmail READ primaryEmail NOTIFY primaryEmailChanged) 103 Q_PROPERTY(QUrl primaryWebsite READ primaryWebsite NOTIFY primaryWebsiteChanged) 104 105 Q_PROPERTY(Visibility visibility READ visibility WRITE setVisibility NOTIFY visibilityChanged) 106 Q_PROPERTY(QDeclarativePlace *favorite READ favorite WRITE setFavorite NOTIFY favoriteChanged) 107 108 Q_INTERFACES(QQmlParserStatus) 109 110 public: 111 explicit QDeclarativePlace(QObject *parent = 0); 112 QDeclarativePlace(const QPlace &src, QDeclarativeGeoServiceProvider *plugin, QObject *parent = 0); 113 ~QDeclarativePlace(); 114 115 enum Status {Ready, Saving, Fetching, Removing, Error}; 116 enum Visibility { 117 UnspecifiedVisibility = QLocation::UnspecifiedVisibility, 118 DeviceVisibility = QLocation::DeviceVisibility, 119 PrivateVisibility = QLocation::PrivateVisibility, 120 PublicVisibility = QLocation::PublicVisibility 121 }; 122 123 //From QQmlParserStatus classBegin()124 virtual void classBegin() {} 125 virtual void componentComplete(); 126 127 void setPlugin(QDeclarativeGeoServiceProvider *plugin); 128 QDeclarativeGeoServiceProvider *plugin() const; 129 130 QDeclarativeReviewModel *reviewModel(); 131 QDeclarativePlaceImageModel *imageModel(); 132 QDeclarativePlaceEditorialModel *editorialModel(); 133 134 QPlace place(); 135 void setPlace(const QPlace &src); 136 137 QQmlListProperty<QDeclarativeCategory> categories(); 138 static void category_append(QQmlListProperty<QDeclarativeCategory> *prop, 139 QDeclarativeCategory *value); 140 static int category_count(QQmlListProperty<QDeclarativeCategory> *prop); 141 static QDeclarativeCategory *category_at(QQmlListProperty<QDeclarativeCategory> *prop, int index); 142 static void category_clear(QQmlListProperty<QDeclarativeCategory> *prop); 143 144 QDeclarativeGeoLocation *location(); 145 void setLocation(QDeclarativeGeoLocation *location); 146 QDeclarativeRatings *ratings(); 147 void setRatings(QDeclarativeRatings *ratings); 148 QDeclarativeSupplier *supplier() const; 149 void setSupplier(QDeclarativeSupplier *supplier); 150 QDeclarativePlaceIcon *icon() const; 151 void setIcon(QDeclarativePlaceIcon *icon); 152 QString name() const; 153 void setName(const QString &name); 154 QString placeId() const; 155 void setPlaceId(const QString &placeId); 156 QString attribution() const; 157 void setAttribution(const QString &attribution); 158 bool detailsFetched() const; 159 160 Status status() const; 161 void setStatus(Status status, const QString &errorString = QString()); 162 163 Q_INVOKABLE void getDetails(); 164 Q_INVOKABLE void save(); 165 Q_INVOKABLE void remove(); 166 Q_INVOKABLE QString errorString() const; 167 168 QString primaryPhone() const; 169 QString primaryFax() const; 170 QString primaryEmail() const; 171 QUrl primaryWebsite() const; 172 173 QQmlPropertyMap *extendedAttributes() const; 174 175 QDeclarativeContactDetails *contactDetails() const; 176 177 Visibility visibility() const; 178 void setVisibility(Visibility visibility); 179 180 QDeclarativePlace *favorite() const; 181 void setFavorite(QDeclarativePlace *favorite); 182 183 Q_INVOKABLE void copyFrom(QDeclarativePlace *original); 184 Q_INVOKABLE void initializeFavorite(QDeclarativeGeoServiceProvider *plugin); 185 186 Q_SIGNALS: 187 void pluginChanged(); 188 void categoriesChanged(); 189 void locationChanged(); 190 void ratingsChanged(); 191 void supplierChanged(); 192 void iconChanged(); 193 void nameChanged(); 194 void placeIdChanged(); 195 void attributionChanged(); 196 void detailsFetchedChanged(); 197 void reviewModelChanged(); 198 void imageModelChanged(); 199 void editorialModelChanged(); 200 201 void primaryPhoneChanged(); 202 void primaryFaxChanged(); 203 void primaryEmailChanged(); 204 void primaryWebsiteChanged(); 205 206 void extendedAttributesChanged(); 207 void contactDetailsChanged(); 208 void statusChanged(); 209 void visibilityChanged(); 210 void favoriteChanged(); 211 212 private Q_SLOTS: 213 void finished(); 214 void contactsModified(const QString &, const QVariant &); 215 void pluginReady(); 216 void cleanupDeletedCategories(); 217 private: 218 void synchronizeCategories(); 219 void pullExtendedAttributes(); 220 void synchronizeContacts(); 221 void primarySignalsEmission(const QString &type = QString()); 222 QString primaryValue(const QString &contactType) const; 223 224 private: 225 QPlaceManager *manager(); 226 227 QList<QDeclarativeCategory *> m_categories; 228 QDeclarativeGeoLocation *m_location; 229 QDeclarativeRatings *m_ratings; 230 QDeclarativeSupplier *m_supplier; 231 QDeclarativePlaceIcon *m_icon; 232 QDeclarativeReviewModel *m_reviewModel; 233 QDeclarativePlaceImageModel *m_imageModel; 234 QDeclarativePlaceEditorialModel *m_editorialModel; 235 QQmlPropertyMap *m_extendedAttributes; 236 QDeclarativeContactDetails *m_contactDetails; 237 238 QPlace m_src; 239 240 QPlaceReply *m_reply; 241 242 QDeclarativeGeoServiceProvider *m_plugin; 243 bool m_complete; 244 245 QString m_prevPrimaryPhone; 246 QString m_prevPrimaryEmail; 247 QString m_prevPrimaryFax; 248 QUrl m_prevPrimaryWebsite; 249 250 QDeclarativePlace *m_favorite; 251 252 Status m_status; 253 QString m_errorString; 254 255 QList<QDeclarativeCategory *>m_categoriesToBeDeleted; 256 }; 257 258 QT_END_NAMESPACE 259 260 QML_DECLARE_TYPE(QDeclarativePlace) 261 262 #endif // QDECLARATIVEPLACE_P_H 263