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 QDECLARATIVESEARCHRESULTMODEL_P_H 38 #define QDECLARATIVESEARCHRESULTMODEL_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 <QtLocation/private/qdeclarativesearchmodelbase_p.h> 53 #include <QtLocation/private/qdeclarativecategory_p.h> 54 #include <QtLocation/private/qdeclarativeplace_p.h> 55 #include <QtLocation/private/qdeclarativeplaceicon_p.h> 56 57 QT_BEGIN_NAMESPACE 58 59 class QDeclarativeGeoServiceProvider; 60 61 class Q_LOCATION_PRIVATE_EXPORT QDeclarativeSearchResultModel : public QDeclarativeSearchModelBase 62 { 63 Q_OBJECT 64 65 Q_PROPERTY(QString searchTerm READ searchTerm WRITE setSearchTerm NOTIFY searchTermChanged) 66 Q_PROPERTY(QQmlListProperty<QDeclarativeCategory> categories READ categories NOTIFY categoriesChanged) 67 Q_PROPERTY(QString recommendationId READ recommendationId WRITE setRecommendationId NOTIFY recommendationIdChanged) 68 Q_PROPERTY(RelevanceHint relevanceHint READ relevanceHint WRITE setRelevanceHint NOTIFY relevanceHintChanged) 69 Q_PROPERTY(QDeclarativePlace::Visibility visibilityScope READ visibilityScope WRITE setVisibilityScope NOTIFY visibilityScopeChanged) 70 71 Q_PROPERTY(int count READ rowCount NOTIFY rowCountChanged) 72 Q_PROPERTY(QDeclarativeGeoServiceProvider *favoritesPlugin READ favoritesPlugin WRITE setFavoritesPlugin NOTIFY favoritesPluginChanged) 73 Q_PROPERTY(QVariantMap favoritesMatchParameters READ favoritesMatchParameters WRITE setFavoritesMatchParameters NOTIFY favoritesMatchParametersChanged) 74 75 Q_PROPERTY(bool incremental MEMBER m_incremental NOTIFY incrementalChanged REVISION 12) 76 77 Q_ENUMS(SearchResultType RelevanceHint) 78 79 public: 80 enum SearchResultType { 81 UnknownSearchResult = QPlaceSearchResult::UnknownSearchResult, 82 PlaceResult = QPlaceSearchResult::PlaceResult, 83 ProposedSearchResult = QPlaceSearchResult::ProposedSearchResult 84 }; 85 86 enum RelevanceHint { 87 UnspecifiedHint = QPlaceSearchRequest::UnspecifiedHint, 88 DistanceHint = QPlaceSearchRequest::DistanceHint, 89 LexicalPlaceNameHint = QPlaceSearchRequest::LexicalPlaceNameHint 90 }; 91 92 explicit QDeclarativeSearchResultModel(QObject *parent = 0); 93 ~QDeclarativeSearchResultModel(); 94 95 QString searchTerm() const; 96 void setSearchTerm(const QString &searchTerm); 97 98 QQmlListProperty<QDeclarativeCategory> categories(); 99 static void categories_append(QQmlListProperty<QDeclarativeCategory> *list, 100 QDeclarativeCategory *category); 101 static int categories_count(QQmlListProperty<QDeclarativeCategory> *list); 102 static QDeclarativeCategory *category_at(QQmlListProperty<QDeclarativeCategory> *list, int index); 103 static void categories_clear(QQmlListProperty<QDeclarativeCategory> *list); 104 105 QString recommendationId() const; 106 void setRecommendationId(const QString &recommendationId); 107 108 QDeclarativeSearchResultModel::RelevanceHint relevanceHint() const; 109 void setRelevanceHint(QDeclarativeSearchResultModel::RelevanceHint hint); 110 111 QDeclarativePlace::Visibility visibilityScope() const; 112 void setVisibilityScope(QDeclarativePlace::Visibility visibilityScope); 113 114 QDeclarativeGeoServiceProvider *favoritesPlugin() const; 115 void setFavoritesPlugin(QDeclarativeGeoServiceProvider *plugin); 116 117 QVariantMap favoritesMatchParameters() const; 118 void setFavoritesMatchParameters(const QVariantMap ¶meters); 119 120 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 121 122 virtual void clearData(bool suppressSignal = false) override; 123 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 124 Q_INVOKABLE QVariant data(int index, const QString &roleName) const; 125 QHash<int, QByteArray> roleNames() const override; 126 127 Q_INVOKABLE void updateWith(int proposedSearchIndex); 128 129 void updateSearchRequest(); 130 131 Q_SIGNALS: 132 void searchTermChanged(); 133 void categoriesChanged(); 134 void recommendationIdChanged(); 135 void relevanceHintChanged(); 136 void visibilityScopeChanged(); 137 138 void rowCountChanged(); 139 void favoritesPluginChanged(); 140 void favoritesMatchParametersChanged(); 141 void dataChanged(); 142 void incrementalChanged(); 143 144 protected: 145 QPlaceReply *sendQuery(QPlaceManager *manager, const QPlaceSearchRequest &request) override; 146 virtual void initializePlugin(QDeclarativeGeoServiceProvider *plugin) override; 147 148 protected Q_SLOTS: 149 virtual void queryFinished() override; 150 virtual void onContentUpdated() override; 151 152 private Q_SLOTS: 153 void updateLayout(const QList<QPlace> &favoritePlaces = QList<QPlace>()); 154 155 void placeUpdated(const QString &placeId); 156 void placeRemoved(const QString &placeId); 157 158 private: 159 enum Roles { 160 SearchResultTypeRole = Qt::UserRole, 161 TitleRole, 162 IconRole, 163 DistanceRole, 164 PlaceRole, 165 SponsoredRole 166 }; 167 168 int getRow(const QString &placeId) const; 169 QList<QPlaceSearchResult> resultsFromPages() const; 170 void removePageRow(int row); 171 172 QList<QDeclarativeCategory *> m_categories; 173 QLocation::VisibilityScope m_visibilityScope; 174 175 QMap<int, QList<QPlaceSearchResult>> m_pages; 176 QList<QPlaceSearchResult> m_results; 177 QList<QPlaceSearchResult> m_resultsBuffer; 178 QList<QDeclarativePlace *> m_places; 179 QList<QDeclarativePlaceIcon *> m_icons; 180 181 QDeclarativeGeoServiceProvider *m_favoritesPlugin; 182 QVariantMap m_matchParameters; 183 bool m_incremental = false; 184 }; 185 186 QT_END_NAMESPACE 187 188 #endif // QDECLARATIVESEARCHRESULTMODEL_P_H 189