File indexing completed on 2024-04-28 15:51:57
0001 /* 0002 SPDX-FileCopyrightText: 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "revisionviewer.h" 0008 0009 #include <KLocalizedString> 0010 #include <KMessageBox> 0011 0012 #include <QDialogButtonBox> 0013 #include <QFileDialog> 0014 #include <QLayout> 0015 #include <QMimeDatabase> 0016 #include <QMimeType> 0017 #include <QPushButton> 0018 #include <QStandardPaths> 0019 #include <QTemporaryFile> 0020 0021 #include "fileprinterpreview.h" 0022 0023 class RevisionPreview : public Okular::FilePrinterPreview 0024 { 0025 Q_OBJECT 0026 0027 public: 0028 explicit RevisionPreview(const QString &revisionFile, QWidget *parent = nullptr); 0029 0030 private Q_SLOTS: 0031 void doSave(); 0032 0033 private: 0034 QString m_filename; 0035 }; 0036 0037 RevisionPreview::RevisionPreview(const QString &revisionFile, QWidget *parent) 0038 : FilePrinterPreview(revisionFile, parent) 0039 , m_filename(revisionFile) 0040 { 0041 setWindowTitle(i18n("Revision Preview")); 0042 0043 QDialogButtonBox *btnBox = findChild<QDialogButtonBox *>(); 0044 auto saveBtn = new QPushButton(i18n("Save As"), this); 0045 btnBox->addButton(saveBtn, QDialogButtonBox::ActionRole); 0046 connect(saveBtn, &QPushButton::clicked, this, &RevisionPreview::doSave); 0047 } 0048 0049 void RevisionPreview::doSave() 0050 { 0051 QMimeDatabase db; 0052 const QMimeType mime = db.mimeTypeForFile(m_filename); 0053 const QString caption = i18n("Where do you want to save this revision?"); 0054 const QString path = QFileDialog::getSaveFileName(this, caption, QStringLiteral("Revision"), mime.filterString()); 0055 if (!path.isEmpty() && !QFile::copy(m_filename, path)) { 0056 KMessageBox::error(this, i18n("Could not save file %1.", path)); 0057 return; 0058 } 0059 } 0060 0061 RevisionViewer::RevisionViewer(const QByteArray &revisionData, QWidget *parent) 0062 : QObject(parent) 0063 , m_parent(parent) 0064 , m_revisionData(revisionData) 0065 { 0066 } 0067 0068 void RevisionViewer::viewRevision() 0069 { 0070 QMimeDatabase db; 0071 const QMimeType mime = db.mimeTypeForData(m_revisionData); 0072 const QString tempDir = QStandardPaths::writableLocation(QStandardPaths::TempLocation); 0073 QTemporaryFile tf(tempDir + QStringLiteral("/okular_revision_XXXXXX.%1").arg(mime.suffixes().constFirst())); 0074 if (!tf.open()) { 0075 KMessageBox::error(m_parent, i18n("Could not view revision.")); 0076 return; 0077 } 0078 tf.write(m_revisionData); 0079 RevisionPreview previewdlg(tf.fileName(), m_parent); 0080 previewdlg.exec(); 0081 } 0082 0083 #include "revisionviewer.moc"