File indexing completed on 2024-03-24 15:17:41

0001 /*
0002     SPDX-FileCopyrightText: 2011 Rafał Kułaga <rl.kulaga@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "pwizprint.h"
0008 
0009 #include "finderchart.h"
0010 #include "kstars.h"
0011 #include "ksnotification.h"
0012 #include "Options.h"
0013 #include "printingwizard.h"
0014 
0015 #include <KMessageBox>
0016 #include <KIO/StoredTransferJob>
0017 
0018 #include <QFileDialog>
0019 #include <QTemporaryFile>
0020 #include <QPrintPreviewDialog>
0021 #include <QPrinter>
0022 #include <QPrintDialog>
0023 #include <QPointer>
0024 
0025 PWizPrintUI::PWizPrintUI(PrintingWizard *wizard, QWidget *parent) : QFrame(parent), m_ParentWizard(wizard)
0026 {
0027     setupUi(this);
0028 
0029     connect(previewButton, SIGNAL(clicked()), this, SLOT(slotPreview()));
0030     connect(printButton, SIGNAL(clicked()), this, SLOT(slotPrint()));
0031     connect(exportButton, SIGNAL(clicked()), this, SLOT(slotExport()));
0032 }
0033 
0034 void PWizPrintUI::slotPreview()
0035 {
0036     QPointer<QPrintPreviewDialog> previewDlg(new QPrintPreviewDialog(m_ParentWizard->getPrinter(), KStars::Instance()));
0037     connect(previewDlg, SIGNAL(paintRequested(QPrinter*)), SLOT(slotPrintPreview(QPrinter*)));
0038     previewDlg->exec();
0039     delete previewDlg;
0040 }
0041 
0042 void PWizPrintUI::slotPrintPreview(QPrinter *printer)
0043 {
0044     printDocument(printer);
0045 }
0046 
0047 void PWizPrintUI::slotPrint()
0048 {
0049     QPointer<QPrintDialog> dialog(new QPrintDialog(m_ParentWizard->getPrinter(), KStars::Instance()));
0050     if (dialog->exec() == QDialog::Accepted)
0051     {
0052         printDocument(m_ParentWizard->getPrinter());
0053     }
0054     delete dialog;
0055 }
0056 
0057 void PWizPrintUI::printDocument(QPrinter *printer)
0058 {
0059     m_ParentWizard->getFinderChart()->print(printer);
0060 }
0061 
0062 void PWizPrintUI::slotExport()
0063 {
0064     QUrl url =
0065         QFileDialog::getSaveFileUrl(KStars::Instance(), i18nc("@title:window", "Export"), QUrl(QDir::homePath()),
0066                                     "application/pdf application/postscript application/vnd.oasis.opendocument.text");
0067     //User cancelled file selection dialog - abort image export
0068     if (url.isEmpty())
0069     {
0070         return;
0071     }
0072 
0073     //Warn user if file exists!
0074     if (QFile::exists(url.toLocalFile()))
0075     {
0076         int r = KMessageBox::warningContinueCancel(
0077                     parentWidget(), i18n("A file named \"%1\" already exists. Overwrite it?", url.fileName()),
0078                     i18n("Overwrite File?"), KStandardGuiItem::overwrite());
0079         if (r == KMessageBox::Cancel)
0080             return;
0081     }
0082 
0083     QString urlStr = url.url();
0084     if (!urlStr.contains(QDir::separator()))
0085     {
0086         urlStr = QDir::homePath() + '/' + urlStr;
0087     }
0088 
0089     QTemporaryFile tmpfile;
0090     tmpfile.open();
0091     QString fname;
0092 
0093     if (url.isValid())
0094     {
0095         if (url.isLocalFile())
0096         {
0097             fname = url.toLocalFile();
0098         }
0099 
0100         else
0101         {
0102             fname = tmpfile.fileName();
0103         }
0104 
0105         //Determine desired image format from filename extension
0106         QString ext = fname.mid(fname.lastIndexOf(".") + 1);
0107         if (ext == "pdf" || ext == "ps")
0108         {
0109             m_ParentWizard->getFinderChart()->writePsPdf(fname);
0110         }
0111         else if (ext == "odt")
0112         {
0113             m_ParentWizard->getFinderChart()->writeOdt(fname);
0114         }
0115         else
0116         {
0117             return;
0118         }
0119 
0120         if (tmpfile.fileName() == fname)
0121         {
0122             //attempt to upload image to remote location
0123             if (KIO::storedHttpPost(&tmpfile, url)->exec() == false)
0124                 //if(!KIO::NetAccess::upload(tmpfile.fileName(), url, this))
0125             {
0126                 QString message = i18n("Could not upload file to remote location: %1", url.url());
0127                 KSNotification::sorry(message, i18n("Could not upload file"));
0128             }
0129         }
0130     }
0131 }