QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGCMapEngineManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QLoggingCategory>
4#include <QtQmlIntegration/QtQmlIntegration>
5
6#include "QGCTileSet.h"
7#include "QGCMapTasks.h"
8
9Q_DECLARE_LOGGING_CATEGORY(QGCMapEngineManagerLog)
10
14
15class QGCMapEngineManager : public QObject
16{
17 Q_OBJECT
18 // QML_ELEMENT
19 // QML_UNCREATABLE("")
20 Q_MOC_INCLUDE("QmlObjectListModel.h")
21 Q_MOC_INCLUDE("QGCCachedTileSet.h")
22 Q_PROPERTY(bool fetchElevation MEMBER _fetchElevation NOTIFY fetchElevationChanged)
23 Q_PROPERTY(bool importReplace MEMBER _importReplace NOTIFY importReplaceChanged)
24 Q_PROPERTY(ImportAction importAction READ importAction WRITE setImportAction NOTIFY importActionChanged)
25 Q_PROPERTY(int actionProgress READ actionProgress NOTIFY actionProgressChanged)
26 Q_PROPERTY(int selectedCount READ selectedCount NOTIFY selectedCountChanged)
27 Q_PROPERTY(QmlObjectListModel *tileSets READ tileSets NOTIFY tileSetsChanged)
28 Q_PROPERTY(QString errorMessage READ errorMessage NOTIFY errorMessageChanged)
29 Q_PROPERTY(QString tileCountStr READ tileCountStr NOTIFY tileCountChanged)
30 Q_PROPERTY(QString tileSizeStr READ tileSizeStr NOTIFY tileSizeChanged)
31 Q_PROPERTY(QStringList mapList READ mapList CONSTANT)
32 Q_PROPERTY(QStringList mapProviderList READ mapProviderList CONSTANT)
33 Q_PROPERTY(QStringList elevationProviderList READ elevationProviderList CONSTANT)
34 Q_PROPERTY(quint64 tileCount READ tileCount NOTIFY tileCountChanged)
35 Q_PROPERTY(quint64 tileSize READ tileSize NOTIFY tileSizeChanged)
36
37public:
38 explicit QGCMapEngineManager(QObject *parent = nullptr);
40 static QGCMapEngineManager *instance();
41
42 enum class ImportAction {
43 ActionNone,
44 ActionImporting,
45 ActionExporting,
46 ActionDone,
47 };
48 Q_ENUM(ImportAction)
49
50 Q_INVOKABLE bool exportSets(const QString &path = QString());
51 Q_INVOKABLE bool findName(const QString &name) const;
52 Q_INVOKABLE bool importSets(const QString &path = QString());
53
58 Q_INVOKABLE bool importArchive(const QString &archivePath);
59 Q_INVOKABLE QString getUniqueName() const;
60 Q_INVOKABLE void deleteTileSet(QGCCachedTileSet *tileSet);
61 Q_INVOKABLE void loadTileSets();
62 Q_INVOKABLE void renameTileSet(QGCCachedTileSet *tileSet, const QString &newName);
63 Q_INVOKABLE void resetAction() { setImportAction(ImportAction::ActionNone); }
64 Q_INVOKABLE void selectAll();
65 Q_INVOKABLE void selectNone();
66 Q_INVOKABLE void startDownload(const QString &name, const QString &mapType);
67 Q_INVOKABLE void updateForCurrentView(double lon0, double lat0, double lon1, double lat1, int minZoom, int maxZoom, const QString &mapName);
68
69 Q_INVOKABLE static QString loadSetting(const QString &key, const QString &defaultValue);
70 Q_INVOKABLE static QStringList mapTypeList(const QString &provider);
71 Q_INVOKABLE static void saveSetting(const QString &key, const QString &value);
72
73 ImportAction importAction() const { return _importAction; }
74 int actionProgress() const { return _actionProgress; }
75 int selectedCount() const;
76 QmlObjectListModel *tileSets() { return _tileSets; }
77 QString errorMessage() const { return _errorMessage; }
78 QString tileCountStr() const;
79 QString tileSizeStr() const;
80 quint64 tileCount() const { return (_imageSet.tileCount + _elevationSet.tileCount); }
81 quint64 tileSize() const { return (_imageSet.tileSize + _elevationSet.tileSize); }
82
83 void setActionProgress(int percentage) { if (percentage != _actionProgress) { _actionProgress = percentage; emit actionProgressChanged(); } }
84 void setErrorMessage(const QString &error) { if (error != _errorMessage) { _errorMessage = error; emit errorMessageChanged(); } }
85 void setImportAction(ImportAction action) { if (action != _importAction) { _importAction = action; emit importActionChanged(); } }
86
87 static QStringList mapList();
88 static QStringList mapProviderList();
89 static QStringList elevationProviderList();
90
91signals:
102
103public slots:
104 void taskError(QGCMapTask::TaskType type, const QString &error);
105
106private slots:
107 void _actionCompleted();
108 void _actionProgressHandler(int percentage) { setActionProgress(percentage); }
109 void _resetCompleted() { loadTileSets(); }
110 void _tileSetDeleted(quint64 setID);
111 void _tileSetFetched(QGCCachedTileSet *tileSets);
112 void _tileSetSaved(QGCCachedTileSet *set);
113 void _updateTotals(quint32 totaltiles, quint64 totalsize, quint32 defaulttiles, quint64 defaultsize);
114 void _handleExtractionProgress(qreal progress);
115 void _handleExtractionFinished(bool success);
116
117private:
118 QmlObjectListModel *_tileSets = nullptr;
119 QGCTileSet _imageSet;
120 QGCTileSet _elevationSet;
121 ImportAction _importAction = ImportAction::ActionNone;
122 double _topleftLat = 0.;
123 double _topleftLon = 0.;
124 double _bottomRightLat = 0.;
125 double _bottomRightLon = 0.;
126 int _minZoom = 0;
127 int _maxZoom = 0;
128 int _actionProgress = 0;
129 quint64 _setID = UINT64_MAX;
130 QString _errorMessage;
131 bool _fetchElevation = true;
132 bool _importReplace = false;
133 QGCCompressionJob *_extractionJob = nullptr;
134 QString _extractionOutputDir;
135
136 static constexpr const char *kQmlOfflineMapKeyName = "QGCOfflineMap";
137};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
Error error
void taskError(QGCMapTask::TaskType type, const QString &error)
void fetchElevationChanged()
void actionProgressChanged()
quint64 tileCount
Definition QGCTileSet.h:29
quint64 tileSize
Definition QGCTileSet.h:30