Print: add experimental code for printing profiles

PrintLayout::printSixDives() goes trough all dives
and prints their profiles on full portrait pages.

This method is based on resizing the ProfileGraphicsView
widget, plotting each dive and then 'grabbing' it using
QPixmap::grabWidget().

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
This commit is contained in:
Lubomir I. Ivanov 2013-07-12 19:23:47 +03:00 committed by Dirk Hohndel
parent 8ea849d0c2
commit b241b7c06a
2 changed files with 39 additions and 7 deletions

View file

@ -47,6 +47,7 @@ void PrintDialog::printClicked(void)
// printer.setOutputFileName("print.pdf");
// printer.setOutputFormat(QPrinter::PdfFormat);
// temporary: use a preview dialog
printer.setResolution(300);
QPrintPreviewDialog previewDialog(&printer, this);
QObject::connect(&previewDialog, SIGNAL(paintRequested(QPrinter *)), this, SLOT(onPaintRequested(QPrinter *)));
previewDialog.exec();

View file

@ -5,6 +5,7 @@
#include <QTextDocument>
#include <QAbstractTextDocumentLayout>
#include "mainwindow.h"
#include "profilegraphics.h"
#include "printlayout.h"
#include "../dive.h"
#include "../display.h"
@ -27,7 +28,6 @@ PrintLayout::PrintLayout(PrintDialog *dialogPtr, QPrinter *printerPtr, struct op
dialog = dialogPtr;
printer = printerPtr;
printOptions = optionsPtr;
// painter = new QPainter(printer);
// table print settings
tableColumnNames.append(tr("Dive#"));
@ -50,11 +50,6 @@ void PrintLayout::print()
{
// we call setup each time to check if the printer properties have changed
setup();
// temp / debug
printTable();
return;
// ------------
switch (printOptions->type) {
case options::PRETTY:
printSixDives();
@ -81,9 +76,45 @@ void PrintLayout::setup()
scaleY = (qreal)printerDpi/(qreal)screenDpiY;
}
// experimental
void PrintLayout::printSixDives() const
{
// nop
ProfileGraphicsView *profile = mainWindow()->graphics();
QPainter painter;
painter.begin(printer);
painter.setRenderHint(QPainter::Antialiasing);
// painter.setRenderHint(QPainter::HighQualityAntialiasing);
painter.setRenderHint(QPainter::SmoothPixmapTransform);
painter.scale(scaleX, scaleY);
profile->clear();
profile->setPrintMode(true);
QSize originalSize = profile->size();
profile->resize(pageRect.height()/scaleY, pageRect.width()/scaleX);
int i;
struct dive *dive;
bool firstPage = true;
for_each_dive(i, dive) {
if (!dive->selected && printOptions->print_selected)
continue;
// don't create a new page if still on first page
if (!firstPage)
printer->newPage();
else
firstPage = false;
profile->plot(dive, true);
QPixmap pm = QPixmap::grabWidget(profile);
QTransform transform;
transform.rotate(270);
pm = QPixmap(pm.transformed(transform));
painter.drawPixmap(0, 0, pm);
}
painter.end();
profile->setPrintMode(false);
profile->resize(originalSize);
profile->clear();
profile->plot(current_dive, true);
}
void PrintLayout::printTwoDives() const