mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-01 06:30:26 +00:00
8fcba14753
also includes: - experiment with colored background for headings - experiment with 'left' alignment for headings ('th' tag CSS does not support 'text-align') - whitespace fixes Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
140 lines
3 KiB
C++
140 lines
3 KiB
C++
#include <QDebug>
|
|
#include <QPainter>
|
|
#include <QDesktopWidget>
|
|
#include <QApplication>
|
|
#include <QTextDocument>
|
|
#include "mainwindow.h"
|
|
#include "printlayout.h"
|
|
#include "../dive.h"
|
|
|
|
/*
|
|
struct options {
|
|
enum { PRETTY, TABLE, TWOPERPAGE } type;
|
|
int print_selected;
|
|
int color_selected;
|
|
bool notes_up;
|
|
int profile_height, notes_height, tanks_height;
|
|
};
|
|
*/
|
|
|
|
PrintLayout::PrintLayout(PrintDialog *dialogPtr, QPrinter *printerPtr, struct options *optionsPtr)
|
|
{
|
|
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();
|
|
break;
|
|
case options::TWOPERPAGE:
|
|
printTwoDives();
|
|
break;
|
|
case options::TABLE:
|
|
printTable();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void PrintLayout::setup()
|
|
{
|
|
QDesktopWidget *desktop = QApplication::desktop();
|
|
screenDpiX = desktop->physicalDpiX();
|
|
screenDpiY = desktop->physicalDpiX();
|
|
|
|
printerDpi = printer->resolution();
|
|
pageRect = printer->pageRect();
|
|
|
|
scaleX = (qreal)printerDpi/(qreal)screenDpiX;
|
|
scaleY = (qreal)printerDpi/(qreal)screenDpiY;
|
|
}
|
|
|
|
void PrintLayout::printSixDives()
|
|
{
|
|
// nop
|
|
}
|
|
|
|
void PrintLayout::printTwoDives()
|
|
{
|
|
// nop
|
|
}
|
|
|
|
void PrintLayout::printTable()
|
|
{
|
|
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 {" \
|
|
" background-color: #eeeeee;" \
|
|
" font-weight: bold;" \
|
|
" font-size: large;" \
|
|
" padding: 6px 10px 6px 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;
|
|
bool insertHeading = true;
|
|
|
|
int i;
|
|
struct dive *dive;
|
|
for_each_dive(i, dive) {
|
|
if (!dive->selected && printOptions->print_selected)
|
|
continue;
|
|
if (insertHeading) {
|
|
htmlText += insertTableHeadingRow();
|
|
insertHeading = false;
|
|
}
|
|
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 (pageCountNew > pageCount) {
|
|
htmlText = htmlTextPrev;
|
|
insertHeading = true;
|
|
i--;
|
|
}
|
|
}
|
|
htmlText += "</table>";
|
|
doc.setHtml(htmlText);
|
|
doc.print(printer);
|
|
}
|
|
|
|
QString PrintLayout::insertTableHeadingRow()
|
|
{
|
|
return "<tr><th align='left'>TITLE</th><th align='left'>TITLE 2</th></tr>";
|
|
}
|
|
|
|
QString PrintLayout::insertTableDataRow(struct dive *dive)
|
|
{
|
|
return "<tr><td>" + QString::number(dive->number) + "</td><td>hello2</td></tr>";
|
|
}
|