diff --git a/app/exportpdfdialog.cpp b/app/exportpdfdialog.cpp index 8ba6e8c4..6342e772 100644 --- a/app/exportpdfdialog.cpp +++ b/app/exportpdfdialog.cpp @@ -21,7 +21,7 @@ #include #include -ExportPdfDialog::ExportPdfDialog(const QString &fileName, QWidget *parent) : +ExportPdfDialog::ExportPdfDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ExportPdfDialog) { @@ -31,12 +31,6 @@ ExportPdfDialog::ExportPdfDialog(const QString &fileName, QWidget *parent) : QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok); okButton->setText("Export PDF"); - if (!fileName.isEmpty()) { - QFileInfo info(fileName); - QString exportFileName = info.absoluteFilePath().replace(info.suffix(), "pdf"); - ui->exportToLineEdit->setText(exportFileName); - } - // fill paper size combobox ui->paperSizeComboBox->addItem(tr("A4 (210 x 297 mm, 8.26 x 11.69 inches)"), QPrinter::A4); ui->paperSizeComboBox->addItem(tr("Letter (8.5 x 11 inches, 215.9 x 279.4 mm)"), QPrinter::Letter); @@ -46,9 +40,6 @@ ExportPdfDialog::ExportPdfDialog(const QString &fileName, QWidget *parent) : ui->paperSizeComboBox->addItem(tr("A6 (105 x 148 mm)"), QPrinter::A6); ui->paperSizeComboBox->addItem(tr("B4 (250 x 353 mm)"), QPrinter::B4); ui->paperSizeComboBox->addItem(tr("B5 (176 x 250 mm, 6.93 x 9.84 inches)"), QPrinter::B5); - - // initialize Ok button state - exportToTextChanged(fileName); } ExportPdfDialog::~ExportPdfDialog() @@ -79,6 +70,18 @@ QPrinter *ExportPdfDialog::printer() return p; } +void ExportPdfDialog::setFileName(const QString &fileName) +{ + if (!fileName.isEmpty()) { + QFileInfo info(fileName); + QString exportFileName = info.absoluteFilePath().replace(info.suffix(), "pdf"); + ui->exportToLineEdit->setText(exportFileName); + } + + // initialize Ok button state + exportToTextChanged(fileName); +} + void ExportPdfDialog::exportToTextChanged(const QString &text) { // only enable ok button if a filename was provided diff --git a/app/exportpdfdialog.h b/app/exportpdfdialog.h index 32b5f4c8..74dc8452 100644 --- a/app/exportpdfdialog.h +++ b/app/exportpdfdialog.h @@ -29,11 +29,13 @@ class ExportPdfDialog : public QDialog Q_OBJECT public: - explicit ExportPdfDialog(const QString &fileName, QWidget *parent = 0); + explicit ExportPdfDialog(QWidget *parent = 0); ~ExportPdfDialog(); QPrinter *printer(); + void setFileName(const QString &fileName); + private slots: void exportToTextChanged(const QString &text); void chooseFileButtonClicked(); diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 71205398..f03aa9f8 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -1,4 +1,4 @@ -/* +/* * Copyright 2013-2015 Christian Loose * * This program is free software: you can redistribute it and/or modify @@ -84,7 +84,8 @@ MainWindow::MainWindow(const QString &fileName, QWidget *parent) : htmlPreviewController(0), themeCollection(new ThemeCollection()), splitFactor(0.5), - rightViewCollapsed(false) + rightViewCollapsed(false), + exportPdfDialog(0) { ui->setupUi(this); setupUi(); @@ -312,17 +313,20 @@ void MainWindow::fileExportToHtml() void MainWindow::fileExportToPdf() { - // using temporary QTextDocument instance to get links exported\printed correctly, - // as links will dissappear when printing directly from QWebView in current Qt implementation - // of QWebView::print() method (possible bug in Qt?) - // more info here: http://stackoverflow.com/questions/11629093/add-working-url-into-pdf-using-qt-qprinter + // using temporary QTextDocument instance to get links exported\printed correctly, + // as links will dissappear when printing directly from QWebView in current Qt implementation + // of QWebView::print() method (possible bug in Qt?) + // more info here: http://stackoverflow.com/questions/11629093/add-working-url-into-pdf-using-qt-qprinter - ExportPdfDialog dialog(fileName); - if (dialog.exec() == QDialog::Accepted) { - QTextDocument doc; - doc.setHtml(ui->webView->page()->currentFrame()->toHtml()); - doc.print(dialog.printer()); - } + if (!exportPdfDialog) // init, if not exists + exportPdfDialog = new ExportPdfDialog(this); + + exportPdfDialog->setFileName(fileName); + if (exportPdfDialog->exec() == QDialog::Accepted) { + QTextDocument doc; + doc.setHtml(ui->webView->page()->currentFrame()->toHtml()); + doc.print(exportPdfDialog->printer()); + } } void MainWindow::filePrint() diff --git a/app/mainwindow.h b/app/mainwindow.h index bae34ff7..ea67a679 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -1,4 +1,4 @@ -/* +/* * Copyright 2013-2014 Christian Loose * * This program is free software: you can redistribute it and/or modify @@ -40,6 +40,7 @@ class SlideLineMapping; class SnippetCollection; class ThemeCollection; class ViewSynchronizer; +class ExportPdfDialog; class StatusBarWidget; @@ -164,6 +165,8 @@ private slots: QString fileName; float splitFactor; bool rightViewCollapsed; + + ExportPdfDialog *exportPdfDialog; }; #endif // MAINWINDOW_H