1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#include "printdialog.h"
#include "printoptions.h"
#include "printlayout.h"
#include "mainwindow.h"
#include <QDebug>
#include <QPushButton>
#include <QProgressBar>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPrintPreviewDialog>
#include <QPrintDialog>
#include <QShortcut>
#include <QPrinterInfo>
#include <QMessageBox>
PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f)
{
// options template (are we storing these in the settings?)
struct options tempOptions = { options::PRETTY, 1, 2, false };
printOptions = tempOptions;
// create a print layout and pass the printer and options
printLayout = new PrintLayout(this, &printer, &printOptions);
// create a print options object and pass our options struct
optionsWidget = new PrintOptions(this, &printOptions);
QVBoxLayout *layout = new QVBoxLayout(this);
setLayout(layout);
layout->addWidget(optionsWidget);
progressBar = new QProgressBar();
connect(printLayout, SIGNAL(signalProgress(int)), progressBar, SLOT(setValue(int)));
progressBar->setMinimum(0);
progressBar->setMaximum(100);
progressBar->setValue(0);
progressBar->setTextVisible(false);
layout->addWidget(progressBar);
QHBoxLayout *hLayout = new QHBoxLayout();
layout->addLayout(hLayout);
QPushButton *printButton = new QPushButton(tr("P&rint"));
connect(printButton, SIGNAL(clicked(bool)), this, SLOT(printClicked()));
QPushButton *previewButton = new QPushButton(tr("&Preview"));
connect(previewButton, SIGNAL(clicked(bool)), this, SLOT(previewClicked()));
QDialogButtonBox *buttonBox = new QDialogButtonBox;
buttonBox->addButton(QDialogButtonBox::Cancel);
buttonBox->addButton(printButton, QDialogButtonBox::AcceptRole);
buttonBox->addButton(previewButton, QDialogButtonBox::ActionRole);
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
hLayout->addWidget(buttonBox);
setFixedSize(550, 400);
setWindowTitle(tr("Print"));
setWindowIcon(QIcon(":subsurface-icon"));
QShortcut *close = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
connect(close, SIGNAL(activated()), this, SLOT(close()));
QShortcut *quit = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this);
connect(quit, SIGNAL(activated()), parent, SLOT(close()));
}
bool PrintDialog::checkForAvailablePrinters(void)
{
QList<QPrinterInfo> list = QPrinterInfo::availablePrinters();
if (!list.length()) {
QMessageBox msgBox;
msgBox.setIcon(QMessageBox::Critical);
msgBox.setText(tr("Subsurface cannot find installed printers on this system!"));
msgBox.setWindowIcon(QIcon(":subsurface-icon"));
msgBox.exec();
return false;
}
return true;
}
void PrintDialog::previewClicked(void)
{
if (!checkForAvailablePrinters())
return;
QPrintPreviewDialog previewDialog(&printer, this);
connect(&previewDialog, SIGNAL(paintRequested(QPrinter *)), this, SLOT(onPaintRequested(QPrinter *)));
previewDialog.exec();
}
void PrintDialog::printClicked(void)
{
if (!checkForAvailablePrinters())
return;
QPrintDialog printDialog(&printer, this);
if (printDialog.exec() == QDialog::Accepted){
printLayout->print();
close();
}
}
void PrintDialog::onPaintRequested(QPrinter *printerPtr)
{
printLayout->print();
}
|