From 8098679b23a583f835d70b8bdf63ae9f63b3da31 Mon Sep 17 00:00:00 2001 From: Craig Watson Date: Mon, 21 Mar 2016 12:41:29 +0100 Subject: [PATCH] Cleaned up exporter classes (to remove excessive code duplication) --- src/adaptors/UBExportAdaptor.cpp | 50 +++++++++++++++++++++++++++++++ src/adaptors/UBExportAdaptor.h | 5 +++- src/adaptors/UBExportDocument.cpp | 38 ++--------------------- src/adaptors/UBExportDocument.h | 2 +- src/adaptors/UBExportFullPDF.cpp | 38 +++-------------------- src/adaptors/UBExportFullPDF.h | 3 ++ src/adaptors/UBExportPDF.cpp | 20 +++---------- src/adaptors/UBExportPDF.h | 2 +- 8 files changed, 69 insertions(+), 89 deletions(-) diff --git a/src/adaptors/UBExportAdaptor.cpp b/src/adaptors/UBExportAdaptor.cpp index 5743e108..0a8855db 100644 --- a/src/adaptors/UBExportAdaptor.cpp +++ b/src/adaptors/UBExportAdaptor.cpp @@ -117,6 +117,56 @@ QString UBExportAdaptor::askForDirName(UBDocumentProxy* pDocument, const QString return dirname; } +void UBExportAdaptor::persistLocally(UBDocumentProxy* pDocumentProxy, const QString& pDialogTitle) +{ + if (!pDocumentProxy) + return; + + QString filename = askForFileName(pDocumentProxy, pDialogTitle); + + if (filename.length() > 0) { + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + + if (mIsVerbose) + UBApplication::showMessage(tr("Exporting document...")); + + // Check that the location is writeable + QFileInfo info(filename); + info.setFile(info.absolutePath()); + + if (!info.isWritable()) { + QMessageBox errorBox; + errorBox.setWindowTitle(tr("Export failed")); + errorBox.setText(tr("Unable to export to the selected location. You do not have the permissions necessary to save the file.")); + errorBox.setIcon(QMessageBox::Critical); + errorBox.exec(); + + if (mIsVerbose) + UBApplication::showMessage(tr("Export failed: location not writable")); + + QApplication::restoreOverrideCursor(); + + return; + } + + bool persisted = this->persistsDocument(pDocumentProxy, filename); + + if (mIsVerbose && persisted) + UBApplication::showMessage(tr("Export successful.")); + + QApplication::restoreOverrideCursor(); + } +} + +bool UBExportAdaptor::persistsDocument(UBDocumentProxy* pDocument, const QString& filename) +{ + // Implemented in child classes + + Q_UNUSED(pDocument); + Q_UNUSED(filename); + return false; +} + void UBExportAdaptor::showErrorsList(QList errorsList) { if (errorsList.count()) diff --git a/src/adaptors/UBExportAdaptor.h b/src/adaptors/UBExportAdaptor.h index af2f93b7..f82c4002 100644 --- a/src/adaptors/UBExportAdaptor.h +++ b/src/adaptors/UBExportAdaptor.h @@ -43,8 +43,9 @@ class UBExportAdaptor : public QObject virtual QString exportName() = 0; virtual QString exportExtention() { return "";} virtual void persist(UBDocumentProxy* pDocument) = 0; + virtual bool persistsDocument(UBDocumentProxy* pDocument, const QString& filename); - virtual void setVerbode(bool verbose) + virtual void setVerbose(bool verbose) { mIsVerbose = verbose; } @@ -58,6 +59,8 @@ class UBExportAdaptor : public QObject QString askForFileName(UBDocumentProxy* pDocument, const QString& pDialogTitle); QString askForDirName(UBDocumentProxy* pDocument, const QString& pDialogTitle); + virtual void persistLocally(UBDocumentProxy* pDocumentProxy, const QString &pDialogTitle); + void showErrorsList(QList errorsList); bool mIsVerbose; diff --git a/src/adaptors/UBExportDocument.cpp b/src/adaptors/UBExportDocument.cpp index 8b8e1a50..f10af164 100644 --- a/src/adaptors/UBExportDocument.cpp +++ b/src/adaptors/UBExportDocument.cpp @@ -56,46 +56,12 @@ UBExportDocument::~UBExportDocument() void UBExportDocument::persist(UBDocumentProxy* pDocumentProxy) { - if (!pDocumentProxy) - return; - - QString filename = askForFileName(pDocumentProxy, tr("Export as UBZ File")); - - if (filename.length() > 0) - { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - - if (mIsVerbose) - UBApplication::showMessage(tr("Exporting document...")); - - bool success = persistsDocument(pDocumentProxy, filename); - - if (mIsVerbose && success) - UBApplication::showMessage(tr("Export successful.")); - - QApplication::restoreOverrideCursor(); - } + persistLocally(pDocumentProxy, tr("Export as UBZ File")); } -bool UBExportDocument::persistsDocument(UBDocumentProxy* pDocumentProxy, QString filename) +bool UBExportDocument::persistsDocument(UBDocumentProxy* pDocumentProxy, const QString &filename) { - QFileInfo info(filename); - info.setFile(info.absolutePath()); - - if (!info.isWritable()) { - UBApplication::showMessage(tr("Export failed: location not writable")); - - // The message is a bit discreet: also show a pop-up - QMessageBox errorBox; - errorBox.setWindowTitle(tr("Export failed")); - errorBox.setText(tr("Unable to export to the selected location. You do not have the permissions necessary to save the file.")); - errorBox.setIcon(QMessageBox::Critical); - errorBox.exec(); - - return false; - } - QuaZip zip(filename); zip.setFileNameCodec("UTF-8"); if(!zip.open(QuaZip::mdCreate)) diff --git a/src/adaptors/UBExportDocument.h b/src/adaptors/UBExportDocument.h index fa10dd83..cbd44ef5 100644 --- a/src/adaptors/UBExportDocument.h +++ b/src/adaptors/UBExportDocument.h @@ -49,7 +49,7 @@ class UBExportDocument : public UBExportAdaptor, public UBProcessingProgressList virtual QString exportExtention(); virtual void persist(UBDocumentProxy* pDocument); - virtual bool persistsDocument(UBDocumentProxy* pDocument, QString filename); + virtual bool persistsDocument(UBDocumentProxy* pDocument, const QString& filename); virtual void processing(const QString& pObjectName, int pCurrent, int pTotal); }; diff --git a/src/adaptors/UBExportFullPDF.cpp b/src/adaptors/UBExportFullPDF.cpp index 6f38e0de..db11ea5c 100644 --- a/src/adaptors/UBExportFullPDF.cpp +++ b/src/adaptors/UBExportFullPDF.cpp @@ -63,6 +63,8 @@ UBExportFullPDF::UBExportFullPDF(QObject *parent) QDesktopWidget* desktop = UBApplication::desktop(); int dpiCommon = (desktop->physicalDpiX() + desktop->physicalDpiY()) / 2; mScaleFactor = 72.0f / dpiCommon; + + mSimpleExporter = new UBExportPDF(); } @@ -131,44 +133,12 @@ void UBExportFullPDF::saveOverlayPdf(UBDocumentProxy* pDocumentProxy, const QStr void UBExportFullPDF::persist(UBDocumentProxy* pDocumentProxy) { - if (!pDocumentProxy) - return; - - QString filename = askForFileName(pDocumentProxy, tr("Export as PDF File")); - - if (filename.length() > 0) - { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - if (mIsVerbose) - UBApplication::showMessage(tr("Exporting document...")); - - bool success = persistsDocument(pDocumentProxy, filename); - if (mIsVerbose && success) - UBApplication::showMessage(tr("Export successful.")); - - QApplication::restoreOverrideCursor(); - } + persistLocally(pDocumentProxy, tr("Export as PDF File")); } bool UBExportFullPDF::persistsDocument(UBDocumentProxy* pDocumentProxy, const QString& filename) { - QFileInfo info(filename); - info.setFile(info.absolutePath()); - - if (!info.isWritable()) { - UBApplication::showMessage(tr("Export failed: location not writable")); - - // The message is a bit discreet: also show a pop-up - QMessageBox errorBox; - errorBox.setWindowTitle(tr("Export failed")); - errorBox.setText(tr("Unable to export to the selected location. You do not have the permissions necessary to save the file.")); - errorBox.setIcon(QMessageBox::Critical); - errorBox.exec(); - - return false; - } - QFile file(filename); if (file.exists()) file.remove(); @@ -277,7 +247,7 @@ bool UBExportFullPDF::persistsDocument(UBDocumentProxy* pDocumentProxy, const QS qDebug() << "PdfMerger failed to merge documents to " << filename << " - Exception : " << e.what(); // default to raster export - UBExportPDF::persistsDocument(pDocumentProxy, filename); + mSimpleExporter->persistsDocument(pDocumentProxy, filename); } if (!UBApplication::app()->isVerbose()) diff --git a/src/adaptors/UBExportFullPDF.h b/src/adaptors/UBExportFullPDF.h index d42ca2db..0f29e227 100644 --- a/src/adaptors/UBExportFullPDF.h +++ b/src/adaptors/UBExportFullPDF.h @@ -30,6 +30,7 @@ #include #include "UBExportAdaptor.h" +#include "UBExportPDF.h" class UBDocumentProxy; @@ -53,6 +54,8 @@ class UBExportFullPDF : public UBExportAdaptor private: float mScaleFactor; bool mHasPDFBackgrounds; + + UBExportPDF * mSimpleExporter; }; #endif /* UBExportFullPDF_H_ */ diff --git a/src/adaptors/UBExportPDF.cpp b/src/adaptors/UBExportPDF.cpp index 9906ece3..22bccfe8 100644 --- a/src/adaptors/UBExportPDF.cpp +++ b/src/adaptors/UBExportPDF.cpp @@ -58,25 +58,11 @@ UBExportPDF::~UBExportPDF() void UBExportPDF::persist(UBDocumentProxy* pDocumentProxy) { - if (!pDocumentProxy) - return; - - QString filename = askForFileName(pDocumentProxy, tr("Export as PDF File")); - - if (filename.length() > 0) - { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - UBApplication::showMessage(tr("Exporting document...")); - - persistsDocument(pDocumentProxy, filename); - - UBApplication::showMessage(tr("Export successful.")); - QApplication::restoreOverrideCursor(); - } + persistLocally(pDocumentProxy, tr("Export as PDF File")); } -void UBExportPDF::persistsDocument(UBDocumentProxy* pDocumentProxy, const QString& filename) +bool UBExportPDF::persistsDocument(UBDocumentProxy* pDocumentProxy, const QString& filename) { QPrinter pdfPrinter; @@ -128,6 +114,8 @@ void UBExportPDF::persistsDocument(UBDocumentProxy* pDocumentProxy, const QStrin scene->setBackground(isDark, isCrossed); } if(!painterNeedsBegin) pdfPainter.end(); + + return true; } QString UBExportPDF::exportExtention() diff --git a/src/adaptors/UBExportPDF.h b/src/adaptors/UBExportPDF.h index 356e92af..1ee7596c 100644 --- a/src/adaptors/UBExportPDF.h +++ b/src/adaptors/UBExportPDF.h @@ -45,7 +45,7 @@ class UBExportPDF : public UBExportAdaptor virtual QString exportExtention(); virtual void persist(UBDocumentProxy* pDocument); - static void persistsDocument(UBDocumentProxy* pDocument, const QString& filename); + virtual bool persistsDocument(UBDocumentProxy* pDocument, const QString& filename); }; #endif /* UBEXPORTPDF_H_ */