summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Bugge Monsen <mmonsen@trolltech.com>2009-06-02 19:44:01 +0200
committerMarius Bugge Monsen <mmonsen@trolltech.com>2009-06-02 19:44:01 +0200
commitd10c630a7045e0cf75dc5dde1c6b29c97e45c522 (patch)
tree23bf6ad528d06c0458c7a1dfd268aed7845afd88
parentc90d1a71b71a63ea5c8e7d731e2a1cb14e64ff74 (diff)
parent9ca6fb49d054bf49c80d38ceb719625de905ded5 (diff)
Merge branch 'master' of git@scm.dev.nokia.troll.no:research/itemviews-ng
-rw-r--r--src/qprintertableview.cpp34
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;