Preview Widget refactored.

This commit is contained in:
Arin Alex 2016-04-02 03:38:23 +03:00
parent 2aec1cfc26
commit b315af26b9
5 changed files with 106 additions and 54 deletions

View File

@ -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;

View File

@ -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());

View File

@ -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;

View File

@ -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;
};

View File

@ -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)