diff --git a/glabels/PageRenderer.cpp b/glabels/PageRenderer.cpp index ba48c9c..bb16138 100644 --- a/glabels/PageRenderer.cpp +++ b/glabels/PageRenderer.cpp @@ -134,13 +134,25 @@ namespace glabels } + /// + /// Print page using persistent page number + /// void PageRenderer::printPage( QPainter* painter ) const + { + printPage( painter, mIPage ); + } + + + /// + /// Print page + /// + void PageRenderer::printPage( QPainter* painter, int iPage ) const { if ( mModel ) { /// @TODO merge case - printSimplePage( painter, mIPage ); + printSimplePage( painter, iPage ); } } diff --git a/glabels/PageRenderer.h b/glabels/PageRenderer.h index 43d9b2c..9996df4 100644 --- a/glabels/PageRenderer.h +++ b/glabels/PageRenderer.h @@ -63,6 +63,7 @@ namespace glabels int nPages() const; QRectF pageRect() const; void printPage( QPainter* painter ) const; + void printPage( QPainter* painter, int iPage ) const; ///////////////////////////////// diff --git a/glabels/PrintView.cpp b/glabels/PrintView.cpp index abc3aa1..56de901 100644 --- a/glabels/PrintView.cpp +++ b/glabels/PrintView.cpp @@ -22,6 +22,7 @@ #include "LabelModel.h" +#include #include @@ -35,8 +36,18 @@ namespace glabels : QWidget(parent), mModel(0), mBlocked(false) { setupUi( this ); - preview->setRenderer( &mRenderer ); + + mPrinter = new QPrinter( QPrinter::HighResolution ); + } + + + /// + /// Destructor + /// + PrintView::~PrintView() + { + delete mPrinter; } @@ -45,8 +56,6 @@ namespace glabels /// void PrintView::setModel( LabelModel* model ) { - int nLabelsPerPage = model->frame()->nLabels(); - mModel = model; // TODO set visibility based on merge selection @@ -129,7 +138,38 @@ namespace glabels /// void PrintView::onPrintButtonClicked() { - qDebug() << "Print!"; + QSizeF pageSize( mModel->tmplate()->pageWidth(), mModel->tmplate()->pageHeight() ); + mPrinter->setPaperSize( pageSize, QPrinter::Point ); + mPrinter->setFullPage( true ); + mPrinter->setPageMargins( 0, 0, 0, 0, QPrinter::Point ); + + QPrintDialog printDialog( mPrinter, this ); + + printDialog.setOption( QAbstractPrintDialog::PrintToFile, true ); + printDialog.setOption( QAbstractPrintDialog::PrintSelection, false ); + printDialog.setOption( QAbstractPrintDialog::PrintPageRange, false ); + printDialog.setOption( QAbstractPrintDialog::PrintShowPageSize, true ); + printDialog.setOption( QAbstractPrintDialog::PrintCollateCopies, false ); + printDialog.setOption( QAbstractPrintDialog::PrintCurrentPage, false ); + + if ( printDialog.exec() == QDialog::Accepted ) + { + QPainter painter( mPrinter ); + + QSizeF sizePx = mPrinter->paperSize( QPrinter::DevicePixel ); + QSizeF sizePts = mPrinter->paperSize( QPrinter::Point ); + painter.scale( sizePx.width()/sizePts.width(), sizePx.height()/sizePts.height() ); + + for ( int iPage = 0; iPage < mRenderer.nPages(); iPage++ ) + { + if ( iPage ) + { + mPrinter->newPage(); + } + + mRenderer.printPage( &painter, iPage ); + } + } } } diff --git a/glabels/PrintView.h b/glabels/PrintView.h index 75f2891..122684b 100644 --- a/glabels/PrintView.h +++ b/glabels/PrintView.h @@ -24,6 +24,8 @@ #include "ui_PrintView.h" #include "PageRenderer.h" +#include + namespace glabels { @@ -43,6 +45,7 @@ namespace glabels ///////////////////////////////// public: PrintView( QWidget *parent = 0 ); + ~PrintView(); ///////////////////////////////// @@ -66,6 +69,7 @@ namespace glabels ///////////////////////////////// private: LabelModel* mModel; + QPrinter* mPrinter; PageRenderer mRenderer; bool mBlocked; diff --git a/glabels/ui/PrintView.ui b/glabels/ui/PrintView.ui index 884e457..aed38b3 100644 --- a/glabels/ui/PrintView.ui +++ b/glabels/ui/PrintView.ui @@ -6,8 +6,8 @@ 0 0 - 778 - 574 + 833 + 633 @@ -100,7 +100,7 @@ - + QLayout::SetFixedSize @@ -108,78 +108,10 @@ 24 - - - - Print - - - - :/icons/24x24/actions/fallback-file-print.png:/icons/24x24/actions/fallback-file-print.png - - - Qt::ToolButtonTextUnderIcon - - - - - - - - 0 - 0 - - - - - 350 - 0 - - - - - 350 - 16777215 - - - - Printer - - - - - - - - - - - Properties - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - + 0 0 @@ -291,7 +223,7 @@ - + 0 0 @@ -403,7 +335,7 @@ - + 0 0 @@ -465,6 +397,60 @@ + + + + + 350 + 0 + + + + + 350 + 16777215 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Qt::LeftToRight + + + Print + + + + :/icons/24x24/actions/fallback-file-print.png:/icons/24x24/actions/fallback-file-print.png + + + Qt::ToolButtonTextBesideIcon + + + + + + @@ -480,7 +466,7 @@ - + Qt::Vertical @@ -729,5 +715,6 @@ onPrintButtonClicked() onFormChanged() + onPrinterPropertiesButtonClicked()