FlightGear next
PreviewImageItem.hxx
Go to the documentation of this file.
1#ifndef PREVIEW_IMAGEITEM_HXX
2#define PREVIEW_IMAGEITEM_HXX
3
4#include <memory>
5
6#include <QQuickItem>
7#include <QUrl>
8#include <QImage>
9#include <QNetworkReply>
10
11class QNetworkAccessManager;
12
13class PreviewImageItem : public QQuickItem
14{
15 Q_OBJECT
16
17 Q_PROPERTY(QUrl imageUrl READ imageUrl WRITE setImageUrl NOTIFY imageUrlChanged)
18
19 Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
20
21 Q_PROPERTY(bool isLoading READ isLoading NOTIFY isLoadingChanged)
22
23 Q_PROPERTY(float aspectRatio READ aspectRatio NOTIFY sourceSizeChanged)
24public:
25 PreviewImageItem(QQuickItem* parent = nullptr);
27
28 QSGNode* updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
29
30 QUrl imageUrl() const;
31
32 QSize sourceSize() const;
33
34 static void setGlobalNetworkAccess(QNetworkAccessManager* netAccess);
35
36 bool isLoading() const;
37
38 float aspectRatio() const;
39
44 Q_INVOKABLE void clear();
45signals:
49
50public slots:
51
52 void setImageUrl(QUrl url);
53
54private slots:
55 void onDownloadError(QNetworkReply::NetworkError errorCode);
56
57 void onFinished();
58private:
59 void setImage(QImage image);
60 void startDownload();
61
62 QUrl m_imageUrl;
63
64 bool m_imageDirty = false;
65 QImage m_image;
66 unsigned int m_downloadRetryCount = 0;
67 bool m_requestActive = false;
68};
69
70#endif // PREVIEW_IMAGEITEM_HXX
static void setGlobalNetworkAccess(QNetworkAccessManager *netAccess)
QSGNode * updatePaintNode(QSGNode *, UpdatePaintNodeData *) override
void setImageUrl(QUrl url)
PreviewImageItem(QQuickItem *parent=nullptr)
void isLoadingChanged()
Q_INVOKABLE void clear()
clear the image immediately, so we don't see a stale / expired one while attemtping to load the next ...
void imageUrlChanged()
void sourceSizeChanged()