From b315af26b908f1f3c81b22e1572c8d16c1908ddd Mon Sep 17 00:00:00 2001 From: Arin Alex Date: Sat, 2 Apr 2016 03:38:23 +0300 Subject: [PATCH] Preview Widget refactored. --- include/lrpreviewreportwidget.h | 26 +++++---- limereport/lrpreviewreportwidget.cpp | 81 ++++++++++++++++++++-------- limereport/lrpreviewreportwidget.h | 26 +++++---- limereport/lrpreviewreportwidget_p.h | 7 ++- limereport/lrpreviewreportwindow.cpp | 20 +++---- 5 files changed, 106 insertions(+), 54 deletions(-) diff --git a/include/lrpreviewreportwidget.h b/include/lrpreviewreportwidget.h index 220843b..d9cde20 100644 --- a/include/lrpreviewreportwidget.h +++ b/include/lrpreviewreportwidget.h @@ -24,20 +24,25 @@ public: ~PreviewReportWidget(); public slots: void refreshPages(); - void slotZoomIn(); - void slotZoomOut(); + void zoomIn(); + void zoomOut(); - void slotFirstPage(); - void slotPriorPage(); - void slotNextPage(); - void slotLastPage(); + void firstPage(); + void priorPage(); + void nextPage(); + void lastPage(); - void slotPrint(); - void slotPrintToPDF(); - void slotPageNavigatorChanged(int value); - void slotSaveToFile(); + void print(); + void printToPDF(); + void pageNavigatorChanged(int value); + void saveToFile(); + void setScalePercent(int percent); + void fitWidth(); + void fitPage(); signals: void pageChanged(int page); + void scalePercentChanged(int percent); + void pagesSet(int pageCount); private slots: void slotSliderMoved(int value); void reportEngineDestroyed(QObject* object); @@ -45,6 +50,7 @@ private: void initPreview(); void setErrorsMesagesVisible(bool visible); void setErrorMessages(const QStringList &value); + void emitPageSet(); private: Ui::PreviewReportWidget *ui; PreviewReportWidgetPrivate* d_ptr; diff --git a/limereport/lrpreviewreportwidget.cpp b/limereport/lrpreviewreportwidget.cpp index d1a8142..117dc24 100644 --- a/limereport/lrpreviewreportwidget.cpp +++ b/limereport/lrpreviewreportwidget.cpp @@ -46,9 +46,17 @@ void PreviewReportWidgetPrivate::setPages(ReportPages pages) if (pages.at(0)) pages.at(0)->setSelected(true); m_changingPage = false; q_ptr->initPreview(); + q_ptr->emitPageSet(); } } +PageItemDesignIntf::Ptr PreviewReportWidgetPrivate::currentPage() +{ + if (m_reportPages.count()>m_currentPage) + return m_reportPages.at(m_currentPage-1); + else return PageItemDesignIntf::Ptr(0); +} + PreviewReportWidget::PreviewReportWidget(ReportEnginePrivate *report, QWidget *parent) : QWidget(parent), ui(new Ui::PreviewReportWidget), d_ptr(new PreviewReportWidgetPrivate(this)) @@ -75,10 +83,11 @@ PreviewReportWidget::~PreviewReportWidget() void PreviewReportWidget::initPreview() { + if (ui->graphicsView->scene()!=d_ptr->m_previewPage) + ui->graphicsView->setScene(d_ptr->m_previewPage); ui->graphicsView->resetMatrix(); - ui->graphicsView->setScene(d_ptr->m_previewPage); ui->graphicsView->centerOn(0, 0); - ui->graphicsView->scale(0.5,0.5); + setScalePercent(d_ptr->m_scalePercent); } void PreviewReportWidget::setErrorsMesagesVisible(bool visible) @@ -86,17 +95,20 @@ void PreviewReportWidget::setErrorsMesagesVisible(bool visible) ui->errorsView->setVisible(visible); } -void PreviewReportWidget::slotZoomIn() +void PreviewReportWidget::zoomIn() { - ui->graphicsView->scale(1.2,1.2); + d_ptr->m_scalePercent += 10; + setScalePercent(d_ptr->m_scalePercent); } -void PreviewReportWidget::slotZoomOut() +void PreviewReportWidget::zoomOut() { - ui->graphicsView->scale(1/1.2,1/1.2); + if (d_ptr->m_scalePercent>0) + d_ptr->m_scalePercent -= 10; + setScalePercent(d_ptr->m_scalePercent); } -void PreviewReportWidget::slotFirstPage() +void PreviewReportWidget::firstPage() { d_ptr->m_changingPage=true; if ((!d_ptr->m_reportPages.isEmpty())&&(d_ptr->m_currentPage>1)){ @@ -107,7 +119,7 @@ void PreviewReportWidget::slotFirstPage() d_ptr->m_changingPage=false; } -void PreviewReportWidget::slotPriorPage() +void PreviewReportWidget::priorPage() { d_ptr->m_changingPage=true; if ((!d_ptr->m_reportPages.isEmpty())&&(d_ptr->m_currentPage>1)){ @@ -118,7 +130,7 @@ void PreviewReportWidget::slotPriorPage() d_ptr->m_changingPage=false; } -void PreviewReportWidget::slotNextPage() +void PreviewReportWidget::nextPage() { d_ptr->m_changingPage=true; if ((!d_ptr->m_reportPages.isEmpty())&&(d_ptr->m_reportPages.count()>(d_ptr->m_currentPage))){ @@ -129,7 +141,7 @@ void PreviewReportWidget::slotNextPage() d_ptr->m_changingPage=false; } -void PreviewReportWidget::slotLastPage() +void PreviewReportWidget::lastPage() { d_ptr->m_changingPage=true; if ((!d_ptr->m_reportPages.isEmpty())&&(d_ptr->m_reportPages.count()>(d_ptr->m_currentPage))){ @@ -140,7 +152,7 @@ void PreviewReportWidget::slotLastPage() d_ptr->m_changingPage=false; } -void PreviewReportWidget::slotPrint() +void PreviewReportWidget::print() { QPrinter printer(QPrinter::HighResolution); QPrintDialog dialog(&printer,QApplication::activeWindow()); @@ -151,10 +163,13 @@ void PreviewReportWidget::slotPrint() printer, PrintRange(dialog.printRange(),dialog.fromPage(),dialog.toPage()) ); + foreach(PageItemDesignIntf::Ptr pageItem, d_ptr->m_reportPages){ + d_ptr->m_previewPage->reactivatePageItem(pageItem); + } } } -void PreviewReportWidget::slotPrintToPDF() +void PreviewReportWidget::printToPDF() { QString fileName = QFileDialog::getSaveFileName(this,tr("PDF file name"),"","PDF(*.pdf)" ); if (!fileName.isEmpty()){ @@ -170,7 +185,7 @@ void PreviewReportWidget::slotPrintToPDF() } } -void PreviewReportWidget::slotPageNavigatorChanged(int value) +void PreviewReportWidget::pageNavigatorChanged(int value) { if (d_ptr->m_changingPage) return; d_ptr->m_changingPage = true; @@ -181,7 +196,7 @@ void PreviewReportWidget::slotPageNavigatorChanged(int value) d_ptr->m_changingPage=false; } -void PreviewReportWidget::slotSaveToFile() +void PreviewReportWidget::saveToFile() { QString fileName = QFileDialog::getSaveFileName(this,tr("Report file name")); if (!fileName.isEmpty()){ @@ -193,6 +208,31 @@ void PreviewReportWidget::slotSaveToFile() } } +void PreviewReportWidget::setScalePercent(int percent) +{ + ui->graphicsView->resetMatrix(); + qreal scaleSize = percent/100.0; + ui->graphicsView->scale(scaleSize, scaleSize); + emit scalePercentChanged(percent); +} + +void PreviewReportWidget::fitWidth() +{ + if (d_ptr->currentPage()){ + qreal scalePercent = ui->graphicsView->viewport()->width() / ui->graphicsView->scene()->width(); + setScalePercent(scalePercent*100); + } +} + +void PreviewReportWidget::fitPage() +{ + if (d_ptr->currentPage()){ + qreal vScale = ui->graphicsView->viewport()->width() / ui->graphicsView->scene()->width(); + qreal hScale = ui->graphicsView->viewport()->height() / d_ptr->currentPage()->height(); + setScalePercent(qMin(vScale,hScale)*100); + } +} + void PreviewReportWidget::setErrorMessages(const QStringList &value) { foreach (QString line, value) { @@ -200,6 +240,11 @@ void PreviewReportWidget::setErrorMessages(const QStringList &value) } } +void PreviewReportWidget::emitPageSet() +{ + emit pagesSet(d_ptr->m_reportPages.count()); +} + void PreviewReportWidget::refreshPages() { if (d_ptr->m_report){ @@ -209,14 +254,6 @@ void PreviewReportWidget::refreshPages() d_ptr->m_report->dataManager()->setDesignTime(true); if (pages.count()>0){ d_ptr->setPages(pages); - if (!d_ptr->m_reportPages.isEmpty()){ - d_ptr->m_previewPage->setPageItems(d_ptr->m_reportPages); - d_ptr->m_changingPage = true; - d_ptr->m_currentPage = 1; - if (pages.at(0)) pages.at(0)->setSelected(true); - d_ptr->m_changingPage = false; - } - ui->graphicsView->centerOn(0, 0); } } catch (ReportError &exception){ d_ptr->m_report->saveError(exception.what()); diff --git a/limereport/lrpreviewreportwidget.h b/limereport/lrpreviewreportwidget.h index 220843b..d9cde20 100644 --- a/limereport/lrpreviewreportwidget.h +++ b/limereport/lrpreviewreportwidget.h @@ -24,20 +24,25 @@ public: ~PreviewReportWidget(); public slots: void refreshPages(); - void slotZoomIn(); - void slotZoomOut(); + void zoomIn(); + void zoomOut(); - void slotFirstPage(); - void slotPriorPage(); - void slotNextPage(); - void slotLastPage(); + void firstPage(); + void priorPage(); + void nextPage(); + void lastPage(); - void slotPrint(); - void slotPrintToPDF(); - void slotPageNavigatorChanged(int value); - void slotSaveToFile(); + void print(); + void printToPDF(); + void pageNavigatorChanged(int value); + void saveToFile(); + void setScalePercent(int percent); + void fitWidth(); + void fitPage(); signals: void pageChanged(int page); + void scalePercentChanged(int percent); + void pagesSet(int pageCount); private slots: void slotSliderMoved(int value); void reportEngineDestroyed(QObject* object); @@ -45,6 +50,7 @@ private: void initPreview(); void setErrorsMesagesVisible(bool visible); void setErrorMessages(const QStringList &value); + void emitPageSet(); private: Ui::PreviewReportWidget *ui; PreviewReportWidgetPrivate* d_ptr; diff --git a/limereport/lrpreviewreportwidget_p.h b/limereport/lrpreviewreportwidget_p.h index 6d2a8b9..695b605 100644 --- a/limereport/lrpreviewreportwidget_p.h +++ b/limereport/lrpreviewreportwidget_p.h @@ -12,11 +12,13 @@ class PreviewReportWidget; class PreviewReportWidgetPrivate { public: - PreviewReportWidgetPrivate(PreviewReportWidget* previewReportWidget): q_ptr(previewReportWidget), - m_currentPage(1), m_changingPage(false), m_priorScrolValue(0){} + PreviewReportWidgetPrivate(PreviewReportWidget* previewReportWidget): + m_currentPage(1), m_changingPage(false), m_priorScrolValue(0), m_scalePercent(50), + q_ptr(previewReportWidget) {} bool pageIsVisible(); QRectF calcPageShift(); void setPages( ReportPages pages); + PageItemDesignIntf::Ptr currentPage(); public: PageDesignIntf* m_previewPage; ReportPages m_reportPages; @@ -25,6 +27,7 @@ public: int m_currentPage; bool m_changingPage; int m_priorScrolValue; + int m_scalePercent; PreviewReportWidget* q_ptr; }; diff --git a/limereport/lrpreviewreportwindow.cpp b/limereport/lrpreviewreportwindow.cpp index b4ec3ac..cf1296d 100644 --- a/limereport/lrpreviewreportwindow.cpp +++ b/limereport/lrpreviewreportwindow.cpp @@ -203,32 +203,32 @@ void PreviewReportWindow::moveEvent(QMoveEvent* e) void PreviewReportWindow::slotPrint() { - m_previewReportWidget->slotPrint(); + m_previewReportWidget->print(); } void PreviewReportWindow::slotPriorPage() { - m_previewReportWidget->slotPriorPage(); + m_previewReportWidget->priorPage(); } void PreviewReportWindow::slotNextPage() { - m_previewReportWidget->slotNextPage(); + m_previewReportWidget->nextPage(); } void PreviewReportWindow::slotZoomIn() { - m_previewReportWidget->slotZoomIn(); + m_previewReportWidget->zoomIn(); } void PreviewReportWindow::slotZoomOut() { - m_previewReportWidget->slotZoomOut(); + m_previewReportWidget->zoomOut(); } void PreviewReportWindow::slotPageNavigatorChanged(int value) { - m_previewReportWidget->slotPageNavigatorChanged(value); + m_previewReportWidget->pageNavigatorChanged(value); } void PreviewReportWindow::slotShowErrors() @@ -243,22 +243,22 @@ ItemsReaderIntf *PreviewReportWindow::reader() void PreviewReportWindow::on_actionSaveToFile_triggered() { - m_previewReportWidget->slotSaveToFile(); + m_previewReportWidget->saveToFile(); } void PreviewReportWindow::slotFirstPage() { - m_previewReportWidget->slotFirstPage(); + m_previewReportWidget->firstPage(); } void PreviewReportWindow::slotLastPage() { - m_previewReportWidget->slotLastPage(); + m_previewReportWidget->lastPage(); } void PreviewReportWindow::slotPrintToPDF() { - m_previewReportWidget->slotPrintToPDF(); + m_previewReportWidget->printToPDF(); } void PreviewReportWindow::slotPageChanged(int pageIndex)