File indexing completed on 2025-03-09 04:54:41
0001 /* 0002 SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "printmessage.h" 0008 0009 #include <QPainter> 0010 #include <QPrintDialog> 0011 #include <QPrintPreviewDialog> 0012 #include <QWebEngineView> 0013 0014 #include <KLocalizedString> 0015 0016 using namespace MessageViewer; 0017 PrintMessage::PrintMessage(QObject *parent) 0018 : QObject{parent} 0019 { 0020 } 0021 0022 PrintMessage::~PrintMessage() = default; 0023 0024 void PrintMessage::setView(QWebEngineView *view) 0025 { 0026 Q_ASSERT(!mView); 0027 mView = view; 0028 connect(mView, &QWebEngineView::printRequested, this, &PrintMessage::printPreview); 0029 connect(mView, &QWebEngineView::printFinished, this, &PrintMessage::printFinished); 0030 } 0031 0032 void PrintMessage::setDocumentName(const QString &name) 0033 { 0034 mDocumentName = name; 0035 } 0036 0037 void PrintMessage::print() 0038 { 0039 QPrintDialog dialog(&mPrinter, mView); 0040 if (dialog.exec() != QDialog::Accepted) { 0041 deleteLater(); 0042 return; 0043 } 0044 printDocument(&mPrinter); 0045 } 0046 0047 void PrintMessage::printDocument(QPrinter *printer) 0048 { 0049 mView->print(printer); 0050 mWaitForResult.exec(); 0051 } 0052 0053 void PrintMessage::printFinished(bool success) 0054 { 0055 if (!success) { 0056 QPainter painter; 0057 if (painter.begin(&mPrinter)) { 0058 QFont font = painter.font(); 0059 font.setPixelSize(20); 0060 painter.setFont(font); 0061 painter.drawText(QPointF(10, 25), i18n("Could not generate print preview.")); 0062 painter.end(); 0063 } 0064 } 0065 mWaitForResult.quit(); 0066 Q_EMIT printingFinished(); 0067 } 0068 0069 QWidget *PrintMessage::parentWidget() const 0070 { 0071 return mParentWidget; 0072 } 0073 0074 void PrintMessage::setParentWidget(QWidget *newParentWidget) 0075 { 0076 mParentWidget = newParentWidget; 0077 } 0078 0079 QString PrintMessage::documentName() const 0080 { 0081 return mDocumentName; 0082 } 0083 0084 void PrintMessage::printPreview() 0085 { 0086 if (!mView) { 0087 deleteLater(); 0088 return; 0089 } 0090 if (mInPrintPreview) { 0091 deleteLater(); 0092 return; 0093 } 0094 mInPrintPreview = true; 0095 0096 QPrintPreviewDialog preview(&mPrinter, mParentWidget); 0097 preview.setWindowTitle(i18nc("@title:window", "Print Document")); 0098 preview.resize(800, 750); 0099 connect(&preview, &QPrintPreviewDialog::paintRequested, this, &PrintMessage::printDocument); 0100 preview.exec(); 0101 mInPrintPreview = false; 0102 deleteLater(); 0103 } 0104 0105 #include "moc_printmessage.cpp"