libosmscout  1.1.1
SearchModule.h
Go to the documentation of this file.
1 #ifndef OSMSCOUT_CLIENT_QT_SEARCHMODULE_H
2 #define OSMSCOUT_CLIENT_QT_SEARCHMODULE_H
3 
4 /*
5  OSMScout - a Qt backend for libosmscout and libosmscout-map
6  Copyright (C) 2017 Lukas Karas
7 
8  This library is free software; you can redistribute it and/or
9  modify it under the terms of the GNU Lesser General Public
10  License as published by the Free Software Foundation; either
11  version 2.1 of the License, or (at your option) any later version.
12 
13  This library is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public
19  License along with this library; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21  */
22 
23 #include <QObject>
24 #include <QThread>
25 #include <osmscout/DBThread.h>
26 #include <osmscout/LookupModule.h>
27 
28 #ifdef OSMSCOUT_HAVE_LIB_MARISA
30 #endif
31 
33 
34 namespace osmscout {
35 
36 class SearchModule;
37 
41 class OSMSCOUT_CLIENT_QT_API SearchRunnable : public QRunnable {
42 
43 protected:
46  QString searchPattern;
47  int limit;
49  std::map<osmscout::FileOffset,osmscout::AdminRegionRef> adminRegionMap;
50  std::promise<bool> promise;
51 
52 public:
53  SearchRunnable(SearchModule *searchModule,
54  DBInstanceRef &db,
55  const QString &searchPattern,
56  int limit,
57  osmscout::BreakerRef &breaker);
58 
59  std::future<bool> getFuture();
60 
61 protected:
62  bool BuildLocationEntry(const osmscout::ObjectFileRef& object,
63  const QString &title,
64  DBInstanceRef &db,
65  std::map<osmscout::FileOffset,osmscout::AdminRegionRef> &adminRegionMap,
66  QList<LocationEntry> &locations);
67 
68  bool BuildLocationEntry(const osmscout::LocationSearchResult::Entry &entry,
69  DBInstanceRef &db,
70  std::map<osmscout::FileOffset,osmscout::AdminRegionRef> &adminRegionMap,
71  QList<LocationEntry> &locations);
72 
73  bool GetObjectDetails(DBInstanceRef &db,
74  const osmscout::ObjectFileRef& object,
75  QString &typeName,
76  osmscout::GeoCoord& coordinates,
77  osmscout::GeoBox& bbox);
78 
79  bool GetObjectDetails(DBInstanceRef &db,
80  const std::vector<osmscout::ObjectFileRef>& objects,
81  QString &typeName,
82  osmscout::GeoCoord& coordinates,
83  osmscout::GeoBox& bbox);
84 };
85 
90 
91 private:
92  AdminRegionInfoRef defaultRegionInfo;
93 
94 public:
96  DBInstanceRef &db,
97  const QString &searchPattern,
98  int limit,
99  osmscout::BreakerRef &breaker,
100  AdminRegionInfoRef &defaultRegion);
101 
102  void run() override;
103 
104 private:
105  bool SearchLocations(DBInstanceRef &db,
106  const QString &searchPattern,
107  const osmscout::AdminRegionRef &defaultRegion,
108  int limit,
109  osmscout::BreakerRef &breaker,
110  std::map<osmscout::FileOffset,osmscout::AdminRegionRef> &adminRegionMap);
111 };
112 
117 
118 public:
119  FreeTextSearchRunnable(SearchModule *searchModule,
120  DBInstanceRef &db,
121  const QString &searchPattern,
122  int limit,
123  osmscout::BreakerRef &breaker);
124 
125  void run() override;
126 
127 private:
128  bool FreeTextSearch(DBInstanceRef &db,
129  const QString &searchPattern,
130  int limit,
131  std::map<osmscout::FileOffset,osmscout::AdminRegionRef> &adminRegionMap);
132 };
133 
138  Q_OBJECT
139 
140 private:
141  QThread *thread;
142  DBThreadRef dbThread;
143  LookupModule *lookupModule;
144 
145 signals:
146  void searchResult(const QString searchPattern, const QList<LocationEntry>);
147  void searchFinished(const QString searchPattern, bool error);
148 
149 public slots:
150 
166  void SearchForLocations(const QString searchPattern,
167  int limit,
168  osmscout::GeoCoord,
169  AdminRegionInfoRef defaultRegion,
170  osmscout::BreakerRef breaker);
171 
172 public:
173  SearchModule(QThread *thread,DBThreadRef dbThread,LookupModule *lookupModule);
174  virtual ~SearchModule();
175 
176 };
177 
178 }
179 
180 #endif /* OSMSCOUT_CLIENT_QT_SEARCHMODULE_H */
osmscout::BreakerRef breaker
Definition: SearchModule.h:48
std::promise< bool > promise
Definition: SearchModule.h:50
#define OSMSCOUT_CLIENT_QT_API
Definition: ClientQtImportExport.h:45
Definition: LocationService.h:235
std::shared_ptr< Breaker > BreakerRef
Definition: Breaker.h:65
Definition: SearchModule.h:41
Definition: SearchModule.h:137
Definition: SearchModule.h:116
Definition: Area.h:38
DBInstanceRef db
Definition: SearchModule.h:45
std::shared_ptr< DBThread > DBThreadRef
Definition: DBThread.h:239
std::map< osmscout::FileOffset, osmscout::AdminRegionRef > adminRegionMap
Definition: SearchModule.h:49
std::shared_ptr< AdminRegionInfo > AdminRegionInfoRef
Definition: LookupModule.h:43
QString searchPattern
Definition: SearchModule.h:46
SearchModule * searchModule
Definition: SearchModule.h:44
Definition: LookupModule.h:48
int limit
Definition: SearchModule.h:47
std::shared_ptr< DBInstance > DBInstanceRef
Definition: DBInstance.h:217
std::shared_ptr< AdminRegion > AdminRegionRef
Definition: Location.h:83
Definition: SearchModule.h:89