diff --git a/doc/index.docbook b/doc/index.docbook --- a/doc/index.docbook +++ b/doc/index.docbook @@ -1195,6 +1195,21 @@ 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 @@ -134,6 +134,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 diff --git a/kmplot/maindlg.cpp b/kmplot/maindlg.cpp --- a/kmplot/maindlg.cpp +++ b/kmplot/maindlg.cpp @@ -37,6 +37,8 @@ #include #include #include +#include +#include #include #include #include @@ -230,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() ); @@ -693,6 +696,45 @@ delete printDialog; } +void MainDlg::slotPrintPreview() +{ + QPrinter prt( QPrinter::PrinterResolution ); + prt.setResolution( 72 ); + 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, [&printdlg](QPrinter *p){ + View::self()->setPrintHeaderTable( printdlg->printHeaderTable() ); + View::self()->setPrintBackground( printdlg->printBackground() ); + View::self()->setPrintWidth( printdlg->printWidth() ); + View::self()->setPrintHeight( printdlg->printHeight() ); + View::self()->draw( p, View::Printer ); + } ); + preview->exec(); + delete printdlg; + delete preview; +} void MainDlg::editAxes() {