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"