QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
TileImageSource.h
Go to the documentation of this file.
1/****************************************************************************
2 *
3 * (c) 2009-2024 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
4 *
5 * QGroundControl is licensed according to the terms in the file
6 * COPYING.md in the root of the source code directory.
7 *
8 ****************************************************************************/
9
10#pragma once
11
12#include <QtCore/QElapsedTimer>
13#include <QtCore/QHash>
14#include <QtCore/QObject>
15#include <QtCore/QSet>
16#include <QtCore/QString>
17#include <QtGui/QImage>
18
19#include "TileMath.h"
20
21class QNetworkAccessManager;
22class QNetworkReply;
23
35class TileImageSource : public QObject
36{
37 Q_OBJECT
38
39public:
45 explicit TileImageSource(const QString& mapType, QObject* parent = nullptr,
46 QNetworkAccessManager* networkManager = nullptr);
47
48 QString mapType() const { return _mapType; }
49
51 int requestTileImage(const TileMath::TileKey& key);
52
54 void cancelRequest(int requestId);
55
56 int pendingCount() const { return _pending.count(); }
57
58signals:
59 void tileImageReady(int requestId, const QImage& image);
60 void tileImageFailed(int requestId);
61
62private:
63 void _fetchFromNetwork(int requestId, const TileMath::TileKey& key);
64 void _failAsync(int requestId);
65 void _deliver(int requestId, const TileMath::TileKey& key, const QByteArray& data);
66 void _finishSucceeded(int requestId, const QImage& image);
67 void _finishFailed(int requestId);
68 void _warnFailure(const TileMath::TileKey& key, const QString& reason);
69
70 static constexpr int kFailureWarnIntervalMs = 10000;
71
72 const QString _mapType;
73 const int _mapId;
74 QNetworkAccessManager* _networkManager = nullptr;
75 int _requestIdCounter = 0;
76 QSet<int> _pending;
77 QHash<int, QNetworkReply*> _activeReplies;
78 QElapsedTimer _failureWarnTimer;
79};
void tileImageFailed(int requestId)
void cancelRequest(int requestId)
Cancel a pending request, aborting any in-flight network fetch.
int requestTileImage(const TileMath::TileKey &key)
Request the image for a tile. Returns a request id (> 0).
int pendingCount() const
void tileImageReady(int requestId, const QImage &image)
QString mapType() const