diff options
author | Marius Bugge Monsen <mmonsen@trolltech.com> | 2009-06-02 19:44:01 +0200 |
---|---|---|
committer | Marius Bugge Monsen <mmonsen@trolltech.com> | 2009-06-02 19:44:01 +0200 |
commit | d10c630a7045e0cf75dc5dde1c6b29c97e45c522 (patch) | |
tree | 23bf6ad528d06c0458c7a1dfd268aed7845afd88 | |
parent | c90d1a71b71a63ea5c8e7d731e2a1cb14e64ff74 (diff) | |
parent | 9ca6fb49d054bf49c80d38ceb719625de905ded5 (diff) |
Merge branch 'master' of git@scm.dev.nokia.troll.no:research/itemviews-ng
-rw-r--r-- | src/qprintertableview.cpp | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/qprintertableview.cpp b/src/qprintertableview.cpp index b4dab96..abe1049 100644 --- a/src/qprintertableview.cpp +++ b/src/qprintertableview.cpp @@ -247,15 +247,19 @@ bool QtPrinterTableView::print() d->footer->setPageSize(d->printer->pageRect().size()); } - const qreal headerSize = d->printHeader(painter); // TODO - const qreal footerSize = d->printFooter(painter); // TODO - const bool vertical = d->orientation == Qt::Vertical; // TODO + const qreal headerSize = d->printHeader(painter); + const qreal footerSize = d->printFooter(painter); + const bool vertical = d->orientation == Qt::Vertical; const qreal scaleX = d->printer->logicalDpiX() / (qreal) qt_defaultDpiX(); const qreal scaleY = d->printer->logicalDpiY() / (qreal) qt_defaultDpiY(); painter.scale(scaleX, scaleY); const QRect rect = d->printer->pageRect(); - const QSizeF visibleSize(rect.width() / scaleX, rect.height() / scaleY); + QSizeF visibleSize(rect.width() / scaleX, rect.height() / scaleY); + if (vertical) + visibleSize = QSizeF(visibleSize.width(), visibleSize.height() - headerSize - footerSize); + else // then rotate it. + visibleSize = QSizeF(visibleSize.height() - headerSize - footerSize, visibleSize.width()); view.setGeometry(0, 0, visibleSize.width(), visibleSize.height()); view.setHorizontalOffset(0); @@ -278,8 +282,11 @@ bool QtPrinterTableView::print() height -= rowHeight; } while (column < d->model->columnCount()) { - if (!first) + if (!first) { d->printer->newPage(); + d->printHeader(painter); + d->printFooter(painter); + } first = false; view.setFirstColumn(column); view.setHorizontalOffset(offsetInColumn); @@ -290,6 +297,7 @@ bool QtPrinterTableView::print() if (width == visibleSize.width() && columnWidth - offsetInColumn > visibleSize.width()) { // the column doesn't fit on a page. Lets split it. offsetInColumn += visibleSize.width(); + width = 0; break; } else if (offsetInColumn > 0) { // we still have a part of a split column to print! width -= columnWidth - offsetInColumn; @@ -298,25 +306,32 @@ bool QtPrinterTableView::print() continue; } - if (width - columnWidth + offsetInColumn < 0) { + if (width - columnWidth + offsetInColumn < 0) break; - } if (column >= d->model->columnCount()) break; ++column; width -= columnWidth; } + view.doLayout(); + + painter.save(); // for each page + painter.translate(0, headerSize); + if (!vertical) { + painter.translate(0, visibleSize.width()); + painter.rotate(-90); + } #ifdef DEBUG_TABLES painter.setPen(QPen(QColor(Qt::green))); painter.drawRect(QRectF(0, 0, visibleSize.width() - width, visibleSize.height() - height)); #endif - view.doLayout(); + painter.setClipRect(QRectF(0, 0, visibleSize.width() - width, visibleSize.height() - height)); // find and paint children which are the cells QList<QGraphicsItem*> items = scene.items(view.rect()); QList<QGraphicsItem*>::Iterator iter = items.begin(); for (;iter != items.end(); ++iter) { QGraphicsItem *parent = *iter; - while (parent != &view && parent != 0) + while (parent != &view && parent != 0) // only draw children of our view parent = parent->parentItem(); if (parent == 0) continue; @@ -336,6 +351,7 @@ bool QtPrinterTableView::print() (*iter)->paint(&painter, 0); painter.restore(); } + painter.restore(); // for each page } } return true; |