File indexing completed on 2024-05-26 05:08:24
0001 /* 0002 SPDX-FileCopyrightText: 2017-2018 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0003 SPDX-FileCopyrightText: 2022 Alexander Lohnau <alexander.lohnau@gmx.de> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "ksettingsplugins.h" 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 #include <QVBoxLayout> 0013 #include <QBitArray> 0014 0015 // ---------------------------------------------------------------------------- 0016 // KDE Includes 0017 0018 #include <KConfigGroup> 0019 #include <KLocalizedString> 0020 #include <KPluginMetaData> 0021 #include <KPluginWidget> 0022 #include <KSharedConfig> 0023 0024 // ---------------------------------------------------------------------------- 0025 // Project Includes 0026 0027 #include "pluginloader.h" 0028 0029 struct pluginGroupInfo { 0030 QVector<KPluginMetaData> plugins; 0031 QString categoryName; 0032 }; 0033 0034 KSettingsPlugins::KSettingsPlugins(QWidget* parent) 0035 : QWidget(parent) 0036 , m_pluginSelector(new KPluginWidget(this)) 0037 0038 { 0039 auto layout = new QVBoxLayout; 0040 setLayout(layout); // otherwise KPluginSelector occupies very little area 0041 layout->addWidget(m_pluginSelector); 0042 0043 const auto allPluginDatas = KMyMoneyPlugin::listPlugins(false); // fetch all available KMyMoney plugins 0044 QVector<KPluginMetaData> standardPlugins; 0045 QVector<KPluginMetaData> payeePlugins; 0046 QVector<KPluginMetaData> onlinePlugins; 0047 0048 // divide plugins in some arbitrary categories 0049 for (const KPluginMetaData& pluginData : qAsConst(allPluginDatas)) 0050 switch (KMyMoneyPlugin::pluginCategory(pluginData)) { 0051 case KMyMoneyPlugin::Category::StandardPlugin: 0052 standardPlugins.append(pluginData); 0053 break; 0054 case KMyMoneyPlugin::Category::PayeeIdentifier: 0055 payeePlugins.append(pluginData); 0056 break; 0057 case KMyMoneyPlugin::Category::OnlineBankOperations: 0058 onlinePlugins.append(pluginData); 0059 break; 0060 default: 0061 break; 0062 } 0063 0064 const QVector<pluginGroupInfo> pluginGroups{ 0065 {standardPlugins, i18n("KMyMoney Plugins")}, 0066 {payeePlugins, i18n("Payee Identifier")}, 0067 {onlinePlugins, i18n("Online Banking Operations")}, 0068 }; 0069 0070 KConfigGroup grp = KSharedConfig::openConfig()->group("Plugins"); 0071 m_pluginSelector->setConfig(grp); 0072 0073 // add all plugins to selector 0074 for(const auto& pluginGroup : pluginGroups) { 0075 if (!pluginGroup.plugins.isEmpty()) { 0076 m_pluginSelector->addPlugins(pluginGroup.plugins, 0077 pluginGroup.categoryName); // at that step plugin on/off state should be fetched automatically by KPluginSelector 0078 } 0079 } 0080 0081 connect(m_pluginSelector, &KPluginWidget::changed, this, &KSettingsPlugins::changed); 0082 } 0083 0084 void KSettingsPlugins::slotResetToDefaults() 0085 { 0086 m_pluginSelector->defaults(); 0087 } 0088 0089 void KSettingsPlugins::slotSavePluginConfiguration() 0090 { 0091 m_pluginSelector->save(); 0092 Q_EMIT settingsChanged(QStringLiteral("Plugins")); 0093 }