diff --git a/doc/index.docbook b/doc/index.docbook --- a/doc/index.docbook +++ b/doc/index.docbook @@ -1220,7 +1220,28 @@ Export... Exports the plotted graphs to an image file in all formats supported by &kde;. - + + + + File + Print... + + + + Opens print configuration window. Press the Options >> button then choose the KmPlot Options tab to configure options that are specific for &kmplot;. + + + + + + File + Print Preview + + + + Shows the preliminary image of the current plot as printed on the current default printer. Press the rightmost button on the toolbar of the print preview window to configure options that are specific for &kmplot;. + + diff --git a/kmplot/kmplot_part.rc b/kmplot/kmplot_part.rc --- a/kmplot/kmplot_part.rc +++ b/kmplot/kmplot_part.rc @@ -1,12 +1,13 @@ - + + diff --git a/kmplot/maindlg.h b/kmplot/maindlg.h --- a/kmplot/maindlg.h +++ b/kmplot/maindlg.h @@ -31,6 +31,7 @@ // Qt includes #include #include +#include #include #include @@ -47,6 +48,7 @@ #include "coordsconfigdialog.h" #include "view.h" #include "kmplotio.h" +#include "kprinterdlg.h" class BrowserExtension; class Calculator; @@ -134,6 +136,8 @@ void slotSaveas(); ///Print the current plot void slotPrint(); + /// For calling print preview functionality + void slotPrintPreview(); ///Export the current plot as a png, svg or bmp picture void slotExport(); ///Implement the Configure KmPlot dialog @@ -151,6 +155,8 @@ private: /// Settings the standard and non standard actions of the application. void setupActions(); + /// Sets the printer options and draw the plot with the current options. + void setupPrinter(KPrinterDlg *printDialog, QPrinter *printer); /// Called when a file is opened. The filename is m_url bool openFile() Q_DECL_OVERRIDE; diff --git a/kmplot/maindlg.cpp b/kmplot/maindlg.cpp --- a/kmplot/maindlg.cpp +++ b/kmplot/maindlg.cpp @@ -37,7 +37,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -60,7 +61,6 @@ #include "calculator.h" #include "functiontools.h" #include "functioneditor.h" -#include "kprinterdlg.h" #include "kconstanteditor.h" #include "xparser.h" @@ -232,6 +232,7 @@ m_recentFiles = KStandardAction::openRecent( this, SLOT(slotOpenRecent(QUrl)), this ); actionCollection()->addAction( "file_open_recent", m_recentFiles ); actionCollection()->addAction( KStandardAction::Print, "file_print", this, SLOT(slotPrint()) ); + actionCollection()->addAction( KStandardAction::PrintPreview, "file_print_preview", this, SLOT(slotPrintPreview()) ); KStandardAction::save( this, SLOT(slotSave()), actionCollection() ); KStandardAction::saveAs( this, SLOT(slotSaveas()), actionCollection() ); @@ -708,15 +709,54 @@ if (printDialog->exec()) { - View::self()->setPrintHeaderTable( printdlg->printHeaderTable() ); - View::self()->setPrintBackground( printdlg->printBackground() ); - View::self()->setPrintWidth( printdlg->printWidth() ); - View::self()->setPrintHeight( printdlg->printHeight() ); - View::self()->draw(&prt, View::Printer); + setupPrinter(printdlg, &prt); } delete printDialog; } +void MainDlg::slotPrintPreview() +{ + QPrinter prt( QPrinter::PrinterResolution ); + QPointer preview = new QPrintPreviewDialog( &prt ); + QPointer printdlg = new KPrinterDlg( m_parent ); + QList toolbarlist = preview->findChildren(); + if(!toolbarlist.isEmpty()) + { + QAction *printSettings = toolbarlist.first()->addAction( QIcon::fromTheme( "configure" ), i18n("Print Settings") ); + QList previewWidgetsList = preview->findChildren(); + QPrintPreviewWidget *previewWidget = previewWidgetsList.first(); + connect( printSettings, &QAction::triggered, [preview, previewWidget, printdlg, &prt]{ + QDialog *printSettingsDialog = new QDialog( preview, Qt::WindowFlags() ); + printSettingsDialog->setWindowTitle( i18n("Print Settings") ); + QVBoxLayout *mainLayout = new QVBoxLayout; + printSettingsDialog->setLayout(mainLayout); + mainLayout->addWidget(printdlg); + QDialogButtonBox *buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok|QDialogButtonBox::Cancel ); + connect(buttonBox, &QDialogButtonBox::accepted, [previewWidget, printSettingsDialog]{ + previewWidget->updatePreview(); + printSettingsDialog->close(); + } ); + connect(buttonBox, &QDialogButtonBox::rejected, printSettingsDialog, &QDialog::reject); + mainLayout->addWidget(buttonBox); + printSettingsDialog->show(); + }); + } + connect(preview, &QPrintPreviewDialog::paintRequested, [this, &printdlg, &prt]{ + setupPrinter(printdlg, &prt); + } ); + preview->exec(); + delete printdlg; + delete preview; +} + +void MainDlg::setupPrinter(KPrinterDlg *printDialog, QPrinter *printer) +{ + View::self()->setPrintHeaderTable( printDialog->printHeaderTable() ); + View::self()->setPrintBackground( printDialog->printBackground() ); + View::self()->setPrintWidth( printDialog->printWidth() ); + View::self()->setPrintHeight( printDialog->printHeight() ); + View::self()->draw(printer, View::Printer); +} void MainDlg::editAxes() {