You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.9 KiB
85 lines
2.9 KiB
/*************************************************************************** |
|
* Copyright (C) 2018 by Chinmoy Ranjan Pradhan <chinmoyrp65@gmail.com> * |
|
* * |
|
* This program is free software; you can redistribute it and/or modify * |
|
* it under the terms of the GNU General Public License as published by * |
|
* the Free Software Foundation; either version 2 of the License, or * |
|
* (at your option) any later version. * |
|
***************************************************************************/ |
|
|
|
#include "revisionviewer.h" |
|
|
|
#include <KMessageBox> |
|
#include <KLocalizedString> |
|
|
|
#include <QLayout> |
|
#include <QMimeType> |
|
#include <QPushButton> |
|
#include <QFileDialog> |
|
#include <QMimeDatabase> |
|
#include <QTemporaryFile> |
|
#include <QStandardPaths> |
|
#include <QDialogButtonBox> |
|
|
|
#include "fileprinterpreview.h" |
|
|
|
class RevisionPreview : public Okular::FilePrinterPreview |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
explicit RevisionPreview( const QString &revisionFile, QWidget *parent = nullptr ); |
|
|
|
private Q_SLOTS: |
|
void doSave(); |
|
|
|
private: |
|
QString m_filename; |
|
}; |
|
|
|
RevisionPreview::RevisionPreview( const QString &revisionFile, QWidget *parent ) |
|
: FilePrinterPreview( revisionFile, parent ), m_filename( revisionFile ) |
|
{ |
|
setWindowTitle( i18n("Revision Preview") ); |
|
|
|
QDialogButtonBox *btnBox = findChild<QDialogButtonBox *>(); |
|
auto saveBtn = new QPushButton( i18n( "Save As"), this ); |
|
btnBox->addButton( saveBtn, QDialogButtonBox::ActionRole ); |
|
connect( saveBtn, &QPushButton::clicked, this, &RevisionPreview::doSave ); |
|
} |
|
|
|
void RevisionPreview::doSave() |
|
{ |
|
QMimeDatabase db; |
|
const QMimeType mime = db.mimeTypeForFile( m_filename ); |
|
const QString caption = i18n( "Where do you want to save this revision?" ); |
|
const QString path = QFileDialog::getSaveFileName( this, caption, QStringLiteral("Revision"), mime.filterString() ); |
|
if ( !path.isEmpty() && !QFile::copy( m_filename, path ) ) |
|
{ |
|
KMessageBox::error( this, i18n("Could not save file %1.", path) ); |
|
return; |
|
} |
|
} |
|
|
|
RevisionViewer::RevisionViewer( const QByteArray &revisionData, QWidget *parent ) |
|
: QObject( parent ), m_parent( parent ), m_revisionData( revisionData ) |
|
{ |
|
} |
|
|
|
void RevisionViewer::viewRevision() |
|
{ |
|
QMimeDatabase db; |
|
const QMimeType mime = db.mimeTypeForData( m_revisionData ); |
|
const QString tempDir = QStandardPaths::writableLocation( QStandardPaths::TempLocation ); |
|
QTemporaryFile tf( tempDir + QStringLiteral("/okular_revision_XXXXXX.%1").arg( mime.suffixes().first() )); |
|
if ( !tf.open() ) |
|
{ |
|
KMessageBox::error( m_parent, i18n("Could not view revision.") ); |
|
return; |
|
} |
|
tf.write( m_revisionData ); |
|
RevisionPreview previewdlg( tf.fileName(), m_parent ); |
|
previewdlg.exec(); |
|
} |
|
|
|
#include "revisionviewer.moc"
|
|
|