From 54897073cfdbd6f2ca595e6234d517384847ee9f Mon Sep 17 00:00:00 2001 From: Lukáš Lalinský Date: Fri, 10 Jul 2009 00:04:56 +0200 Subject: Print preview --- dbmodel.qrc | 1 + icons/16x16/document-print-preview.png | Bin 0 -> 779 bytes src/mainwindow.cpp | 32 ++++++++++++++++++++++++++++---- src/mainwindow.h | 4 ++++ 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 icons/16x16/document-print-preview.png diff --git a/dbmodel.qrc b/dbmodel.qrc index 1a41100..f7de8dc 100644 --- a/dbmodel.qrc +++ b/dbmodel.qrc @@ -9,6 +9,7 @@ icons/16x16/document-save.png icons/16x16/document-save-as.png icons/16x16/document-print.png + icons/16x16/document-print-preview.png icons/16x16/edit-undo.png icons/16x16/edit-redo.png icons/16x16/edit-delete.png diff --git a/icons/16x16/document-print-preview.png b/icons/16x16/document-print-preview.png new file mode 100644 index 0000000..ab92a30 Binary files /dev/null and b/icons/16x16/document-print-preview.png differ diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 85a526d..244cf4a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -54,6 +55,7 @@ public: QMap propertyEditorsIndexes; QAction *printAction; + QAction *printPreviewAction; QActionGroup *notationActionGroup; QMenu *notationMenu; @@ -224,8 +226,15 @@ MainWindow::setupActions() d->printAction = new QAction(this); d->printAction->setText(tr("&Print...")); d->printAction->setIcon(loadIcon("document-print")); + d->printAction->setShortcut(QKeySequence(tr("Ctrl+P"))); connect(d->printAction, SIGNAL(triggered(bool)), SLOT(print())); + d->printPreviewAction = new QAction(this); + d->printPreviewAction->setText(tr("Print Previe&w...")); + d->printPreviewAction->setIcon(loadIcon("document-print-preview")); + d->printPreviewAction->setShortcut(QKeySequence(tr("Ctrl+Shift+P"))); + connect(d->printPreviewAction, SIGNAL(triggered(bool)), SLOT(printPreview())); + for (int i = 0; i < MaxRecentFiles; i++) { m_actionRecentFile[i] = new QAction(this); m_actionRecentFile[i]->setVisible(false); @@ -386,6 +395,7 @@ MainWindow::setupMenuBar() menu->addSeparator(); menu->addAction(m_actionExportPNG); + menu->addAction(d->printPreviewAction); menu->addAction(d->printAction); m_actionRecentFilesSeparator = menu->addSeparator(); for (int i = 0; i < MaxRecentFiles; i++) @@ -508,13 +518,27 @@ MainWindow::print() QPrinter printer; QPrintDialog printDialog(&printer, this); if (printDialog.exec() == QDialog::Accepted) { - QPainter painter(&printer); - m_model->setPrinting(true); - m_model->render(&painter); - m_model->setPrinting(false); + paintOnPrinter(&printer); } } +void +MainWindow::printPreview() +{ + QPrintPreviewDialog printPreviewDialog(this); + connect(&printPreviewDialog, SIGNAL(paintRequested(QPrinter*)), SLOT(paintOnPrinter(QPrinter*))); + printPreviewDialog.exec(); +} + +void +MainWindow::paintOnPrinter(QPrinter *printer) +{ + QPainter painter(printer); + m_model->setPrinting(true); + m_model->render(&painter); + m_model->setPrinting(false); +} + void MainWindow::newModel(DiagramDocument *newModel) { diff --git a/src/mainwindow.h b/src/mainwindow.h index 4f059cc..6c1a094 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -26,6 +26,8 @@ #include "diagramview.h" #include "diagramdocument.h" +class QPrinter; + class MainWindow: public QMainWindow { Q_OBJECT @@ -54,6 +56,8 @@ public slots: bool saveAs(); void exportDocument(); void print(); + void printPreview(); + void paintOnPrinter(QPrinter *); void setViewScale(const QString &scale); void about(); -- cgit v1.2.3-54-g00ecf