File indexing completed on 2025-03-09 04:54:44

0001 /*  -*- c++ -*-
0002     htmlstatusbar.cpp
0003 
0004     This file is part of KMail, the KDE mail client.
0005     SPDX-FileCopyrightText: 2002 Ingo Kloecker <kloecker@kde.org>
0006     SPDX-FileCopyrightText: 2003 Marc Mutz <mutz@kde.org>
0007     SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0008 
0009     SPDX-License-Identifier: GPL-2.0-or-later
0010 */
0011 
0012 #include "htmlstatusbar.h"
0013 #include "settings/messageviewersettings.h"
0014 
0015 #include "MessageCore/MessageCoreSettings"
0016 
0017 #include <KConfigGroup>
0018 #include <KLocalizedString>
0019 
0020 #include <KSharedConfig>
0021 #include <QMouseEvent>
0022 
0023 using namespace MessageViewer;
0024 namespace
0025 {
0026 static const char myHtmlStatusBarConfigGroupName[] = "Reader";
0027 }
0028 HtmlStatusBar::HtmlStatusBar(QWidget *parent)
0029     : QLabel(parent)
0030     , mMode(MimeTreeParser::Util::Normal)
0031 {
0032     setAlignment(Qt::AlignHCenter | Qt::AlignTop);
0033     setAutoFillBackground(true);
0034     setCursor(QCursor(Qt::PointingHandCursor));
0035     update();
0036 }
0037 
0038 HtmlStatusBar::~HtmlStatusBar() = default;
0039 
0040 MimeTreeParser::Util::HtmlMode HtmlStatusBar::mode() const
0041 {
0042     return mMode;
0043 }
0044 
0045 bool HtmlStatusBar::isHtml() const
0046 {
0047     return mode() == MimeTreeParser::Util::Html;
0048 }
0049 
0050 bool HtmlStatusBar::isNormal() const
0051 {
0052     return mode() == MimeTreeParser::Util::Normal;
0053 }
0054 
0055 void HtmlStatusBar::update()
0056 {
0057     QPalette pal = palette();
0058     pal.setColor(backgroundRole(), bgColor());
0059     pal.setColor(foregroundRole(), fgColor());
0060     setPalette(pal);
0061     setText(message());
0062     setToolTip(toolTip());
0063 }
0064 
0065 void HtmlStatusBar::setNormalMode()
0066 {
0067     setMode(MimeTreeParser::Util::Normal);
0068 }
0069 
0070 void HtmlStatusBar::setHtmlMode()
0071 {
0072     setMode(MimeTreeParser::Util::Html);
0073 }
0074 
0075 void HtmlStatusBar::setAvailableModes(const QList<MimeTreeParser::Util::HtmlMode> &availableModes)
0076 {
0077     mAvailableModes = availableModes;
0078 }
0079 
0080 const QList<MimeTreeParser::Util::HtmlMode> &HtmlStatusBar::availableModes()
0081 {
0082     return mAvailableModes;
0083 }
0084 
0085 void HtmlStatusBar::setMode(MimeTreeParser::Util::HtmlMode m, UpdateMode mode)
0086 {
0087     if (mMode != m) {
0088         mMode = m;
0089         if (mode == Update) {
0090             update();
0091         }
0092     }
0093 }
0094 
0095 void HtmlStatusBar::mousePressEvent(QMouseEvent *event)
0096 {
0097     if (event->button() == Qt::LeftButton) {
0098         Q_EMIT clicked();
0099     }
0100 }
0101 
0102 QString HtmlStatusBar::message() const
0103 {
0104     switch (mode()) {
0105     case MimeTreeParser::Util::Html: // bold: "HTML Message"
0106     case MimeTreeParser::Util::MultipartHtml:
0107         return i18nc("'HTML Message' with html linebreaks between each letter and in bold text.",
0108                      "<qt><b><br />H<br />T<br />M<br />L<br /> "
0109                      "<br />M<br />e<br />s<br />s<br />a<br />g<br />e</b></qt>");
0110     case MimeTreeParser::Util::Normal: // normal: "No HTML Message"
0111         return i18nc("'No HTML Message' with html linebreaks between each letter.",
0112                      "<qt><br />N<br />o<br /> "
0113                      "<br />H<br />T<br />M<br />L<br /> "
0114                      "<br />M<br />e<br />s<br />s<br />a<br />g<br />e</qt>");
0115     case MimeTreeParser::Util::MultipartPlain: // normal: "Plain Message"
0116         return i18nc("'Plain Message' with html linebreaks between each letter.",
0117                      "<qt><br />P<br />l<br />a<br />i<br />n<br /> "
0118                      "<br />M<br />e<br />s<br />s<br />a<br />g<br />e<br /></qt>");
0119     case MimeTreeParser::Util::MultipartIcal: // normal: "Calendar Message"
0120         return i18nc("'Calendar Message' with html linebreaks between each letter.",
0121                      "<qt><br />C<br />a<br />l<br />e<br />n<br />d<br />a<br />r<br /> "
0122                      "<br />M<br />e<br />s<br />s<br />a<br />g<br />e<br /></qt>");
0123     default:
0124         return {};
0125     }
0126 }
0127 
0128 QString HtmlStatusBar::toolTip() const
0129 {
0130     switch (mode()) {
0131     case MimeTreeParser::Util::Html:
0132     case MimeTreeParser::Util::MultipartHtml:
0133     case MimeTreeParser::Util::MultipartPlain:
0134     case MimeTreeParser::Util::MultipartIcal:
0135         return i18n("Click to toggle between HTML, plain text and calendar.");
0136     default:
0137     case MimeTreeParser::Util::Normal:
0138         break;
0139     }
0140 
0141     return {};
0142 }
0143 
0144 QColor HtmlStatusBar::fgColor() const
0145 {
0146     KConfigGroup conf(KSharedConfig::openConfig(), QLatin1StringView(myHtmlStatusBarConfigGroupName));
0147     QColor defaultColor;
0148     QColor color;
0149     switch (mode()) {
0150     case MimeTreeParser::Util::Html:
0151     case MimeTreeParser::Util::MultipartHtml:
0152         defaultColor = Qt::white;
0153         color = defaultColor;
0154         if (!MessageCore::MessageCoreSettings::self()->useDefaultColors()) {
0155             color = conf.readEntry("ColorbarForegroundHTML", defaultColor);
0156         }
0157         return color;
0158     case MimeTreeParser::Util::Normal:
0159     case MimeTreeParser::Util::MultipartPlain:
0160     case MimeTreeParser::Util::MultipartIcal:
0161         defaultColor = Qt::black;
0162         color = defaultColor;
0163         if (!MessageCore::MessageCoreSettings::self()->useDefaultColors()) {
0164             color = conf.readEntry("ColorbarForegroundPlain", defaultColor);
0165         }
0166         return color;
0167     }
0168     return Qt::black;
0169 }
0170 
0171 QColor HtmlStatusBar::bgColor() const
0172 {
0173     KConfigGroup conf(KSharedConfig::openConfig(), QLatin1StringView(myHtmlStatusBarConfigGroupName));
0174 
0175     QColor defaultColor;
0176     QColor color;
0177     switch (mode()) {
0178     case MimeTreeParser::Util::Html:
0179     case MimeTreeParser::Util::MultipartHtml:
0180         defaultColor = Qt::black;
0181         color = defaultColor;
0182         if (!MessageCore::MessageCoreSettings::self()->useDefaultColors()) {
0183             color = conf.readEntry("ColorbarBackgroundHTML", defaultColor);
0184         }
0185         return color;
0186     case MimeTreeParser::Util::Normal:
0187     case MimeTreeParser::Util::MultipartPlain:
0188     case MimeTreeParser::Util::MultipartIcal:
0189         defaultColor = Qt::lightGray;
0190         color = defaultColor;
0191         if (!MessageCore::MessageCoreSettings::self()->useDefaultColors()) {
0192             color = conf.readEntry("ColorbarBackgroundPlain", defaultColor);
0193         }
0194         return color;
0195     }
0196     return Qt::white;
0197 }
0198 
0199 #include "moc_htmlstatusbar.cpp"