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 }