File indexing completed on 2024-05-19 05:21:23

0001 /*
0002   This file is part of KDE Kontact.
0003 
0004   SPDX-FileCopyrightText: 2003 Cornelius Schumacher <schumacher@kde.org>
0005 
0006   SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0007 */
0008 
0009 #include "kcmkontact.h"
0010 #include "prefs.h"
0011 using namespace Kontact;
0012 
0013 #include <KontactInterface/Plugin>
0014 
0015 #include <KLocalizedString>
0016 #include <KPluginFactory>
0017 #include <QComboBox>
0018 
0019 #include <QCheckBox>
0020 #include <QHBoxLayout>
0021 #include <QStandardItemModel>
0022 
0023 K_PLUGIN_CLASS_WITH_JSON(KcmKontact, "data/kontactconfig.json")
0024 KcmKontact::KcmKontact(QObject *parent, const KPluginMetaData &data)
0025     : KCModule(parent, data)
0026     , mPluginCombo(new QComboBox(widget()))
0027 {
0028     auto topLayout = new QVBoxLayout(widget());
0029     auto pluginStartupLayout = new QHBoxLayout();
0030     topLayout->addLayout(pluginStartupLayout);
0031     auto forceStartupPluginCheckBox = new QCheckBox(Prefs::self()->forceStartupPluginItem()->label(), widget());
0032     forceStartupPluginCheckBox->setObjectName(QLatin1StringView("kcfg_ForceStartupPlugin"));
0033     pluginStartupLayout->addWidget(forceStartupPluginCheckBox);
0034 
0035     mPluginCombo->setToolTip(i18nc("@info:tooltip", "Select the initial plugin to use on each start"));
0036     mPluginCombo->setWhatsThis(i18nc("@info:whatsthis",
0037                                      "Select the plugin from this drop down list to be used as the "
0038                                      "initial plugin each time Kontact is started. Otherwise, Kontact "
0039                                      "will restore the last active plugin from the previous usage."));
0040     connect(mPluginCombo, &QComboBox::currentIndexChanged, this, [this]() {
0041         markAsChanged();
0042     });
0043     pluginStartupLayout->addWidget(mPluginCombo);
0044     pluginStartupLayout->addStretch();
0045     mPluginCombo->setEnabled(false);
0046 
0047     connect(forceStartupPluginCheckBox, &QAbstractButton::toggled, mPluginCombo, &QWidget::setEnabled);
0048     auto showSideBarCheckbox = new QCheckBox(Prefs::self()->sideBarOpenItem()->label(), widget());
0049     showSideBarCheckbox->setObjectName(QLatin1StringView("kcfg_SideBarOpen"));
0050     topLayout->addWidget(showSideBarCheckbox);
0051 
0052     addConfig(Prefs::self(), widget());
0053     topLayout->addStretch();
0054     load();
0055 }
0056 
0057 void KcmKontact::load()
0058 {
0059     const KConfigGroup grp(Prefs::self()->config(), QStringLiteral("Plugins"));
0060     const QList<KPluginMetaData> pluginMetaDatas = KPluginMetaData::findPlugins(QStringLiteral("pim6/kontact"), [](const KPluginMetaData &data) {
0061         return data.rawData().value(QStringLiteral("X-KDE-KontactPluginVersion")).toInt() == KONTACT_PLUGIN_VERSION;
0062     });
0063 
0064     int activeComponent = 0;
0065     mPluginCombo->clear();
0066     mPluginList.clear();
0067     for (const KPluginMetaData &plugin : pluginMetaDatas) {
0068         // skip summary only plugins
0069         if (plugin.rawData().contains(QLatin1StringView("X-KDE-KontactPluginHasPart"))) {
0070             bool var = plugin.rawData().value(QStringLiteral("X-KDE-KontactPluginHasPart")).toBool();
0071 
0072             if (!var) {
0073                 continue;
0074             }
0075         }
0076 
0077         mPluginCombo->addItem(plugin.name());
0078         mPluginList.append(plugin);
0079 
0080         // skip disabled plugins
0081         const QString pluginName = plugin.pluginId();
0082         if (!grp.readEntry(pluginName + QStringLiteral("Enabled"), true)) {
0083             const QStandardItemModel *qsm = qobject_cast<QStandardItemModel *>(mPluginCombo->model());
0084             if (qsm) {
0085                 qsm->item(mPluginCombo->count() - 1, 0)->setEnabled(false);
0086             }
0087         }
0088         if (pluginName == Prefs::self()->activePlugin()) {
0089             activeComponent = mPluginList.count() - 1;
0090         }
0091     }
0092 
0093     mPluginCombo->setCurrentIndex(activeComponent);
0094     KCModule::load();
0095 }
0096 
0097 void KcmKontact::save()
0098 {
0099     const KPluginMetaData plugin = mPluginList.at(mPluginCombo->currentIndex());
0100     Prefs::self()->setActivePlugin(plugin.pluginId());
0101     Prefs::self()->setForcedStartupPlugin(plugin.pluginId());
0102     KCModule::save();
0103 }
0104 
0105 #include "kcmkontact.moc"
0106 
0107 #include "moc_kcmkontact.cpp"