From 253a76a255b663fb9d25c7ac88cee9a3335877d7 Mon Sep 17 00:00:00 2001 From: Arin Alex Date: Fri, 21 Nov 2025 17:01:13 +0300 Subject: [PATCH] Progress indicator has been refactored --- demo_r1/mainwindow.cpp | 16 +++++----------- demo_r1/mainwindow.ui | 26 +++++++++++++++++++++++++- limereport/lrreportengine.cpp | 31 +++++++++++++++++++++++++++++++ limereport/lrreportengine_p.h | 7 +++++++ 4 files changed, 68 insertions(+), 12 deletions(-) diff --git a/demo_r1/mainwindow.cpp b/demo_r1/mainwindow.cpp index a5ce92b..fe599a6 100644 --- a/demo_r1/mainwindow.cpp +++ b/demo_r1/mainwindow.cpp @@ -162,24 +162,18 @@ void MainWindow::on_pushButton_2_clicked() #ifdef BUILD_WITH_EASY_PROFILER profiler::dumpBlocksToFile("test.prof"); #endif - // QPrinter* printer = new QPrinter; - // QPrintDialog dialog(printer); - // if (dialog.exec()){ - // QMap printers; - // printers.insert("default",printer); - // report->printReport(printers); - // } - report->setShowProgressDialog(true); + report->setShowProgressDialog(ui->rb_builtInIndicator->isChecked()); report->previewReport(); } } void MainWindow::renderStarted() { - if (report->isShowProgressDialog()) { + if (ui->rb_customIndicator->isChecked()) { m_currentPage = 0; - m_progressDialog = new QProgressDialog(tr("Start render"), tr("Cancel"), 0, 0, this); - // m_progressDialog->setWindowModality(Qt::WindowModal); + m_progressDialog = new QProgressDialog(tr("Custom indicator"), tr("Cancel"), 0, 0, this); + m_progressDialog->setWindowTitle(tr("Custom indicator")); + m_progressDialog->setGeometry(QRect(0, 0, 300, 100)); connect(m_progressDialog, SIGNAL(canceled()), report, SLOT(cancelRender())); QApplication::processEvents(); m_progressDialog->show(); diff --git a/demo_r1/mainwindow.ui b/demo_r1/mainwindow.ui index 52eebe9..2206866 100644 --- a/demo_r1/mainwindow.ui +++ b/demo_r1/mainwindow.ui @@ -7,7 +7,7 @@ 0 0 369 - 192 + 289 @@ -95,6 +95,30 @@ + + + + Buildin progress indicator + + + true + + + + + + + Custom progress indicator + + + + + + + No progress indicator + + + diff --git a/limereport/lrreportengine.cpp b/limereport/lrreportengine.cpp index 6df5e8c..46d9f86 100644 --- a/limereport/lrreportengine.cpp +++ b/limereport/lrreportengine.cpp @@ -130,6 +130,8 @@ ReportEnginePrivate::ReportEnginePrivate(QObject* parent): SLOT(slotDataSourceCollectionLoaded(QString))); connect(m_fileWatcher, SIGNAL(fileChanged(const QString&)), this, SLOT(slotLoadFromFile(const QString&))); + connect(this, SIGNAL(renderPageFinished(int)), this, SLOT(slotPageRenderFinished(int))); + connect(this, SIGNAL(renderFinished()), this, SLOT(slotRenderFinished())); #ifndef HAVE_REPORT_DESIGNER @@ -263,6 +265,34 @@ void ReportEnginePrivate::slotDesignerWindowDestroyed(QObject* window) dataManager()->setDesignTime(false); } +void ReportEnginePrivate::slotRenderStarted() +{ + if (m_showProgressDialog) { + if (!m_progressDialog) { + m_progressDialog = new QProgressDialog(tr("Start render"), tr("Cancel"), 0, 0, 0); + connect(m_progressDialog, SIGNAL(canceled()), this, SLOT(cancelRender())); + } + m_progressDialog->show(); + } +} + +void ReportEnginePrivate::slotPageRenderFinished(int renderedPageCount) +{ + if (m_progressDialog) { + m_progressDialog->setLabelText(QString::number(renderedPageCount) + tr(" page rendered")); + m_progressDialog->setValue(renderedPageCount); + } +} + +void ReportEnginePrivate::slotRenderFinished() +{ + if (m_progressDialog){ + m_progressDialog->close(); + delete m_progressDialog; + m_progressDialog = 0; + } +} + void ReportEnginePrivate::clearReport() { foreach (PageDesignIntf* page, m_pages) @@ -560,6 +590,7 @@ void ReportEnginePrivate::previewReport(QPrinter* printer, PreviewHints hints) { try { dataManager()->setDesignTime(false); + connect(this, SIGNAL(renderStarted()), this, SLOT(slotRenderStarted())); ReportPages pages = renderToPages(); dataManager()->setDesignTime(true); showPreviewWindow(pages, hints, printer); diff --git a/limereport/lrreportengine_p.h b/limereport/lrreportengine_p.h index 0282b12..1ccd322 100644 --- a/limereport/lrreportengine_p.h +++ b/limereport/lrreportengine_p.h @@ -46,6 +46,7 @@ #include #include #include +#include class QFileSystemWatcher; @@ -315,11 +316,16 @@ protected: PageDesignIntf* createPage(const QString& pageName = "", bool preview = false); bool showPreviewWindow(ReportPages pages, PreviewHints hints, QPrinter* printer); void internalPrintPages(ReportPages pages, QPrinter& printer); + protected slots: void slotDataSourceCollectionLoaded(const QString& collectionName); + private slots: void slotPreviewWindowDestroyed(QObject* window); void slotDesignerWindowDestroyed(QObject* window); + void slotRenderStarted(); + void slotPageRenderFinished(int renderedPageCount); + void slotRenderFinished(); private: // ICollectionContainer @@ -391,6 +397,7 @@ private: QColor m_previewPageBackgroundColor; QVector m_watermarks; BaseDesignIntf* createWatermark(PageDesignIntf* page, WatermarkSetting watermarkSetting); + QProgressDialog* m_progressDialog = 0; bool m_saveToFileVisible; bool m_printToPdfVisible; bool m_printVisible;