libosmscout  1.1.1
DBThread.h
Go to the documentation of this file.
1 #ifndef OSMSCOUT_CLIENT_QT_DBTHREAD_H
2 #define OSMSCOUT_CLIENT_QT_DBTHREAD_H
3 
4 /*
5  OSMScout - a Qt backend for libosmscout and libosmscout-map
6  Copyright (C) 2010 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 <QtGui>
25 #include <QThread>
26 #include <QMetaType>
27 #include <QMutex>
28 #include <QTime>
29 #include <QTimer>
30 #include <QReadWriteLock>
31 
32 #include <osmscout/LocationEntry.h>
34 #include <osmscout/Database.h>
36 #include <osmscout/MapService.h>
37 #include <osmscout/MapPainterQt.h>
38 
39 #include <osmscout/Settings.h>
40 #include <osmscout/TileCache.h>
42 #include <osmscout/MapManager.h>
43 #include <osmscout/DBInstance.h>
44 #include <osmscout/DBJob.h>
45 
46 namespace osmscout {
47 
52 {
53  osmscout::GeoCoord coord;
54  osmscout::Bearing angle; // canvas clockwise
55  osmscout::Magnification magnification;
56  size_t width;
57  size_t height;
58  double dpi;
59 };
60 
61 inline bool operator!=(const MapViewStruct &r1, const MapViewStruct &r2)
62 {
63  return r1.coord!=r2.coord ||
64  r1.angle!=r2.angle ||
66  r1.width!=r2.width ||
67  r1.height!=r2.height ||
68  r1.dpi!=r2.dpi;
69 }
70 
75 {
76  osmscout::GeoBox boundingBox;
77 };
78 
84  Outside = 0,
85  Covered = 1,
87 };
88 
103 class OSMSCOUT_CLIENT_QT_API DBThread : public QObject
104 {
105  friend class OSMScoutQt; // accessing to protected constructor
106 
107  Q_OBJECT
108  Q_PROPERTY(QString stylesheetFilename READ GetStylesheetFilename NOTIFY stylesheetFilenameChanged)
109 
110 public:
111  using SynchronousDBJob = std::function<void (const std::list<DBInstanceRef> &)>;
112 
113 signals:
114  void initialisationFinished(const DatabaseLoadedResponse& response);
115  void stylesheetFilenameChanged();
116  void databaseLoadFinished(osmscout::GeoBox boundingBox);
117  void styleErrorsChanged();
118 
119 public slots:
120  void ToggleDaylight();
121  void onMapDPIChange(double dpi);
122  void SetStyleFlag(const QString &key, bool value);
123  void ReloadStyle(const QString &suffix="");
124  void LoadStyle(QString stylesheetFilename,
125  std::unordered_map<std::string,bool> stylesheetFlags,
126  const QString &suffix="");
127  void Initialize();
128  void onDatabaseListChanged(QList<QDir> databaseDirectories);
129 
133  void FlushCaches(qint64 idleMs);
134 
135 protected:
140 
141  double mapDpi;
142  double physicalDpi;
143 
144  mutable QReadWriteLock lock;
145 
146  osmscout::BasemapDatabaseParameter basemapDatabaseParameter;
148  osmscout::DatabaseParameter databaseParameter;
149  std::list<DBInstanceRef> databases;
150 
151  QString stylesheetFilename;
152  QString iconDirectory;
153  std::unordered_map<std::string,bool>
155  bool daylight;
156 
158  QList<StyleError> styleErrors;
159 
160  std::vector<std::string> customPoiTypes;
161 
162 protected:
163 
164  bool isInitializedInternal();
165 
166 public:
167  DBThread(QThread *backgroundThread,
168  QString basemapLookupDirectory,
169  QString iconDirectory,
170  SettingsRef settings,
171  MapManagerRef mapManager,
172  const std::vector<std::string> &customPoiTypes);
173 
174  ~DBThread() override;
175 
176  bool isInitialized();
177 
178  const DatabaseLoadedResponse loadedResponse() const;
179 
188  DatabaseCoverage databaseCoverage(const osmscout::Magnification &magnification,
189  const osmscout::GeoBox &bbox);
190 
191  double GetMapDpi() const;
192 
193  double GetPhysicalDpi() const;
194 
195  inline QString GetStylesheetFilename() const
196  {
197  return stylesheetFilename;
198  }
199 
200  const QList<StyleError> &GetStyleErrors() const
201  {
202  return styleErrors;
203  }
204 
205  const QMap<QString,bool> GetStyleFlags() const;
206 
215  void RunJob(DBJob *job);
216 
235  void RunSynchronousJob(SynchronousDBJob job);
236 
237 };
238 
239 using DBThreadRef = std::shared_ptr<DBThread>;
240 
241 }
242 
243 Q_DECLARE_METATYPE(osmscout::MapViewStruct)
244 Q_DECLARE_METATYPE(osmscout::DatabaseLoadedResponse)
245 
246 #endif
SettingsRef settings
Definition: DBThread.h:139
std::shared_ptr< Settings > SettingsRef
Definition: Settings.h:171
#define OSMSCOUT_CLIENT_QT_API
Definition: ClientQtImportExport.h:45
osmscout::BasemapDatabaseRef basemapDatabase
Definition: DBThread.h:147
Definition: DBThread.h:84
const QList< StyleError > & GetStyleErrors() const
Definition: DBThread.h:200
osmscout::Bearing angle
Definition: DBThread.h:54
QThread * backgroundThread
Definition: DBThread.h:136
std::shared_ptr< MapManager > MapManagerRef
Definition: MapManager.h:232
DatabaseCoverage
Definition: DBThread.h:83
osmscout::GeoCoord coord
Definition: DBThread.h:53
size_t height
Definition: DBThread.h:57
std::vector< std::string > customPoiTypes
Definition: DBThread.h:160
bool operator!=(const MapViewStruct &r1, const MapViewStruct &r2)
Definition: DBThread.h:61
osmscout::GeoBox boundingBox
Definition: DBThread.h:76
QString basemapLookupDirectory
Definition: DBThread.h:138
Definition: Area.h:38
Definition: DBThread.h:51
std::unordered_map< std::string, bool > stylesheetFlags
Definition: DBThread.h:154
double dpi
Definition: DBThread.h:58
double mapDpi
Definition: DBThread.h:141
std::shared_ptr< DBThread > DBThreadRef
Definition: DBThread.h:239
Definition: DBJob.h:40
Definition: OSMScoutQt.h:229
Setup internal state of renderer for executing next steps with current projection and parameters...
Definition: MapPainter.h:57
osmscout::BasemapDatabaseParameter basemapDatabaseParameter
Definition: DBThread.h:146
bool daylight
Definition: DBThread.h:155
size_t width
Definition: DBThread.h:56
Definition: DBThread.h:86
QString iconDirectory
Definition: DBThread.h:152
Definition: DBThread.h:85
std::function< void(const std::list< DBInstanceRef > &)> SynchronousDBJob
Definition: DBThread.h:111
std::list< DBInstanceRef > databases
Definition: DBThread.h:149
QReadWriteLock lock
Definition: DBThread.h:144
Definition: DBThread.h:74
bool renderError
Definition: DBThread.h:157
Definition: DBThread.h:103
std::shared_ptr< BasemapDatabase > BasemapDatabaseRef
Reference counted reference to an Database instance.
Definition: BasemapDatabase.h:88
double physicalDpi
Definition: DBThread.h:142
osmscout::Magnification magnification
Definition: DBThread.h:55
osmscout::DatabaseParameter databaseParameter
Definition: DBThread.h:148
QString GetStylesheetFilename() const
Definition: DBThread.h:195
MapManagerRef mapManager
Definition: DBThread.h:137
QList< StyleError > styleErrors
Definition: DBThread.h:158