From 69676b08fb03c8ebffc8c6aa2e30c98b49ef0da4 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Mon, 4 Aug 2014 19:32:13 +0300 Subject: [PATCH] Print: display an error message if no printers are found 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 Signed-off-by: Dirk Hohndel --- 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 d1553aeea..472b7d942 100644 --- a/qt-ui/printdialog.cpp +++ b/qt-ui/printdialog.cpp @@ -11,6 +11,8 @@ #include #include #include +#include +#include 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 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 32069a278..b29021838 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;