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,14 @@ 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; + bool m_downloadFinished; }; #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() @@ -57,7 +58,7 @@ { m_currentJob = reportItemMaps; int zoom = m_currentJob->zoom(); - //kreportpluginDebug() << "Map Renderer rendering" << m_currentJob->longtitude() << m_currentJob->latitude(); + kreportpluginDebug() << "Map Renderer rendering" << m_currentJob->longtitude() << m_currentJob->latitude(); m_marble.setMapThemeId(m_currentJob->themeId()); //some themes enable overview map, and this must be disabled after theme switch. @@ -72,12 +73,15 @@ if (m_marble.renderStatus() == Marble::Complete) { m_currentJob->renderFinished(); + } else { + m_retryTimer.start(1000); } + } void KReportMapRenderer::onRenderStatusChange(Marble::RenderStatus renderStatus) { - //kreportpluginDebug() << m_marble.renderStatus() << "|" << renderStatus; + kreportpluginDebug() << m_marble.renderStatus() << "|" << renderStatus; if(m_currentJob){ /*kreportpluginDebug() @@ -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; + 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 @@ -398,6 +398,7 @@ { //kreportDebug() << "Finished rendering async items"; delete asyncManager; + 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 refresh(); 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::refresh() +{ + qDebug() << "Refreshing current page" << d->currentPage; + if (d->reportPage) { + d->reportPage->renderPage(d->currentPage); + } +} +