export: support copying exported file's content

This commit is contained in:
Le Tan 2018-05-14 20:42:17 +08:00
parent b355872c5f
commit 925833d590
2 changed files with 49 additions and 2 deletions

View File

@ -4,6 +4,9 @@
#include <QCoreApplication>
#include <QProcess>
#include <QTemporaryDir>
#include <QMimeData>
#include <QApplication>
#include <QClipboard>
#ifndef QT_NO_PRINTER
#include <QPrinter>
@ -11,6 +14,7 @@
#endif
#include "utils/vutils.h"
#include "utils/vclipboardutils.h"
#include "vlineedit.h"
#include "vnotebook.h"
#include "vfile.h"
@ -127,7 +131,11 @@ void VExportDialog::setupUI()
// Ok is the default button.
m_btnBox = new QDialogButtonBox(QDialogButtonBox::Close);
m_exportBtn = m_btnBox->addButton(tr("Export"), QDialogButtonBox::ActionRole);
m_openBtn = m_btnBox->addButton(tr("Open Output Directory"), QDialogButtonBox::ActionRole);
m_openBtn = m_btnBox->addButton(tr("Open Directory"), QDialogButtonBox::ActionRole);
m_openBtn->setToolTip(tr("Open output directory"));
m_copyBtn = m_btnBox->addButton(tr("Copy Content"), QDialogButtonBox::ActionRole);
m_copyBtn->setToolTip(tr("Copy the content of the exported file"));
m_copyBtn->setEnabled(false);
connect(m_btnBox, &QDialogButtonBox::rejected,
this, [this]() {
if (m_inExport) {
@ -150,6 +158,28 @@ void VExportDialog::setupUI()
QDesktopServices::openUrl(url);
});
connect(m_copyBtn, &QPushButton::clicked,
this, [this]() {
if (m_exportedFile.isEmpty()) {
return;
}
bool ret = false;
QString content = VUtils::readFileFromDisk(m_exportedFile);
if (!content.isNull()) {
QMimeData *data = new QMimeData();
data->setText(content);
VClipboardUtils::setMimeDataToClipboard(QApplication::clipboard(), data, QClipboard::Clipboard);
ret = true;
}
if (ret) {
appendLogLine(tr("Copied content of file %1").arg(m_exportedFile));
} else {
appendLogLine(tr("Fail to copy content of file %1").arg(m_exportedFile));
}
});
// Progress bar.
m_proBar = new QProgressBar();
m_proBar->setRange(0, 0);
@ -524,6 +554,8 @@ void VExportDialog::startExport()
m_askedToStop = false;
m_exporter->setAskedToStop(false);
m_inExport = true;
m_exportedFile.clear();
m_copyBtn->setEnabled(false);
QString outputFolder = QDir::cleanPath(QDir(getOutputDirectory()).absolutePath());
@ -655,8 +687,16 @@ void VExportDialog::startExport()
} else {
switch (s_opt.m_source) {
case ExportSource::CurrentNote:
ret = doExport(m_file, s_opt, outputFolder, &msg);
{
QStringList files;
ret = doExport(m_file, s_opt, outputFolder, &msg, &files);
if (ret == 1 && s_opt.m_format == ExportFormat::HTML) {
Q_ASSERT(files.size() == 1);
m_exportedFile = files.first();
}
break;
}
case ExportSource::CurrentFolder:
ret = doExport(m_directory, s_opt, outputFolder, &msg);
@ -698,6 +738,8 @@ exit:
m_inExport = false;
m_exportBtn->setEnabled(true);
m_proBar->hide();
m_copyBtn->setEnabled(!m_exportedFile.isEmpty());
}
QString VExportDialog::getOutputDirectory() const

View File

@ -417,6 +417,8 @@ private:
QPushButton *m_exportBtn;
QPushButton *m_copyBtn;
QLabel *m_layoutLabel;
QCheckBox *m_wkhtmltopdfCB;
@ -480,6 +482,9 @@ private:
// Exporter used to export PDF and HTML.
VExporter *m_exporter;
// Last exproted file path.
QString m_exportedFile;
// Last output folder path.
static QString s_lastOutputFolder;