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

0001 /*
0002   SPDX-FileCopyrightText: 2009 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.net
0003   SPDX-FileCopyrightText: 2009 Andras Mantia <andras@kdab.net>
0004 
0005   SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "configurewidget.h"
0009 #include "messageviewer_debug.h"
0010 #include "settings/messageviewersettings.h"
0011 #include "ui_settings.h"
0012 #include <MimeTreeParser/NodeHelper>
0013 
0014 #include "MessageCore/MessageCoreSettings"
0015 
0016 #include <KLocalizedString>
0017 
0018 using namespace MessageViewer;
0019 
0020 class MessageViewer::ConfigureWidgetPrivate
0021 {
0022 public:
0023     ConfigureWidgetPrivate() = default;
0024 
0025     ~ConfigureWidgetPrivate()
0026     {
0027         delete mSettingsUi;
0028         mSettingsUi = nullptr;
0029     }
0030 
0031     Ui_Settings *mSettingsUi = nullptr;
0032 };
0033 
0034 ConfigureWidget::ConfigureWidget(QWidget *parent)
0035     : QWidget(parent)
0036     , d(new MessageViewer::ConfigureWidgetPrivate)
0037 {
0038     d->mSettingsUi = new Ui_Settings;
0039     d->mSettingsUi->setupUi(this);
0040     layout()->setContentsMargins({});
0041 
0042     QStringList encodings = MimeTreeParser::NodeHelper::supportedEncodings(false);
0043     encodings.prepend(i18n("Auto"));
0044     d->mSettingsUi->overrideCharacterEncoding->addItems(encodings);
0045     d->mSettingsUi->overrideCharacterEncoding->setCurrentIndex(0);
0046 
0047     d->mSettingsUi->overrideCharacterEncoding->setWhatsThis(MessageCore::MessageCoreSettings::self()->overrideCharacterEncodingItem()->whatsThis());
0048     d->mSettingsUi->kcfg_ShrinkQuotes->setWhatsThis(MessageViewer::MessageViewerSettings::self()->shrinkQuotesItem()->whatsThis());
0049     d->mSettingsUi->kcfg_ShowExpandQuotesMark->setWhatsThis(MessageViewer::MessageViewerSettings::self()->showExpandQuotesMarkItem()->whatsThis());
0050     connect(d->mSettingsUi->overrideCharacterEncoding, &QComboBox::currentIndexChanged, this, &ConfigureWidget::settingsChanged);
0051 }
0052 
0053 ConfigureWidget::~ConfigureWidget() = default;
0054 
0055 void ConfigureWidget::readConfig()
0056 {
0057     readCurrentOverrideCodec();
0058     d->mSettingsUi->kcfg_CollapseQuoteLevelSpin->setEnabled(MessageViewer::MessageViewerSettings::self()->showExpandQuotesMark());
0059 }
0060 
0061 void ConfigureWidget::writeConfig()
0062 {
0063     MessageCore::MessageCoreSettings::self()->setOverrideCharacterEncoding(
0064         d->mSettingsUi->overrideCharacterEncoding->currentIndex() == 0
0065             ? QString()
0066             : MimeTreeParser::NodeHelper::encodingForName(d->mSettingsUi->overrideCharacterEncoding->currentText()));
0067 }
0068 
0069 void ConfigureWidget::readCurrentOverrideCodec()
0070 {
0071     const QString &currentOverrideEncoding = MessageCore::MessageCoreSettings::self()->overrideCharacterEncoding();
0072     if (currentOverrideEncoding.isEmpty()) {
0073         d->mSettingsUi->overrideCharacterEncoding->setCurrentIndex(0);
0074         return;
0075     }
0076     QStringList encodings = MimeTreeParser::NodeHelper::supportedEncodings(false);
0077     encodings.prepend(i18n("Auto"));
0078     QStringList::ConstIterator it(encodings.constBegin());
0079     const QStringList::ConstIterator end(encodings.constEnd());
0080     int i = 0;
0081     for (; it != end; ++it) {
0082         if (MimeTreeParser::NodeHelper::encodingForName(*it) == currentOverrideEncoding) {
0083             d->mSettingsUi->overrideCharacterEncoding->setCurrentIndex(i);
0084             break;
0085         }
0086         ++i;
0087     }
0088     if (i == encodings.size()) {
0089         // the current value of overrideCharacterEncoding is an unknown encoding => reset to Auto
0090         qCWarning(MESSAGEVIEWER_LOG) << "Unknown override character encoding" << currentOverrideEncoding << ". Resetting to Auto.";
0091         d->mSettingsUi->overrideCharacterEncoding->setCurrentIndex(0);
0092         MessageCore::MessageCoreSettings::self()->setOverrideCharacterEncoding(QString());
0093     }
0094 }
0095 
0096 #include "moc_configurewidget.cpp"