KD Reports API Documentation  2.1
KDReportsPreviewDialog.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** This file is part of the KD Reports library.
4 **
5 ** SPDX-FileCopyrightText: 2007-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
6 **
7 ** SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDAB-KDReports OR LicenseRef-KDAB-KDReports-US
8 **
9 ** Licensees holding valid commercial KD Reports licenses may use this file in
10 ** accordance with the KD Reports Commercial License Agreement provided with
11 ** the Software.
12 **
13 ** Contact info@kdab.com if any conditions of this licensing are not clear to you.
14 **
15 ****************************************************************************/
16 
17 #include "KDReportsPreviewDialog.h"
19 #include "KDReportsPreviewWidget.h"
20 #include "KDReportsReport.h"
21 #include "KDReportsReport_p.h"
23 
24 #include <QDialogButtonBox>
25 #include <QFileDialog>
26 #include <QInputDialog>
27 #include <QMessageBox>
28 #include <QPushButton>
29 #include <QVBoxLayout>
30 
31 class KDReports::PreviewDialogPrivate
32 {
33 public:
34  PreviewDialogPrivate(KDReports::PreviewDialog *q)
35  : q(q)
36  , m_previewWidget(nullptr)
37  , m_buttonBox(nullptr)
38  , m_quickPrintButton(nullptr)
39  , m_dirBrowsingEnabled(true)
40  {
41  }
42 
43  void slotTableBreakingDialog() const;
44  void slotPrintWithDialog() const;
45  void slotQuickPrint() const;
46  void slotSave();
47 
49  KDReports::PreviewWidget *m_previewWidget;
50  QDialogButtonBox *m_buttonBox;
51  QPushButton *m_quickPrintButton;
52  QString m_quickPrinterName;
53  QString m_defaultSaveDirectory;
54  QString m_savedFileName;
55  bool m_dirBrowsingEnabled;
56 };
57 
59  : QDialog(parent)
60  , d(new PreviewDialogPrivate(this))
61 {
62  d->m_previewWidget = new KDReports::PreviewWidget(this);
63  d->m_previewWidget->setReport(report);
64  auto *topLayout = new QVBoxLayout(this);
65  topLayout->addWidget(d->m_previewWidget);
66  auto *bottomLayout = new QHBoxLayout();
67  topLayout->addLayout(bottomLayout);
68 
69  connect(d->m_previewWidget, &KDReports::PreviewWidget::tableSettingsClicked, this, [this]() { d->slotTableBreakingDialog(); } );
71 
72  d->m_buttonBox = new QDialogButtonBox(Qt::Horizontal, this);
73  bottomLayout->addWidget(d->m_buttonBox);
74 
75  auto *printWithDialogButton = new QPushButton(tr("&Print..."), this);
76  d->m_buttonBox->addButton(printWithDialogButton, QDialogButtonBox::ActionRole);
77  connect(printWithDialogButton, &QPushButton::clicked, this, [this]() { d->slotPrintWithDialog(); } );
78 
79  d->m_quickPrintButton = new QPushButton(this); // create it here for the ordering
80  d->m_buttonBox->addButton(d->m_quickPrintButton, QDialogButtonBox::ActionRole);
81 
82  auto *saveButton = new QPushButton(tr("&Save..."), this);
83  d->m_buttonBox->addButton(saveButton, QDialogButtonBox::ActionRole);
84  connect(saveButton, &QPushButton::clicked, this, [this]() { d->slotSave(); } );
85 
86  auto *cancelButton = new QPushButton(tr("Cancel"), this);
87  d->m_buttonBox->addButton(cancelButton, QDialogButtonBox::RejectRole);
88  connect(cancelButton, &QPushButton::clicked, this, &QDialog::reject);
89 
90  d->m_quickPrintButton->hide();
91 }
92 
94 {
95 }
96 
98 {
99  if (!printerName.isEmpty()) {
100  // QPrinter::setPrinterName has no effect on the QPrintDialog which uses the CUPS default printer anyway...
101  // So we only use this for the separate Print button.
102  // This is why it's not called setDefaultPrinterName.
103  d->m_quickPrinterName = printerName;
104  d->m_quickPrintButton->setText(tr("Print &with %1").arg(printerName));
105  d->m_quickPrintButton->show();
106  connect(d->m_quickPrintButton, &QPushButton::clicked, this, [this]() { d->slotQuickPrint(); } );
107  }
108 }
109 
111 {
112  d->m_defaultSaveDirectory = path;
113 }
114 
116 {
117  d->m_dirBrowsingEnabled = allowed;
118 }
119 
121 {
123  return dialog.exec();
124 }
125 
126 void KDReports::PreviewDialogPrivate::slotTableBreakingDialog() const
127 {
128  if (q->showTableSettingsDialog(m_previewWidget->report())) {
129  m_previewWidget->repaint();
130  }
131 }
132 
133 void KDReports::PreviewDialogPrivate::slotPrintWithDialog() const
134 {
135  if (m_previewWidget->printWithDialog()) {
136  q->setResult(KDReports::PreviewDialog::Printed);
137  q->accept();
138  }
139 }
140 
141 void KDReports::PreviewDialogPrivate::slotQuickPrint() const
142 {
143  KDReports::Report *report = m_previewWidget->report();
144  QPrinter printer;
145  report->setupPrinter(&printer);
146  printer.setPrinterName(m_quickPrinterName);
147  report->print(&printer, q);
148  q->setResult(KDReports::PreviewDialog::Printed);
149  q->accept();
150 }
151 
152 void KDReports::PreviewDialogPrivate::slotSave()
153 {
154  KDReports::Report *report = m_previewWidget->report();
155  QString file;
156  if (m_dirBrowsingEnabled) {
157  file = QFileDialog::getSaveFileName(q, PreviewDialog::tr("Save Report as PDF"),
158  m_defaultSaveDirectory, PreviewDialog::tr("PDF Files (*.pdf)"));
159  } else {
160  bool ok;
161  Q_FOREVER {
162  const QString text = PreviewDialog::tr("Saving as PDF in %1\n\nEnter the file name:").arg(m_defaultSaveDirectory);
163  QString fileName = QInputDialog::getText(q, PreviewDialog::tr("Save Report as PDF"), text, QLineEdit::Normal, report->documentName() + QStringLiteral(".pdf"), &ok);
164  if (!fileName.endsWith(QLatin1String(".pdf"), Qt::CaseInsensitive)) {
165  fileName += QLatin1String(".pdf");
166  }
167  if (!ok || fileName.isEmpty())
168  return;
169  file = m_defaultSaveDirectory + QLatin1Char('/') + fileName;
170  if (QFile::exists(file)) {
171  const QString msg = PreviewDialog::tr("%1 already exists. Do you want to replace it?").arg(fileName);
173  break; // overwrite
174  }
175  } else {
176  // All OK
177  break;
178  }
179  }
180  }
181  if (!file.isEmpty()) {
182  QPrinter printer;
183  report->setupPrinter(&printer);
185  printer.setOutputFileName(file);
186  m_savedFileName = file;
187  report->print(&printer, q);
188  if (QFile::exists(file)) {
190  } else {
192  }
193  q->accept();
194  }
195 }
196 
198 {
199  d->m_previewWidget->setPageSizeChangeAllowed(b);
200 }
201 
203 {
204  d->m_previewWidget->setShowTableSettingsDialog(b);
205 }
206 
208 {
209  d->m_previewWidget->setWidthForEndlessPrinter(widthMM);
210 }
211 
212 bool KDReports::PreviewDialog::isSelected(int pageNumber) const
213 {
214  return d->m_previewWidget->isSelected(pageNumber);
215 }
216 
218 {
219  QDialog::accept();
220 }
221 
223 {
224  QDialog::reject();
225 }
226 
228 {
229  return d->m_previewWidget;
230 }
231 
233 {
234  return d->m_savedFileName;
235 }
QString::endsWith
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const const
QVBoxLayout
KDReports::PreviewDialog::setDefaultSaveDirectory
void setDefaultSaveDirectory(const QString &path)
Definition: KDReportsPreviewDialog.cpp:110
QDialog::reject
virtual void reject()
Qt::CaseInsensitive
CaseInsensitive
KDReports::PreviewDialog
Definition: KDReportsPreviewDialog.h:35
QAbstractButton::clicked
void clicked(bool checked)
QWidget
KDReportsReport_p.h
KDReports::PreviewWidget
Definition: KDReportsPreviewWidget.h:36
KDReports::Report::print
bool print(QPrinter *printer, QWidget *parent=nullptr)
Definition: KDReportsReport.cpp:686
QMessageBox::warning
QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton)
KDReports::PreviewDialog::setPageSizeChangeAllowed
void setPageSizeChangeAllowed(bool b)
Definition: KDReportsPreviewDialog.cpp:197
QLineEdit::Normal
Normal
QMessageBox::Yes
Yes
QFile::exists
bool exists() const const
QObject::connect
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
KDReports::PreviewDialog::isSelected
bool isSelected(int pageNumber) const
Definition: KDReportsPreviewDialog.cpp:212
KDReports::PreviewDialog::PreviewDialog
PreviewDialog(KDReports::Report *report, QWidget *parent=nullptr)
Definition: KDReportsPreviewDialog.cpp:58
KDReports::PreviewWidget::tableSettingsClicked
void tableSettingsClicked()
Emitted when the table settings button has been clicked.
QPrinter::setPrinterName
void setPrinterName(const QString &name)
KDReports::PreviewDialog::SavedSuccessfully
@ SavedSuccessfully
Definition: KDReportsPreviewDialog.h:122
KDReports::PreviewDialog::linkActivated
void linkActivated(const QUrl &url)
KDReports::Report
Definition: KDReportsReport.h:81
QPushButton
KDReports::Report::documentName
QString documentName
Definition: KDReportsReport.h:83
QDialogButtonBox::ActionRole
ActionRole
KDReportsPreviewDialog.h
QString
KDReports::PreviewDialog::SaveError
@ SaveError
Definition: KDReportsPreviewDialog.h:123
KDReportsReport.h
Qt::Horizontal
Horizontal
QString::isEmpty
bool isEmpty() const const
QInputDialog::getText
QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode, const QString &text, bool *ok, Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)
QDialog::accept
virtual void accept()
KDReports::PreviewDialog::setDirectoryBrowsingEnabled
void setDirectoryBrowsingEnabled(bool allowed)
Definition: KDReportsPreviewDialog.cpp:115
QDialog::exec
virtual int exec()
KDReports::PreviewDialog::savedFileName
QString savedFileName() const
Definition: KDReportsPreviewDialog.cpp:232
KDReports::PreviewDialog::setWidthForEndlessPrinter
void setWidthForEndlessPrinter(qreal widthMM)
Definition: KDReportsPreviewDialog.cpp:207
KDReports::PreviewDialog::showTableSettingsDialog
virtual bool showTableSettingsDialog(KDReports::Report *report)
Definition: KDReportsPreviewDialog.cpp:120
QLatin1String
KDReports::PreviewDialog::~PreviewDialog
~PreviewDialog() override
Definition: KDReportsPreviewDialog.cpp:93
KDReportsPreviewWidget.h
QFileDialog::getSaveFileName
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
QPrinter::setOutputFileName
void setOutputFileName(const QString &fileName)
QLatin1Char
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
KDReports::PreviewDialog::setQuickPrinterName
void setQuickPrinterName(const QString &printerName)
Definition: KDReportsPreviewDialog.cpp:97
KDReportsLayoutHelper_p.h
QHBoxLayout
KDReports::PreviewDialog::accept
void accept() override
Reimplemented for internal purposes. .
Definition: KDReportsPreviewDialog.cpp:217
QPrinter::setOutputFormat
void setOutputFormat(QPrinter::OutputFormat format)
KDReports::PreviewDialog::Printed
@ Printed
Definition: KDReportsPreviewDialog.h:121
KDReports::PreviewDialog::setShowTableSettingsDialog
void setShowTableSettingsDialog(bool b)
Definition: KDReportsPreviewDialog.cpp:202
KDReports::PreviewDialog::previewWidget
KDReports::PreviewWidget * previewWidget()
Definition: KDReportsPreviewDialog.cpp:227
QPrinter::PdfFormat
PdfFormat
QDialog
KDReports::TableBreakingSettingsDialog
Definition: KDReportsTableBreakingSettingsDialog.h:39
QObject::tr
QString tr(const char *sourceText, const char *disambiguation, int n)
KDReports::PreviewDialog::reject
void reject() override
Reimplemented for internal purposes. .
Definition: KDReportsPreviewDialog.cpp:222
KDReportsTableBreakingSettingsDialog.h
QDialogButtonBox
KDReports::PreviewWidget::linkActivated
void linkActivated(const QUrl &url)
QPrinter

© 2007-2021 Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/
https://www.kdab.com/development-resources/qt-tools/kd-reports/
Generated on Fri Jul 15 2022 13:09:06 for KD Reports API Documentation by doxygen 1.8.20