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 QDECLARATIVEQGEOSERVICEPROVIDER_H 38 #define QDECLARATIVEQGEOSERVICEPROVIDER_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 53 #include <QtCore/QMap> 54 #include <QtCore/QString> 55 #include <QtCore/QStringList> 56 #include <QtCore/QVariant> 57 #include <QtQml/qqml.h> 58 #include <QtQml/QQmlParserStatus> 59 #include <QtQml/QQmlListProperty> 60 #include <QtLocation/QGeoServiceProvider> 61 #include <QtPositioningQuick/private/qdeclarativepluginparameter_p.h> 62 63 QT_BEGIN_NAMESPACE 64 65 class QDeclarativeGeoServiceProviderRequirements; 66 67 class Q_LOCATION_PRIVATE_EXPORT QDeclarativeGeoServiceProvider : public QObject, public QQmlParserStatus 68 { 69 Q_OBJECT 70 Q_ENUMS(RoutingFeature) 71 Q_ENUMS(GeocodingFeature) 72 Q_ENUMS(MappingFeature) 73 Q_ENUMS(PlacesFeature) 74 75 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) 76 Q_PROPERTY(QStringList availableServiceProviders READ availableServiceProviders CONSTANT) 77 Q_PROPERTY(QQmlListProperty<QDeclarativePluginParameter> parameters READ parameters) 78 Q_PROPERTY(QDeclarativeGeoServiceProviderRequirements *required READ requirements WRITE setRequirements) 79 Q_PROPERTY(QStringList locales READ locales WRITE setLocales NOTIFY localesChanged) 80 Q_PROPERTY(QStringList preferred READ preferred WRITE setPreferred NOTIFY preferredChanged) 81 Q_PROPERTY(bool allowExperimental READ allowExperimental WRITE setAllowExperimental NOTIFY allowExperimentalChanged) 82 Q_PROPERTY(bool isAttached READ isAttached NOTIFY attached) 83 84 Q_CLASSINFO("DefaultProperty", "parameters") 85 Q_INTERFACES(QQmlParserStatus) 86 87 public: 88 explicit QDeclarativeGeoServiceProvider(QObject *parent = nullptr); 89 ~QDeclarativeGeoServiceProvider(); 90 91 enum RoutingFeature { 92 NoRoutingFeatures = QGeoServiceProvider::NoRoutingFeatures, 93 OnlineRoutingFeature = QGeoServiceProvider::OnlineRoutingFeature, 94 OfflineRoutingFeature = QGeoServiceProvider::OfflineRoutingFeature, 95 LocalizedRoutingFeature = QGeoServiceProvider::LocalizedRoutingFeature, 96 RouteUpdatesFeature = QGeoServiceProvider::RouteUpdatesFeature, 97 AlternativeRoutesFeature = QGeoServiceProvider::AlternativeRoutesFeature, 98 ExcludeAreasRoutingFeature = QGeoServiceProvider::ExcludeAreasRoutingFeature, 99 AnyRoutingFeatures = QGeoServiceProvider::AnyRoutingFeatures 100 }; 101 102 enum GeocodingFeature { 103 NoGeocodingFeatures = QGeoServiceProvider::NoGeocodingFeatures, 104 OnlineGeocodingFeature = QGeoServiceProvider::OnlineGeocodingFeature, 105 OfflineGeocodingFeature = QGeoServiceProvider::OfflineGeocodingFeature, 106 ReverseGeocodingFeature = QGeoServiceProvider::ReverseGeocodingFeature, 107 LocalizedGeocodingFeature = QGeoServiceProvider::LocalizedGeocodingFeature, 108 AnyGeocodingFeatures = QGeoServiceProvider::AnyGeocodingFeatures 109 }; 110 111 enum MappingFeature { 112 NoMappingFeatures = QGeoServiceProvider::NoMappingFeatures, 113 OnlineMappingFeature = QGeoServiceProvider::OnlineMappingFeature, 114 OfflineMappingFeature = QGeoServiceProvider::OfflineMappingFeature, 115 LocalizedMappingFeature = QGeoServiceProvider::LocalizedMappingFeature, 116 AnyMappingFeatures = QGeoServiceProvider::AnyMappingFeatures 117 }; 118 119 enum PlacesFeature { 120 NoPlacesFeatures = QGeoServiceProvider::NoPlacesFeatures, 121 OnlinePlacesFeature = QGeoServiceProvider::OnlinePlacesFeature, 122 OfflinePlacesFeature = QGeoServiceProvider::OfflinePlacesFeature, 123 SavePlaceFeature = QGeoServiceProvider::SavePlaceFeature, 124 RemovePlaceFeature = QGeoServiceProvider::RemovePlaceFeature, 125 SaveCategoryFeature = QGeoServiceProvider::SaveCategoryFeature, 126 RemoveCategoryFeature = QGeoServiceProvider::RemoveCategoryFeature, 127 PlaceRecommendationsFeature = QGeoServiceProvider::PlaceRecommendationsFeature, 128 SearchSuggestionsFeature = QGeoServiceProvider::SearchSuggestionsFeature, 129 LocalizedPlacesFeature = QGeoServiceProvider::LocalizedPlacesFeature, 130 NotificationsFeature = QGeoServiceProvider::NotificationsFeature, 131 PlaceMatchingFeature = QGeoServiceProvider::PlaceMatchingFeature, 132 AnyPlacesFeatures = QGeoServiceProvider::AnyPlacesFeatures 133 }; 134 135 enum NavigationFeature { 136 NoNavigationFeatures = QGeoServiceProvider::NoNavigationFeatures, 137 OnlineNavigationFeature = QGeoServiceProvider::OnlineNavigationFeature, 138 OfflineNavigationFeature = QGeoServiceProvider::OfflineNavigationFeature, 139 AnyNavigationFeatures = QGeoServiceProvider::AnyNavigationFeatures 140 }; 141 Q_DECLARE_FLAGS(RoutingFeatures,RoutingFeature)142 Q_DECLARE_FLAGS(RoutingFeatures, RoutingFeature) 143 Q_FLAGS(RoutingFeatures) 144 145 Q_DECLARE_FLAGS(GeocodingFeatures, GeocodingFeature) 146 Q_FLAGS(GeocodingFeatures) 147 148 Q_DECLARE_FLAGS(MappingFeatures, MappingFeature) 149 Q_FLAGS(MappingFeatures) 150 151 Q_DECLARE_FLAGS(PlacesFeatures, PlacesFeature) 152 Q_FLAGS(PlacesFeatures) 153 154 Q_DECLARE_FLAGS(NavigationFeatures, NavigationFeature) 155 Q_FLAGS(NavigationFeatures) 156 157 // From QQmlParserStatus 158 virtual void classBegin() {} 159 virtual void componentComplete(); 160 161 void setName(const QString &name); 162 QString name() const; 163 164 QQmlListProperty<QDeclarativePluginParameter> parameters(); 165 QVariantMap parameterMap() const; 166 167 QStringList availableServiceProviders(); 168 169 QDeclarativeGeoServiceProviderRequirements *requirements() const; 170 void setRequirements(QDeclarativeGeoServiceProviderRequirements *req); 171 172 QStringList preferred() const; 173 void setPreferred(const QStringList &val); 174 175 QGeoServiceProvider *sharedGeoServiceProvider() const; 176 177 Q_INVOKABLE bool supportsRouting(const RoutingFeatures &feature = AnyRoutingFeatures) const; 178 Q_INVOKABLE bool supportsGeocoding(const GeocodingFeatures &feature = AnyGeocodingFeatures) const; 179 Q_INVOKABLE bool supportsMapping(const MappingFeatures &feature = AnyMappingFeatures) const; 180 Q_INVOKABLE bool supportsPlaces(const PlacesFeatures &feature = AnyPlacesFeatures) const; 181 Q_REVISION(11) Q_INVOKABLE bool supportsNavigation(const NavigationFeature &feature = AnyNavigationFeatures) const; 182 183 QStringList locales() const; 184 void setLocales(const QStringList &locales); 185 186 bool isAttached() const; 187 188 void setAllowExperimental(bool allow); 189 bool allowExperimental() const; 190 191 Q_SIGNALS: 192 void nameChanged(const QString &name); 193 void localesChanged(); 194 void attached(); 195 void preferredChanged(const QStringList &preferences); 196 void allowExperimentalChanged(bool allow); 197 198 private: 199 bool parametersReady(); 200 void tryAttach(); 201 static void parameter_append(QQmlListProperty<QDeclarativePluginParameter> *prop, QDeclarativePluginParameter *mapObject); 202 static int parameter_count(QQmlListProperty<QDeclarativePluginParameter> *prop); 203 static QDeclarativePluginParameter *parameter_at(QQmlListProperty<QDeclarativePluginParameter> *prop, int index); 204 static void parameter_clear(QQmlListProperty<QDeclarativePluginParameter> *prop); 205 206 QGeoServiceProvider *sharedProvider_; 207 QString name_; 208 QList<QDeclarativePluginParameter *> parameters_; 209 QDeclarativeGeoServiceProviderRequirements *required_; 210 bool complete_; 211 bool experimental_; 212 QStringList locales_; 213 QStringList prefer_; 214 Q_DISABLE_COPY(QDeclarativeGeoServiceProvider) 215 }; 216 217 class Q_LOCATION_PRIVATE_EXPORT QDeclarativeGeoServiceProviderRequirements : public QObject 218 { 219 Q_OBJECT 220 Q_PROPERTY(QDeclarativeGeoServiceProvider::MappingFeatures mapping 221 READ mappingRequirements WRITE setMappingRequirements 222 NOTIFY mappingRequirementsChanged) 223 Q_PROPERTY(QDeclarativeGeoServiceProvider::RoutingFeatures routing 224 READ routingRequirements WRITE setRoutingRequirements 225 NOTIFY routingRequirementsChanged) 226 Q_PROPERTY(QDeclarativeGeoServiceProvider::GeocodingFeatures geocoding 227 READ geocodingRequirements WRITE setGeocodingRequirements 228 NOTIFY geocodingRequirementsChanged) 229 Q_PROPERTY(QDeclarativeGeoServiceProvider::PlacesFeatures places 230 READ placesRequirements WRITE setPlacesRequirements 231 NOTIFY placesRequirementsChanged) 232 Q_PROPERTY(QDeclarativeGeoServiceProvider::NavigationFeatures navigation 233 READ navigationRequirements WRITE setNavigationRequirements 234 NOTIFY navigationRequirementsChanged) 235 236 public: 237 explicit QDeclarativeGeoServiceProviderRequirements(QObject *parent = 0); 238 ~QDeclarativeGeoServiceProviderRequirements(); 239 240 QDeclarativeGeoServiceProvider::MappingFeatures mappingRequirements() const; 241 void setMappingRequirements(const QDeclarativeGeoServiceProvider::MappingFeatures &features); 242 243 QDeclarativeGeoServiceProvider::RoutingFeatures routingRequirements() const; 244 void setRoutingRequirements(const QDeclarativeGeoServiceProvider::RoutingFeatures &features); 245 246 QDeclarativeGeoServiceProvider::GeocodingFeatures geocodingRequirements() const; 247 void setGeocodingRequirements(const QDeclarativeGeoServiceProvider::GeocodingFeatures &features); 248 249 QDeclarativeGeoServiceProvider::PlacesFeatures placesRequirements() const; 250 void setPlacesRequirements(const QDeclarativeGeoServiceProvider::PlacesFeatures &features); 251 252 QDeclarativeGeoServiceProvider::NavigationFeatures navigationRequirements() const; 253 void setNavigationRequirements(const QDeclarativeGeoServiceProvider::NavigationFeatures &features); 254 255 Q_INVOKABLE bool matches(const QGeoServiceProvider *provider) const; 256 257 bool operator == (const QDeclarativeGeoServiceProviderRequirements &rhs) const; 258 259 Q_SIGNALS: 260 void mappingRequirementsChanged(const QDeclarativeGeoServiceProvider::MappingFeatures &features); 261 void routingRequirementsChanged(const QDeclarativeGeoServiceProvider::RoutingFeatures &features); 262 void geocodingRequirementsChanged(const QDeclarativeGeoServiceProvider::GeocodingFeatures &features); 263 void placesRequirementsChanged(const QDeclarativeGeoServiceProvider::PlacesFeatures &features); 264 void navigationRequirementsChanged(const QDeclarativeGeoServiceProvider::NavigationFeatures &features); 265 266 void requirementsChanged(); 267 268 private: 269 QDeclarativeGeoServiceProvider::MappingFeatures mapping_; 270 QDeclarativeGeoServiceProvider::RoutingFeatures routing_; 271 QDeclarativeGeoServiceProvider::GeocodingFeatures geocoding_; 272 QDeclarativeGeoServiceProvider::PlacesFeatures places_; 273 QDeclarativeGeoServiceProvider::NavigationFeatures navigation_; 274 }; 275 276 QT_END_NAMESPACE 277 278 QML_DECLARE_TYPE(QDeclarativeGeoServiceProviderRequirements) 279 QML_DECLARE_TYPE(QDeclarativeGeoServiceProvider) 280 281 #endif 282