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"