Print: initial implementation of the table print

PrintLayout for now only handles the table print,
while the data output itself is work in progress.
For now there is a simple HTML/CSS table logic based
on QTextDocument. There is an iterative algorithm
which listens for a page increase and adds a heading
on top of the new page.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
This commit is contained in:
Lubomir I. Ivanov 2013-07-10 19:32:15 +03:00
parent 9dc45af915
commit eb4312c9ba
2 changed files with 60 additions and 2 deletions

View file

@ -1,6 +1,9 @@
#include <QDebug>
#include <QPainter>
#include <QDesktopWidget>
#include <QApplication>
#include <QTextDocument>
#include <QAbstractTextDocumentLayout>
#include "mainwindow.h"
#include "printlayout.h"
@ -19,12 +22,18 @@ PrintLayout::PrintLayout(PrintDialog *dialogPtr, QPrinter *printerPtr, struct op
dialog = dialogPtr;
printer = printerPtr;
printOptions = optionsPtr;
// painter = new QPainter(printer);
}
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();
@ -63,5 +72,52 @@ void PrintLayout::printTwoDives()
void PrintLayout::printTable()
{
// nop
QTextDocument doc;
QSizeF pageSize;
pageSize.setWidth(pageRect.width());
pageSize.setHeight(pageRect.height());
doc.setPageSize(pageSize);
QString styleSheet = "<style type='text/css'>" \
"table { border-width: 1px; border-style: solid; border-color: black; }" \
"th { font-weight: bold; font-size: large; padding: 3px 10px 3px 10px; }" \
"td { padding: 3px 10px 3px 10px; }" \
"</style>";
// setDefaultStyleSheet() doesn't work here?
QString htmlText = styleSheet + "<table cellspacing='0' width='100%'>";
QString htmlTextPrev;
int pageCountNew = 1, pageCount = 1;
bool insertHeading = true;
while (pageCount < 3) { // should go trough dives (or selected) instead
if (insertHeading) {
htmlText += insertTableHeadingRow();
insertHeading = false;
}
doc.setHtml(htmlText);
pageCount = doc.pageCount();
htmlTextPrev = htmlText;
htmlText += insertTableDataRow();
doc.setHtml(htmlText);
pageCountNew = doc.pageCount();
// if the page count increases here we revert and add a heading instead
if (pageCountNew > pageCount) {
htmlText = htmlTextPrev;
doc.setHtml(htmlText);
insertHeading = true;
}
}
htmlText += "</table>";
doc.setHtml(htmlText);
doc.print(printer);
}
QString PrintLayout::insertTableHeadingRow()
{
return "<tr><th>TITLE</th><th>TITLE 2</th></tr>";
}
QString PrintLayout::insertTableDataRow()
{
return "<tr><td>hello</td></tr><tr><td>hello</td></tr>";
}

View file

@ -19,7 +19,7 @@ private:
QPrinter *printer;
struct options *printOptions;
QPainter painter;
QPainter *painter;
int screenDpiX, screenDpiY, printerDpi;
qreal scaleX, scaleY;
QRect pageRect;
@ -28,6 +28,8 @@ private:
void printSixDives();
void printTwoDives();
void printTable();
QString insertTableHeadingRow();
QString insertTableDataRow();
};
#endif