diff --git a/src/plugins/maps/KReportMapRenderer.h b/src/plugins/maps/KReportMapRenderer.h --- a/src/plugins/maps/KReportMapRenderer.h +++ b/src/plugins/maps/KReportMapRenderer.h @@ -23,6 +23,8 @@ #include #include +#include + #include "kreportplugin_debug.h" class KReportItemMaps; @@ -40,11 +42,13 @@ private Q_SLOTS: void onRenderStatusChange(Marble::RenderStatus renderStatus); void downloadProgres(int active, int queued); - void downloadFinished(); + void retryRender(); private: Marble::MarbleMap m_marble; KReportItemMaps* m_currentJob; + + QTimer m_retryTimer; }; #endif // MAPRENDERER_H diff --git a/src/plugins/maps/KReportMapRenderer.cpp b/src/plugins/maps/KReportMapRenderer.cpp --- a/src/plugins/maps/KReportMapRenderer.cpp +++ b/src/plugins/maps/KReportMapRenderer.cpp @@ -46,6 +46,7 @@ connect(m_marble.model()->downloadManager(), &Marble::HttpDownloadManager::progressChanged, this, &KReportMapRenderer::downloadProgres); connect(&m_marble, &Marble::MarbleMap::renderStatusChanged, this, &KReportMapRenderer::onRenderStatusChange); + connect(&m_retryTimer, &QTimer::timeout, this, &KReportMapRenderer::retryRender); } KReportMapRenderer::~KReportMapRenderer() @@ -72,7 +73,10 @@ if (m_marble.renderStatus() == Marble::Complete) { m_currentJob->renderFinished(); + } else { + m_retryTimer.start(1000); } + } void KReportMapRenderer::onRenderStatusChange(Marble::RenderStatus renderStatus) @@ -94,20 +98,28 @@ } } -void KReportMapRenderer::downloadFinished() -{ - //kreportpluginDebug() << "job:" << m_currentJob - //<< "(" << m_currentJob->latitude() << "," << m_currentJob->longtitude() << ")"; -} - void KReportMapRenderer::downloadProgres(int active, int queued) { Q_UNUSED(active) Q_UNUSED(queued) - if(m_currentJob){ - //kreportpluginDebug() << "job:" << m_currentJob - //<< "(" << m_currentJob->latitude() << "," << m_currentJob->longtitude() << ")" - //<< "active/queued:" << active << "/" << queued; + //if(m_currentJob){ + // kreportpluginDebug() << "job:" << m_currentJob + // << "(" << m_currentJob->latitude() << "," << m_currentJob->longtitude() << ")" + // << "active/queued:" << active << "/" << queued; + //} +} + +void KReportMapRenderer::retryRender() +{ + //kreportpluginDebug() << "Retrying map render"; + + // Create a painter that will do the painting. + Marble::GeoPainter geoPainter( m_currentJob->oroImage()->picture(), m_marble.viewport(), m_marble.mapQuality() ); + m_marble.paint( geoPainter, QRect() ); + + if (m_marble.renderStatus() == Marble::Complete) { + m_retryTimer.stop(); + m_currentJob->renderFinished(); } } diff --git a/src/renderer/KReportPreRenderer.h b/src/renderer/KReportPreRenderer.h --- a/src/renderer/KReportPreRenderer.h +++ b/src/renderer/KReportPreRenderer.h @@ -71,7 +71,8 @@ Q_SIGNALS: void groupChanged(const QMap &groupData); - + void finishedAllASyncItems(); + private: bool setDocument(const QDomElement &document); diff --git a/src/renderer/KReportPreRenderer.cpp b/src/renderer/KReportPreRenderer.cpp --- a/src/renderer/KReportPreRenderer.cpp +++ b/src/renderer/KReportPreRenderer.cpp @@ -397,7 +397,8 @@ void KReportPreRendererPrivate::asyncItemsFinished() { //kreportDebug() << "Finished rendering async items"; - delete asyncManager; + asyncManager->deleteLater(); + emit finishedAllASyncItems(); } bool KReportPreRendererPrivate::generateDocument() @@ -621,6 +622,8 @@ : d(new KReportPreRendererPrivate(this)) { setDocument(document); + connect(d, &KReportPreRendererPrivate::finishedAllASyncItems, this, &KReportPreRenderer::finishedAllASyncItems); + } KReportPreRenderer::~KReportPreRenderer() diff --git a/src/renderer/KReportPreRenderer_p.h b/src/renderer/KReportPreRenderer_p.h --- a/src/renderer/KReportPreRenderer_p.h +++ b/src/renderer/KReportPreRenderer_p.h @@ -96,6 +96,7 @@ void enteredGroup(const QString&, const QVariant&); void exitedGroup(const QString&, const QVariant&); void renderingSection(KReportSectionData*, OROPage*, QPointF); + void finishedAllASyncItems(); }; #endif // __KOREPORTPRERENDERER_P_H__ diff --git a/src/renderer/KReportView.h b/src/renderer/KReportView.h --- a/src/renderer/KReportView.h +++ b/src/renderer/KReportView.h @@ -45,6 +45,7 @@ void moveToPreviousPage(); int currentPage() const; int pageCount() const; + void refreshCurrentPage(); void setDocument(ORODocument* doc); QAbstractScrollArea* scrollArea(); diff --git a/src/renderer/KReportView.cpp b/src/renderer/KReportView.cpp --- a/src/renderer/KReportView.cpp +++ b/src/renderer/KReportView.cpp @@ -156,3 +156,11 @@ return d->reportView; } +void KReportView::refreshCurrentPage() +{ + //qDebug() << "Refreshing current page" << d->currentPage; + if (d->reportPage) { + d->reportPage->renderPage(d->currentPage); + } +} +