|
|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
#include <QtWidgets>
|
|
|
#include <QCoreApplication>
|
|
|
+#include <QProcess>
|
|
|
|
|
|
#ifndef QT_NO_PRINTER
|
|
|
#include <QPrinter>
|
|
|
@@ -18,6 +19,7 @@
|
|
|
#include "vnotefile.h"
|
|
|
#include "vnote.h"
|
|
|
#include "vexporter.h"
|
|
|
+#include "vlineedit.h"
|
|
|
|
|
|
extern VConfigManager *g_config;
|
|
|
|
|
|
@@ -25,7 +27,7 @@ extern VNote *g_vnote;
|
|
|
|
|
|
QString VExportDialog::s_lastOutputFolder;
|
|
|
|
|
|
-ExportFormat VExportDialog::s_lastExportFormat = ExportFormat::Markdown;
|
|
|
+ExportOption VExportDialog::s_opt;
|
|
|
|
|
|
#define LOGERR(x) do { QString msg = (x); \
|
|
|
VUtils::addErrMsg(p_errMsg, msg); \
|
|
|
@@ -45,7 +47,8 @@ VExportDialog::VExportDialog(VNotebook *p_notebook,
|
|
|
m_cart(p_cart),
|
|
|
m_pageLayout(QPageLayout(QPageSize(QPageSize::A4),
|
|
|
QPageLayout::Portrait,
|
|
|
- QMarginsF(0.3, 0.3, 0.3, 0.3))),
|
|
|
+ QMarginsF(10, 16, 10, 10),
|
|
|
+ QPageLayout::Millimeter)),
|
|
|
m_inExport(false),
|
|
|
m_askedToStop(false)
|
|
|
{
|
|
|
@@ -56,6 +59,10 @@ VExportDialog::VExportDialog(VNotebook *p_notebook,
|
|
|
setupUI();
|
|
|
|
|
|
m_exporter = new VExporter(this);
|
|
|
+ connect(m_exporter, &VExporter::outputLog,
|
|
|
+ this, [this](const QString &p_log) {
|
|
|
+ appendLogLine(p_log);
|
|
|
+ });
|
|
|
|
|
|
initUIFields(p_renderer);
|
|
|
|
|
|
@@ -68,6 +75,8 @@ void VExportDialog::setupUI()
|
|
|
m_srcCB = VUtils::getComboBox();
|
|
|
m_srcCB->setToolTip(tr("Choose notes to export"));
|
|
|
m_srcCB->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
|
|
|
+ connect(m_srcCB, SIGNAL(currentIndexChanged(int)),
|
|
|
+ this, SLOT(handleCurrentSrcChanged(int)));
|
|
|
|
|
|
// Target format.
|
|
|
m_formatCB = VUtils::getComboBox();
|
|
|
@@ -97,12 +106,12 @@ void VExportDialog::setupUI()
|
|
|
m_outputEdit = new VLineEdit(s_lastOutputFolder);
|
|
|
connect(m_outputEdit, &QLineEdit::textChanged,
|
|
|
this, &VExportDialog::handleInputChanged);
|
|
|
- m_browseBtn = new QPushButton(tr("&Browse"));
|
|
|
- connect(m_browseBtn, &QPushButton::clicked,
|
|
|
- this, &VExportDialog::handleBrowseBtnClicked);
|
|
|
+ QPushButton *browseBtn = new QPushButton(tr("&Browse"));
|
|
|
+ connect(browseBtn, &QPushButton::clicked,
|
|
|
+ this, &VExportDialog::handleOutputBrowseBtnClicked);
|
|
|
QHBoxLayout *outputLayout = new QHBoxLayout();
|
|
|
outputLayout->addWidget(m_outputEdit);
|
|
|
- outputLayout->addWidget(m_browseBtn);
|
|
|
+ outputLayout->addWidget(browseBtn);
|
|
|
|
|
|
m_basicBox = new QGroupBox(tr("Information"));
|
|
|
|
|
|
@@ -150,10 +159,12 @@ void VExportDialog::setupUI()
|
|
|
m_basicBox->setLayout(basicLayout);
|
|
|
|
|
|
// Settings box.
|
|
|
+ m_generalSettings = setupGeneralAdvancedSettings();
|
|
|
m_htmlSettings = setupHTMLAdvancedSettings();
|
|
|
m_pdfSettings = setupPDFAdvancedSettings();
|
|
|
|
|
|
QVBoxLayout *advLayout = new QVBoxLayout();
|
|
|
+ advLayout->addWidget(m_generalSettings);
|
|
|
advLayout->addWidget(m_htmlSettings);
|
|
|
advLayout->addWidget(m_pdfSettings);
|
|
|
|
|
|
@@ -190,8 +201,75 @@ QWidget *VExportDialog::setupPDFAdvancedSettings()
|
|
|
layoutLayout->addWidget(layoutBtn);
|
|
|
layoutLayout->addStretch();
|
|
|
|
|
|
+ // Use wkhtmltopdf.
|
|
|
+ m_wkhtmltopdfCB = new QCheckBox(tr("Use wkhtmltopdf"));
|
|
|
+ m_wkhtmltopdfCB->setToolTip(tr("Use wkhtmltopdf tool to generate PDF (wkhtmltopdf needed to be installed)"));
|
|
|
+ connect(m_wkhtmltopdfCB, &QCheckBox::stateChanged,
|
|
|
+ this, [this](int p_state) {
|
|
|
+ bool checked = p_state == Qt::Checked;
|
|
|
+ m_wkPathEdit->setEnabled(checked);
|
|
|
+ m_wkPathBrowseBtn->setEnabled(checked);
|
|
|
+ m_wkBackgroundCB->setEnabled(checked);
|
|
|
+ m_wkTableOfContentsCB->setEnabled(checked);
|
|
|
+ m_wkPageNumberCB->setEnabled(checked);
|
|
|
+ m_wkExtraArgsEdit->setEnabled(checked);
|
|
|
+ });
|
|
|
+
|
|
|
+ QPushButton *wkBtn = new QPushButton(tr("Download wkhtmltopdf"));
|
|
|
+ connect(wkBtn, &QPushButton::clicked,
|
|
|
+ this, [this]() {
|
|
|
+ QString url("https://wkhtmltopdf.org/downloads.html");
|
|
|
+ QDesktopServices::openUrl(QUrl(url));
|
|
|
+ });
|
|
|
+
|
|
|
+ QHBoxLayout *wkLayout = new QHBoxLayout();
|
|
|
+ wkLayout->addWidget(m_wkhtmltopdfCB);
|
|
|
+ wkLayout->addStretch();
|
|
|
+ wkLayout->addWidget(wkBtn);
|
|
|
+
|
|
|
+ // wkhtmltopdf Path.
|
|
|
+ m_wkPathEdit = new VLineEdit();
|
|
|
+ m_wkPathEdit->setToolTip(tr("Tell VNote where to find wkhtmlpdf tool"));
|
|
|
+ m_wkPathEdit->setEnabled(m_wkhtmltopdfCB->isChecked());
|
|
|
+
|
|
|
+ m_wkPathBrowseBtn = new QPushButton(tr("&Browse"));
|
|
|
+ m_wkPathBrowseBtn->setEnabled(m_wkhtmltopdfCB->isChecked());
|
|
|
+ connect(m_wkPathBrowseBtn, &QPushButton::clicked,
|
|
|
+ this, &VExportDialog::handleWkPathBrowseBtnClicked);
|
|
|
+
|
|
|
+ QHBoxLayout *wkPathLayout = new QHBoxLayout();
|
|
|
+ wkPathLayout->addWidget(m_wkPathEdit);
|
|
|
+ wkPathLayout->addWidget(m_wkPathBrowseBtn);
|
|
|
+
|
|
|
+ // wkhtmltopdf enable background.
|
|
|
+ m_wkBackgroundCB = new QCheckBox(tr("Enable background"));
|
|
|
+ m_wkBackgroundCB->setToolTip(tr("Enable background when printing"));
|
|
|
+ m_wkBackgroundCB->setEnabled(m_wkhtmltopdfCB->isChecked());
|
|
|
+
|
|
|
+ // wkhtmltopdf enable table of contents.
|
|
|
+ m_wkTableOfContentsCB = new QCheckBox(tr("Enable Table Of Contents"));
|
|
|
+ m_wkTableOfContentsCB->setToolTip(tr("Add a table of contents to the document"));
|
|
|
+ m_wkTableOfContentsCB->setEnabled(m_wkhtmltopdfCB->isChecked());
|
|
|
+
|
|
|
+ // wkhtmltopdf page number.
|
|
|
+ m_wkPageNumberCB = VUtils::getComboBox();
|
|
|
+ m_wkPageNumberCB->setToolTip(tr("Append page number as footer"));
|
|
|
+ m_wkPageNumberCB->setEnabled(m_wkhtmltopdfCB->isChecked());
|
|
|
+
|
|
|
+ // wkhtmltopdf extra argumnets.
|
|
|
+ m_wkExtraArgsEdit = new VLineEdit();
|
|
|
+ m_wkExtraArgsEdit->setToolTip(tr("Additional arguments passed to wkhtmltopdf"));
|
|
|
+ m_wkExtraArgsEdit->setPlaceholderText(tr("Use \" to enclose arguments containing space"));
|
|
|
+ m_wkExtraArgsEdit->setEnabled(m_wkhtmltopdfCB->isChecked());
|
|
|
+
|
|
|
QFormLayout *advLayout = new QFormLayout();
|
|
|
advLayout->addRow(tr("Page layout:"), layoutLayout);
|
|
|
+ advLayout->addRow(wkLayout);
|
|
|
+ advLayout->addRow(tr("wkhtmltopdf path:"), wkPathLayout);
|
|
|
+ advLayout->addRow(m_wkBackgroundCB);
|
|
|
+ advLayout->addRow(m_wkTableOfContentsCB);
|
|
|
+ advLayout->addRow(tr("Page number:"), m_wkPageNumberCB);
|
|
|
+ advLayout->addRow(tr("Additional arguments:"), m_wkExtraArgsEdit);
|
|
|
|
|
|
advLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
|
@@ -206,14 +284,12 @@ QWidget *VExportDialog::setupHTMLAdvancedSettings()
|
|
|
// Embed CSS styles.
|
|
|
m_embedStyleCB = new QCheckBox(tr("Embed CSS styles"), this);
|
|
|
m_embedStyleCB->setToolTip(tr("Embed CSS styles in HTML file"));
|
|
|
- m_embedStyleCB->setChecked(true);
|
|
|
|
|
|
// Complete HTML.
|
|
|
m_completeHTMLCB = new QCheckBox(tr("Complete page"), this);
|
|
|
m_completeHTMLCB->setToolTip(tr("Export the whole web page along with pictures "
|
|
|
"which may not keep the HTML link structure of "
|
|
|
"the original page"));
|
|
|
- m_completeHTMLCB->setChecked(true);
|
|
|
|
|
|
// Mime HTML.
|
|
|
m_mimeHTMLCB = new QCheckBox(tr("MIME HTML"), this);
|
|
|
@@ -238,6 +314,24 @@ QWidget *VExportDialog::setupHTMLAdvancedSettings()
|
|
|
return wid;
|
|
|
}
|
|
|
|
|
|
+QWidget *VExportDialog::setupGeneralAdvancedSettings()
|
|
|
+{
|
|
|
+ // Include subfolders.
|
|
|
+ m_subfolderCB = new QCheckBox(tr("Process subfolders"));
|
|
|
+ m_subfolderCB->setToolTip(tr("Process subfolders recursively"));
|
|
|
+ m_subfolderCB->setChecked(true);
|
|
|
+
|
|
|
+ QFormLayout *advLayout = new QFormLayout();
|
|
|
+ advLayout->addRow(m_subfolderCB);
|
|
|
+
|
|
|
+ advLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
+
|
|
|
+ QWidget *wid = new QWidget();
|
|
|
+ wid->setLayout(advLayout);
|
|
|
+
|
|
|
+ return wid;
|
|
|
+}
|
|
|
+
|
|
|
void VExportDialog::initUIFields(MarkdownConverterType p_renderer)
|
|
|
{
|
|
|
// Notes to export.
|
|
|
@@ -248,7 +342,7 @@ void VExportDialog::initUIFields(MarkdownConverterType p_renderer)
|
|
|
|
|
|
if (m_directory) {
|
|
|
m_srcCB->addItem(tr("Current Folder (%1)").arg(m_directory->getName()),
|
|
|
- (int)ExportSource::CurrentDirectory);
|
|
|
+ (int)ExportSource::CurrentFolder);
|
|
|
}
|
|
|
|
|
|
if (m_notebook) {
|
|
|
@@ -265,7 +359,7 @@ void VExportDialog::initUIFields(MarkdownConverterType p_renderer)
|
|
|
m_formatCB->addItem(tr("Markdown"), (int)ExportFormat::Markdown);
|
|
|
m_formatCB->addItem(tr("HTML"), (int)ExportFormat::HTML);
|
|
|
m_formatCB->addItem(tr("PDF"), (int)ExportFormat::PDF);
|
|
|
- m_formatCB->setCurrentIndex(m_formatCB->findData((int)s_lastExportFormat));
|
|
|
+ m_formatCB->setCurrentIndex(m_formatCB->findData((int)s_opt.m_format));
|
|
|
|
|
|
// Markdown renderer.
|
|
|
m_rendererCB->addItem(tr("Hoedown"), MarkdownConverterType::Hoedown);
|
|
|
@@ -281,8 +375,11 @@ void VExportDialog::initUIFields(MarkdownConverterType p_renderer)
|
|
|
m_renderBgCB->addItem(bgColors[i].m_name, bgColors[i].m_name);
|
|
|
}
|
|
|
|
|
|
- m_renderBgCB->setCurrentIndex(
|
|
|
- m_renderBgCB->findData(g_config->getCurRenderBackgroundColor()));
|
|
|
+ if (s_opt.m_renderBg.isEmpty()) {
|
|
|
+ s_opt.m_renderBg = g_config->getCurRenderBackgroundColor();
|
|
|
+ }
|
|
|
+
|
|
|
+ m_renderBgCB->setCurrentIndex(m_renderBgCB->findData(s_opt.m_renderBg));
|
|
|
|
|
|
// Markdown rendering style.
|
|
|
QList<QString> styles = g_config->getCssStyles();
|
|
|
@@ -301,6 +398,56 @@ void VExportDialog::initUIFields(MarkdownConverterType p_renderer)
|
|
|
|
|
|
m_renderCodeBlockStyleCB->setCurrentIndex(
|
|
|
m_renderCodeBlockStyleCB->findData(g_config->getCodeBlockCssStyle()));
|
|
|
+
|
|
|
+ m_embedStyleCB->setChecked(s_opt.m_htmlOpt.m_embedCssStyle);
|
|
|
+
|
|
|
+ m_completeHTMLCB->setChecked(s_opt.m_htmlOpt.m_completeHTML);
|
|
|
+
|
|
|
+ m_mimeHTMLCB->setChecked(s_opt.m_htmlOpt.m_mimeHTML);
|
|
|
+
|
|
|
+ m_wkhtmltopdfCB->setChecked(s_opt.m_pdfOpt.m_wkhtmltopdf);
|
|
|
+
|
|
|
+ // wkhtmltopdf path.
|
|
|
+ m_wkPathEdit->setText(g_config->getWkhtmltopdfPath());
|
|
|
+
|
|
|
+ m_wkBackgroundCB->setChecked(s_opt.m_pdfOpt.m_wkEnableBackground);
|
|
|
+
|
|
|
+ m_wkTableOfContentsCB->setChecked(s_opt.m_pdfOpt.m_wkEnableTableOfContents);
|
|
|
+
|
|
|
+ // wkhtmltopdf page number.
|
|
|
+ m_wkPageNumberCB->addItem(tr("None"), (int)ExportPageNumber::None);
|
|
|
+ m_wkPageNumberCB->addItem(tr("Left"), (int)ExportPageNumber::Left);
|
|
|
+ m_wkPageNumberCB->addItem(tr("Center"), (int)ExportPageNumber::Center);
|
|
|
+ m_wkPageNumberCB->addItem(tr("Right"), (int)ExportPageNumber::Right);
|
|
|
+ m_wkPageNumberCB->setCurrentIndex(m_wkPageNumberCB->findData((int)s_opt.m_pdfOpt.m_wkPageNumber));
|
|
|
+
|
|
|
+ m_wkExtraArgsEdit->setText(g_config->getWkhtmltopdfArgs());
|
|
|
+}
|
|
|
+
|
|
|
+bool VExportDialog::checkWkhtmltopdfExecutable(const QString &p_file)
|
|
|
+{
|
|
|
+ QStringList args;
|
|
|
+ args << "--version";
|
|
|
+ int ret = QProcess::execute(p_file, args);
|
|
|
+ switch (ret) {
|
|
|
+ case -2:
|
|
|
+ appendLogLine(tr("Fail to start wkhtmltopdf."));
|
|
|
+ break;
|
|
|
+
|
|
|
+ case -1:
|
|
|
+ appendLogLine(tr("wkhtmltopdf crashed."));
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 0:
|
|
|
+ appendLogLine(tr("Use %1.").arg(p_file));
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ appendLogLine(tr("wkhtmltopdf returned %1.").arg(ret));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret == 0;
|
|
|
}
|
|
|
|
|
|
void VExportDialog::startExport()
|
|
|
@@ -315,45 +462,62 @@ void VExportDialog::startExport()
|
|
|
|
|
|
QString outputFolder = QDir::cleanPath(QDir(getOutputDirectory()).absolutePath());
|
|
|
|
|
|
- ExportOption opt((ExportSource)m_srcCB->currentData().toInt(),
|
|
|
- (ExportFormat)m_formatCB->currentData().toInt(),
|
|
|
- (MarkdownConverterType)m_rendererCB->currentData().toInt(),
|
|
|
- m_renderBgCB->currentData().toString(),
|
|
|
- m_renderStyleCB->currentData().toString(),
|
|
|
- m_renderCodeBlockStyleCB->currentData().toString(),
|
|
|
- &m_pageLayout,
|
|
|
- ExportHTMLOption(m_embedStyleCB->isChecked(),
|
|
|
- m_completeHTMLCB->isChecked(),
|
|
|
- m_mimeHTMLCB->isChecked()));
|
|
|
-
|
|
|
- s_lastExportFormat = opt.m_format;
|
|
|
+ s_opt = ExportOption((ExportSource)m_srcCB->currentData().toInt(),
|
|
|
+ (ExportFormat)m_formatCB->currentData().toInt(),
|
|
|
+ (MarkdownConverterType)m_rendererCB->currentData().toInt(),
|
|
|
+ m_renderBgCB->currentData().toString(),
|
|
|
+ m_renderStyleCB->currentData().toString(),
|
|
|
+ m_renderCodeBlockStyleCB->currentData().toString(),
|
|
|
+ m_subfolderCB->isChecked(),
|
|
|
+ ExportPDFOption(&m_pageLayout,
|
|
|
+ m_wkhtmltopdfCB->isChecked(),
|
|
|
+ QDir::toNativeSeparators(m_wkPathEdit->text()),
|
|
|
+ m_wkBackgroundCB->isChecked(),
|
|
|
+ m_wkTableOfContentsCB->isChecked(),
|
|
|
+ (ExportPageNumber)m_wkPageNumberCB->currentData().toInt(),
|
|
|
+ m_wkExtraArgsEdit->text()),
|
|
|
+ ExportHTMLOption(m_embedStyleCB->isChecked(),
|
|
|
+ m_completeHTMLCB->isChecked(),
|
|
|
+ m_mimeHTMLCB->isChecked()));
|
|
|
|
|
|
m_consoleEdit->clear();
|
|
|
appendLogLine(tr("Export to %1.").arg(outputFolder));
|
|
|
|
|
|
- if (opt.m_format == ExportFormat::PDF
|
|
|
- || opt.m_format == ExportFormat::HTML) {
|
|
|
- m_exporter->prepareExport(opt);
|
|
|
+ if (s_opt.m_format == ExportFormat::PDF
|
|
|
+ || s_opt.m_format == ExportFormat::HTML) {
|
|
|
+ m_exporter->prepareExport(s_opt);
|
|
|
+
|
|
|
+ if (s_opt.m_format == ExportFormat::PDF
|
|
|
+ && s_opt.m_pdfOpt.m_wkhtmltopdf) {
|
|
|
+ g_config->setWkhtmltopdfPath(s_opt.m_pdfOpt.m_wkPath);
|
|
|
+ g_config->setWkhtmltopdfArgs(s_opt.m_pdfOpt.m_wkExtraArgs);
|
|
|
+
|
|
|
+ if (!checkWkhtmltopdfExecutable(s_opt.m_pdfOpt.m_wkPath)) {
|
|
|
+ m_inExport = false;
|
|
|
+ m_exportBtn->setEnabled(true);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
int ret = 0;
|
|
|
QString msg;
|
|
|
|
|
|
- switch ((int)opt.m_source) {
|
|
|
- case (int)ExportSource::CurrentNote:
|
|
|
- ret = doExport(m_file, opt, outputFolder, &msg);
|
|
|
+ switch (s_opt.m_source) {
|
|
|
+ case ExportSource::CurrentNote:
|
|
|
+ ret = doExport(m_file, s_opt, outputFolder, &msg);
|
|
|
break;
|
|
|
|
|
|
- case (int)ExportSource::CurrentDirectory:
|
|
|
- ret = doExport(m_directory, opt, outputFolder, &msg);
|
|
|
+ case ExportSource::CurrentFolder:
|
|
|
+ ret = doExport(m_directory, s_opt, outputFolder, &msg);
|
|
|
break;
|
|
|
|
|
|
- case (int)ExportSource::CurrentNotebook:
|
|
|
- ret = doExport(m_notebook, opt, outputFolder, &msg);
|
|
|
+ case ExportSource::CurrentNotebook:
|
|
|
+ ret = doExport(m_notebook, s_opt, outputFolder, &msg);
|
|
|
break;
|
|
|
|
|
|
- case (int)ExportSource::Cart:
|
|
|
- ret = doExport(m_cart, opt, outputFolder, &msg);
|
|
|
+ case ExportSource::Cart:
|
|
|
+ ret = doExport(m_cart, s_opt, outputFolder, &msg);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
@@ -386,7 +550,7 @@ QString VExportDialog::getOutputDirectory() const
|
|
|
return m_outputEdit->text();
|
|
|
}
|
|
|
|
|
|
-void VExportDialog::handleBrowseBtnClicked()
|
|
|
+void VExportDialog::handleOutputBrowseBtnClicked()
|
|
|
{
|
|
|
QString initPath = getOutputDirectory();
|
|
|
if (!QFileInfo::exists(initPath)) {
|
|
|
@@ -405,6 +569,29 @@ void VExportDialog::handleBrowseBtnClicked()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void VExportDialog::handleWkPathBrowseBtnClicked()
|
|
|
+{
|
|
|
+ QString initPath = m_wkPathEdit->text();
|
|
|
+ if (!QFileInfo::exists(initPath)) {
|
|
|
+ initPath = QCoreApplication::applicationDirPath();
|
|
|
+ }
|
|
|
+
|
|
|
+#if defined(Q_OS_WIN)
|
|
|
+ QString filter = tr("Executable (*.exe)");
|
|
|
+#else
|
|
|
+ QString filter;
|
|
|
+#endif
|
|
|
+
|
|
|
+ QString filePath = QFileDialog::getOpenFileName(this,
|
|
|
+ tr("Select wkhtmltopdf Executable"),
|
|
|
+ initPath,
|
|
|
+ filter);
|
|
|
+
|
|
|
+ if (!filePath.isEmpty()) {
|
|
|
+ m_wkPathEdit->setText(filePath);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void VExportDialog::handleInputChanged()
|
|
|
{
|
|
|
// Source.
|
|
|
@@ -492,13 +679,15 @@ int VExportDialog::doExport(VDirectory *p_directory,
|
|
|
ret += doExport(file, p_opt, outputPath, p_errMsg);
|
|
|
}
|
|
|
|
|
|
- // Export subfolder.
|
|
|
- for (auto const & dir : p_directory->getSubDirs()) {
|
|
|
- if (!checkUserAction()) {
|
|
|
- goto exit;
|
|
|
- }
|
|
|
+ // Export subfolders.
|
|
|
+ if (p_opt.m_processSubfolders) {
|
|
|
+ for (auto const & dir : p_directory->getSubDirs()) {
|
|
|
+ if (!checkUserAction()) {
|
|
|
+ goto exit;
|
|
|
+ }
|
|
|
|
|
|
- ret += doExport(dir, p_opt, outputPath, p_errMsg);
|
|
|
+ ret += doExport(dir, p_opt, outputPath, p_errMsg);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
exit:
|
|
|
@@ -731,8 +920,9 @@ void VExportDialog::handleLayoutBtnClicked()
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ m_pageLayout.setUnits(QPageLayout::Millimeter);
|
|
|
m_pageLayout.setPageSize(printer.pageLayout().pageSize());
|
|
|
- m_pageLayout.setMargins(printer.pageLayout().margins());
|
|
|
+ m_pageLayout.setMargins(printer.pageLayout().margins(QPageLayout::Millimeter));
|
|
|
m_pageLayout.setOrientation(printer.pageLayout().orientation());
|
|
|
|
|
|
updatePageLayoutLabel();
|
|
|
@@ -741,8 +931,6 @@ void VExportDialog::handleLayoutBtnClicked()
|
|
|
|
|
|
void VExportDialog::updatePageLayoutLabel()
|
|
|
{
|
|
|
- qDebug() << "page layout margins:" << m_pageLayout.margins();
|
|
|
-
|
|
|
m_layoutLabel->setText(QString("%1, %2").arg(m_pageLayout.pageSize().name())
|
|
|
.arg(m_pageLayout.orientation() == QPageLayout::Portrait ?
|
|
|
tr("Portrait") : tr("Landscape")));
|
|
|
@@ -771,3 +959,21 @@ void VExportDialog::handleCurrentFormatChanged(int p_index)
|
|
|
m_pdfSettings->setVisible(pdfEnabled);
|
|
|
m_htmlSettings->setVisible(htmlEnabled);
|
|
|
}
|
|
|
+
|
|
|
+void VExportDialog::handleCurrentSrcChanged(int p_index)
|
|
|
+{
|
|
|
+ bool subfolderEnabled = false;
|
|
|
+
|
|
|
+ if (p_index >= 0) {
|
|
|
+ switch (m_srcCB->currentData().toInt()) {
|
|
|
+ case (int)ExportSource::CurrentFolder:
|
|
|
+ subfolderEnabled = true;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ m_subfolderCB->setVisible(subfolderEnabled);
|
|
|
+}
|