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"