diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2013-07-12 14:08:25 +0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-07-18 12:00:12 -0700 |
commit | b722bf6931da3162b8c5c2608f477d9e9c4b5148 (patch) | |
tree | 63835cde0605d732d31c0822bfa26240a10d490c /qt-ui/printlayout.cpp | |
parent | 2bfda14c0b39eb7594ee50b5511c51903845d983 (diff) | |
download | subsurface-b722bf6931da3162b8c5c2608f477d9e9c4b5148.tar.gz |
Print: improve new page detection in table print
There is a potential issue when placing a heading on a new
page. If the height of a data row is larger of that of
a heading, a new heading can end up at the bottom of a page
leaving that page with two headings.
To solve that we add line breaks (<br>) until the new
page is reached and add the heading there. Algorithm
assumes that the height of a heading is larger than
a line break. Also it is now obviously even slower.
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Diffstat (limited to 'qt-ui/printlayout.cpp')
-rw-r--r-- | qt-ui/printlayout.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/qt-ui/printlayout.cpp b/qt-ui/printlayout.cpp index f0cbacaa9..471b8f847 100644 --- a/qt-ui/printlayout.cpp +++ b/qt-ui/printlayout.cpp @@ -119,9 +119,11 @@ void PrintLayout::printTable() const "</style>" ); // setDefaultStyleSheet() doesn't work here? + const QString heading(insertTableHeadingRow()); + const QString lineBreak("<br>"); QString htmlText = styleSheet + "<table cellspacing='0' width='100%'>"; QString htmlTextPrev; - int pageCountNew = 1, pageCount; + int pageCountNew = 1, pageCount = 0, lastPageWithHeading = 0; bool insertHeading = true; int i; @@ -130,16 +132,33 @@ void PrintLayout::printTable() const if (!dive->selected && printOptions->print_selected) continue; if (insertHeading) { - htmlText += insertTableHeadingRow(); + htmlTextPrev = htmlText; + htmlText += heading; + doc.setHtml(htmlText); + pageCount = doc.pageCount(); + // prevent adding two headings on the same page + if (pageCount == lastPageWithHeading) { + htmlText = htmlTextPrev; + // add line breaks until a new page is reached + while (pageCount == lastPageWithHeading) { + htmlTextPrev = htmlText; + htmlText += lineBreak; + doc.setHtml(htmlText); + pageCount = doc.pageCount(); + } + // revert last line break from the new page and add heading + htmlText = htmlTextPrev; + htmlText += heading; + } insertHeading = false; + lastPageWithHeading = pageCount; } htmlTextPrev = htmlText; htmlText += insertTableDataRow(dive); doc.setHtml(htmlText); pageCount = pageCountNew; pageCountNew = doc.pageCount(); - /* if the page count increases after adding this row we 'revert' - * and add a heading instead. */ + // if the page count increases revert and add heading instead if (pageCountNew > pageCount) { htmlText = htmlTextPrev; insertHeading = true; |