mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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:
parent
9dc45af915
commit
eb4312c9ba
2 changed files with 60 additions and 2 deletions
|
@ -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>";
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue