libosmscout 1.1.1
Loading...
Searching...
No Matches
SearchLocationModel.h
Go to the documentation of this file.
1#ifndef OSMSCOUT_CLIENT_QT_SEARCHLOCATIONMODEL_H
2#define OSMSCOUT_CLIENT_QT_SEARCHLOCATIONMODEL_H
3
4/*
5 OSMScout - a Qt backend for libosmscout and libosmscout-map
6 Copyright (C) 2014 Tim Teulings
7 Copyright (C) 2016 Lukáš Karas
8
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Lesser General Public
11 License as published by the Free Software Foundation; either
12 version 2.1 of the License, or (at your option) any later version.
13
14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public
20 License along with this library; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24#include <QObject>
25#include <QAbstractListModel>
26#include <QJSValue>
27#include <QTimer>
28
29#include <osmscout/GeoCoord.h>
30
32
35
37
38namespace osmscout {
39
45class OSMSCOUT_CLIENT_QT_API LocationListModel : public QAbstractListModel
46{
47 Q_OBJECT
48
52 Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
53
54
57 Q_PROPERTY(bool searching READ isSearching NOTIFY SearchingChanged)
58
65 Q_PROPERTY(double lat READ GetLat WRITE SetLat)
66
70 Q_PROPERTY(double lon READ GetLon WRITE SetLon)
71
75 Q_PROPERTY(int resultLimit READ GetResultLimit WRITE SetResultLimit)
76
80 Q_PROPERTY(int displayLimit READ GetDisplayLimit WRITE SetDisplayLimit)
81
85 Q_PROPERTY(QString pattern READ getPattern WRITE setPattern)
86
105 Q_PROPERTY(QJSValue compare READ getCompare WRITE setCompare)
106
131 Q_PROPERTY(QJSValue equals READ getEquals WRITE setEquals)
132
133signals:
134 void SearchRequested(const QString searchPattern,
135 int limit,
136 osmscout::GeoCoord searchCenter,
137 AdminRegionInfoRef defaultRegion,
138 osmscout::BreakerRef breaker);
140 void countChanged(int);
142
143public slots:
144 void setPattern(const QString& pattern);
145 void onSearchResult(const QString searchPattern,
146 const QList<LocationEntry>);
147 void onSearchFinished(const QString searchPattern, bool error);
148
149 void onLocationAdminRegions(const osmscout::GeoCoord,QList<AdminRegionInfoRef>);
151
152private slots:
153 void postponeAdd();
154
155private:
156 QString pattern;
157 QString lastRequestPattern;
158 QList<LocationEntryRef> locations;
159 QList<LocationEntryRef> postponedEntries;
160 bool searching=false;
161 SearchModule* searchModule;
162 LookupModule* lookupModule;
163 SettingsRef settings;
164 osmscout::GeoCoord searchCenter;
165 int resultLimit=2000;
166 int displayLimit=100;
167 osmscout::BreakerRef breaker;
168 AdminRegionInfoRef defaultRegion;
169 AdminRegionInfoRef lastRequestDefaultRegion;
170 QJSValue compareFn;
171 QJSValue equalsFn;
172 QTimer postponeTimer;
173
174public:
175 enum Roles {
176 LabelRole = Qt::UserRole,
177 TypeRole = Qt::UserRole +1,
178 RegionRole = Qt::UserRole +2,
179 LatRole = Qt::UserRole +3,
180 LonRole = Qt::UserRole +4,
181 DistanceRole = Qt::UserRole +5,
182 BearingRole = Qt::UserRole +6,
183 LocationObjectRole = Qt::UserRole +7,
184 IndexedAdminRegionRole = Qt::UserRole +8,
185 AltLangName = Qt::UserRole +9
186 };
187
188public:
189 explicit LocationListModel(QObject* parent = nullptr);
193
196
197 QJSValue getCompare() const {
198 return compareFn;
199 }
200
201 void setCompare(const QJSValue &fn){
202 compareFn=fn;
203 }
204
205 QJSValue getEquals() const{
206 return equalsFn;
207 }
208
209 void setEquals(const QJSValue &fn){
210 equalsFn=fn;
211 }
212
213 Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const override;
214
215 Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override;
216
217 Q_INVOKABLE Qt::ItemFlags flags(const QModelIndex &index) const override;
218
219 QHash<int, QByteArray> roleNames() const override;
220
221 Q_INVOKABLE QObject* get(int row) const;
222
223 inline bool isSearching() const {
224 return searching || !postponedEntries.empty();
225 }
226
227 inline double GetLat() const {
228 return searchCenter.GetLat();
229 }
230
231 inline double GetLon() const {
232 return searchCenter.GetLon();
233 }
234
235 inline void SetLat(double lat){
236 if (lat!=searchCenter.GetLat()) {
237 searchCenter.Set(lat, searchCenter.GetLon());
238 lookupRegion();
239 }
240 }
241
242 inline void SetLon(double lon){
243 if (lon!=searchCenter.GetLon()) {
244 searchCenter.Set(searchCenter.GetLat(), lon);
245 lookupRegion();
246 }
247 }
248
249 inline int GetResultLimit() const {
250 return resultLimit;
251 }
252
253 inline void SetResultLimit(int limit){
254 resultLimit=limit;
255 }
256
257 inline int GetDisplayLimit() const {
258 return displayLimit;
259 }
260
261 inline void SetDisplayLimit(int limit) {
262 displayLimit=limit;
263 }
264
265 inline QString getPattern() const {
266 return pattern;
267 }
268
269private:
270 void lookupRegion();
271
272 void addBatch(QList<LocationEntryRef> foundLocations);
273
274
275};
276
277}
278
279#endif
#define OSMSCOUT_CLIENT_QT_API
Definition ClientQtImportExport.h:45
Definition LocationEntry.h:47
QString pattern
Definition SearchLocationModel.h:85
void onLocationAdminRegionFinished(const osmscout::GeoCoord)
LocationListModel(LocationListModel &&)=delete
bool isSearching() const
Definition SearchLocationModel.h:223
void SetResultLimit(int limit)
Definition SearchLocationModel.h:253
void onLocationAdminRegions(const osmscout::GeoCoord, QList< AdminRegionInfoRef >)
int count
Definition SearchLocationModel.h:52
void setEquals(const QJSValue &fn)
Definition SearchLocationModel.h:209
Q_INVOKABLE Qt::ItemFlags flags(const QModelIndex &index) const override
Q_INVOKABLE QObject * get(int row) const
void setCompare(const QJSValue &fn)
Definition SearchLocationModel.h:201
QHash< int, QByteArray > roleNames() const override
Roles
Definition SearchLocationModel.h:175
@ LabelRole
Definition SearchLocationModel.h:176
@ LocationObjectRole
Definition SearchLocationModel.h:183
@ LonRole
Definition SearchLocationModel.h:180
@ RegionRole
Definition SearchLocationModel.h:178
@ AltLangName
Definition SearchLocationModel.h:185
@ LatRole
Definition SearchLocationModel.h:179
@ IndexedAdminRegionRole
Definition SearchLocationModel.h:184
@ DistanceRole
Definition SearchLocationModel.h:181
@ TypeRole
Definition SearchLocationModel.h:177
@ BearingRole
Definition SearchLocationModel.h:182
void SetDisplayLimit(int limit)
Definition SearchLocationModel.h:261
void SetLat(double lat)
Definition SearchLocationModel.h:235
QJSValue equals
Definition SearchLocationModel.h:131
double lon
Definition SearchLocationModel.h:70
void regionLookupRequested(osmscout::GeoCoord)
int displayLimit
Definition SearchLocationModel.h:80
void onSearchFinished(const QString searchPattern, bool error)
void onSearchResult(const QString searchPattern, const QList< LocationEntry >)
double GetLon() const
Definition SearchLocationModel.h:231
QJSValue compare
Definition SearchLocationModel.h:105
LocationListModel(const LocationListModel &)=delete
QJSValue getEquals() const
Definition SearchLocationModel.h:205
int GetDisplayLimit() const
Definition SearchLocationModel.h:257
QJSValue getCompare() const
Definition SearchLocationModel.h:197
LocationListModel & operator=(LocationListModel &&)=delete
Q_INVOKABLE int rowCount(const QModelIndex &parent=QModelIndex()) const override
Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const override
double GetLat() const
Definition SearchLocationModel.h:227
int GetResultLimit() const
Definition SearchLocationModel.h:249
void SetLon(double lon)
Definition SearchLocationModel.h:242
double lat
Definition SearchLocationModel.h:65
int resultLimit
Definition SearchLocationModel.h:75
LocationListModel(QObject *parent=nullptr)
void SearchRequested(const QString searchPattern, int limit, osmscout::GeoCoord searchCenter, AdminRegionInfoRef defaultRegion, osmscout::BreakerRef breaker)
void setPattern(const QString &pattern)
bool searching
Definition SearchLocationModel.h:57
QString getPattern() const
Definition SearchLocationModel.h:265
LocationListModel & operator=(const LocationListModel &)=delete
Definition LookupModule.h:47
Definition SearchModule.h:157
Definition Area.h:39
std::shared_ptr< Breaker > BreakerRef
Definition Breaker.h:64
std::shared_ptr< LocationEntry > LocationEntryRef
Definition LocationEntry.h:119