From: "Lubomir I. Ivanov" <[email protected]>

When pressing Print or Preview from the PrintDialog, we need
to first check if there are printers installed. If not
we abort and show an error message.

This is needed because if no printers are installed,
things like the reported page height could be zero and
the profile and table print code in PrintLayout will
break.

Signed-off-by: Lubomir I. Ivanov <[email protected]>
---

if someone has forgotten to install his printer driver and goes
to the PrintDialog and then presses Preview/Print weird things
can happen.

Note: this does introduce a translation string.
---
 qt-ui/printdialog.cpp | 20 ++++++++++++++++++++
 qt-ui/printdialog.h   |  1 +
 2 files changed, 21 insertions(+)

diff --git a/qt-ui/printdialog.cpp b/qt-ui/printdialog.cpp
index d1553ae..472b7d9 100644
--- a/qt-ui/printdialog.cpp
+++ b/qt-ui/printdialog.cpp
@@ -11,6 +11,8 @@
 #include <QPrintPreviewDialog>
 #include <QPrintDialog>
 #include <QShortcut>
+#include <QPrinterInfo>
+#include <QMessageBox>
 
 PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, 
f)
 {
@@ -65,8 +67,24 @@ PrintDialog::PrintDialog(QWidget *parent, Qt::WindowFlags f) 
: QDialog(parent, f
        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();
@@ -74,6 +92,8 @@ void PrintDialog::previewClicked(void)
 
 void PrintDialog::printClicked(void)
 {
+       if (!checkForAvailablePrinters())
+               return;
        QPrintDialog printDialog(&printer, this);
        if (printDialog.exec() == QDialog::Accepted){
                printLayout->print();
diff --git a/qt-ui/printdialog.h b/qt-ui/printdialog.h
index 32069a2..b290218 100644
--- a/qt-ui/printdialog.h
+++ b/qt-ui/printdialog.h
@@ -18,6 +18,7 @@ public:
        explicit PrintDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
 
 private:
+       bool checkForAvailablePrinters(void);
        PrintOptions *optionsWidget;
        PrintLayout *printLayout;
        QProgressBar *progressBar;
-- 
1.7.11.msysgit.0

_______________________________________________
subsurface mailing list
[email protected]
http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to