File indexing completed on 2025-03-09 04:54:45
0001 /* 0002 SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "mailsourcewebengineviewer.h" 0008 0009 using namespace MessageViewer; 0010 0011 #include "mailsourceviewtextbrowserwidget.h" 0012 #include "messageviewer/messageviewerutil.h" 0013 // #include <TextAddonsWidgets/SlideContainer> 0014 0015 #include <KSyntaxHighlighting/Definition> 0016 #include <KSyntaxHighlighting/SyntaxHighlighter> 0017 #include <KSyntaxHighlighting/Theme> 0018 0019 #include <KLocalizedString> 0020 #include <PimCommon/PimUtil> 0021 #include <QTabWidget> 0022 0023 #include <KConfigGroup> 0024 #include <KWindowConfig> 0025 #include <QShortcut> 0026 #include <QVBoxLayout> 0027 #include <QWindow> 0028 0029 #include <KSharedConfig> 0030 #include <QDialogButtonBox> 0031 #include <QPushButton> 0032 #include <QWebEnginePage> 0033 0034 using namespace MessageViewer; 0035 namespace 0036 { 0037 static const char myMailSourceWebEngineViewerConfigGroupName[] = "MailSourceWebEngineViewer"; 0038 } 0039 MailSourceWebEngineViewer::MailSourceWebEngineViewer(QWidget *parent) 0040 : QDialog(parent) 0041 , mRawBrowser(new MailSourceViewTextBrowserWidget(QStringLiteral("Email"), this)) 0042 { 0043 setAttribute(Qt::WA_DeleteOnClose); 0044 auto mainLayout = new QVBoxLayout(this); 0045 #ifndef NDEBUG 0046 mShowHtmlSource = true; 0047 #endif 0048 mShowHtmlSource = mShowHtmlSource || !qEnvironmentVariableIsEmpty("KDEPIM_DEBUGGING"); 0049 if (mShowHtmlSource) { 0050 mTabWidget = new QTabWidget(this); 0051 mainLayout->addWidget(mTabWidget); 0052 0053 mTabWidget->addTab(mRawBrowser, i18nc("Unchanged mail message", "Raw Source")); 0054 mTabWidget->setTabToolTip(0, i18n("Raw, unmodified mail as it is stored on the filesystem or on the server")); 0055 0056 mHtmlBrowser = new MailSourceViewTextBrowserWidget(QStringLiteral("HTML"), this); 0057 mTabWidget->addTab(mHtmlBrowser, i18nc("Mail message as shown, in HTML format", "HTML Source")); 0058 mTabWidget->setTabToolTip(1, i18n("HTML code for displaying the message to the user")); 0059 0060 mTabWidget->setCurrentIndex(0); 0061 } else { 0062 mainLayout->addWidget(mRawBrowser); 0063 } 0064 0065 // combining the shortcuts in one qkeysequence() did not work... 0066 auto shortcut = new QShortcut(this); 0067 shortcut->setKey(Qt::Key_Escape); 0068 connect(shortcut, &QShortcut::activated, this, &MailSourceWebEngineViewer::close); 0069 shortcut = new QShortcut(this); 0070 shortcut->setKey(Qt::Key_W | Qt::CTRL); 0071 connect(shortcut, &QShortcut::activated, this, &MailSourceWebEngineViewer::close); 0072 0073 mRawBrowser->textBrowser()->setFocus(); 0074 auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this); 0075 connect(buttonBox, &QDialogButtonBox::rejected, this, &MailSourceWebEngineViewer::reject); 0076 connect(buttonBox->button(QDialogButtonBox::Close), &QPushButton::clicked, this, &MailSourceWebEngineViewer::close); 0077 0078 mainLayout->addWidget(buttonBox); 0079 readConfig(); 0080 } 0081 0082 MailSourceWebEngineViewer::~MailSourceWebEngineViewer() 0083 { 0084 writeConfig(); 0085 } 0086 0087 void MailSourceWebEngineViewer::readConfig() 0088 { 0089 create(); // ensure a window is created 0090 windowHandle()->resize(QSize(600, 400)); 0091 KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myMailSourceWebEngineViewerConfigGroupName)); 0092 KWindowConfig::restoreWindowSize(windowHandle(), group); 0093 resize(windowHandle()->size()); // workaround for QTBUG-40584 0094 } 0095 0096 void MailSourceWebEngineViewer::writeConfig() 0097 { 0098 KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myMailSourceWebEngineViewerConfigGroupName)); 0099 KWindowConfig::saveWindowSize(windowHandle(), group); 0100 } 0101 0102 void MailSourceWebEngineViewer::setRawSource(const QString &source) 0103 { 0104 mRawBrowser->setText(source); 0105 } 0106 0107 void MailSourceWebEngineViewer::setDisplayedSource(QWebEnginePage *page) 0108 { 0109 if (mShowHtmlSource) { 0110 if (page) { 0111 MailSourceViewTextBrowserWidget *browser = mHtmlBrowser; 0112 page->toHtml([browser](const QString &result) { 0113 browser->setPlainText(result); 0114 }); 0115 } 0116 } 0117 } 0118 0119 void MailSourceWebEngineViewer::setFixedFont() 0120 { 0121 mRawBrowser->setFixedFont(); 0122 if (mShowHtmlSource) { 0123 mHtmlBrowser->setFixedFont(); 0124 } 0125 } 0126 0127 #include "moc_mailsourcewebengineviewer.cpp"