Warning, file /education/cantor/src/lib/panelpluginhandler.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2010 Alexander Rieder <alexanderrieder@gmail.com> 0004 */ 0005 0006 #include "panelpluginhandler.h" 0007 using namespace Cantor; 0008 0009 #include <QCoreApplication> 0010 #include <QDebug> 0011 #include <QDir> 0012 0013 #include <KPluginFactory> 0014 #include <KPluginMetaData> 0015 #include <KPluginFactory> 0016 0017 #include "session.h" 0018 #include "backend.h" 0019 0020 class Cantor::PanelPluginHandlerPrivate 0021 { 0022 public: 0023 QList<Cantor::PanelPlugin*> plugins; 0024 }; 0025 0026 PanelPluginHandler::PanelPluginHandler( QObject* parent ) : QObject(parent) , 0027 d(new PanelPluginHandlerPrivate) 0028 { 0029 setObjectName(QStringLiteral("PanelPluginHandler")); 0030 } 0031 0032 PanelPluginHandler::~PanelPluginHandler() 0033 { 0034 delete d; 0035 } 0036 0037 void PanelPluginHandler::loadPlugins() 0038 { 0039 const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("cantor/panels")); 0040 0041 for (const KPluginMetaData &plugin : plugins) { 0042 0043 const auto result = KPluginFactory::instantiatePlugin<PanelPlugin>(plugin, QCoreApplication::instance()); 0044 0045 if (!result) { 0046 qDebug() << "Error while loading panel: " << result.errorText; 0047 continue; 0048 } 0049 0050 PanelPlugin *panel = result.plugin; 0051 0052 panel->setPluginInfo(plugin); 0053 d->plugins.append(panel); 0054 0055 } 0056 } 0057 0058 QList<Cantor::PanelPlugin *> Cantor::PanelPluginHandler::allPlugins() 0059 { 0060 return d->plugins; 0061 } 0062 0063 QList<PanelPlugin*> PanelPluginHandler::plugins(Session* session) 0064 { 0065 QList<PanelPlugin*> pluginsForSession; 0066 0067 if (session == nullptr) 0068 return pluginsForSession; 0069 0070 const auto capabilities = session->backend()->capabilities(); 0071 const QStringList& extensions = session->backend()->extensions(); 0072 0073 qDebug()<<"loading panel plugins for session of type "<<session->backend()->name(); 0074 for (auto* plugin : d->plugins) 0075 { 0076 bool supported=true; 0077 for (const QString& req : plugin->requiredExtensions()){ 0078 // FIXME: That req.isEmpty() is there just because Help Panel has req 0079 // empty, returning FALSE when the comparison must to return TRUE. 0080 supported = supported && (extensions.contains(req) || req.isEmpty()); 0081 } 0082 0083 supported = supported && ( (capabilities & plugin->requiredCapabilities()) == plugin->requiredCapabilities()); 0084 0085 if(supported) 0086 { 0087 qDebug() << "plugin " << plugin->name()<<" is supported, requires extensions " << plugin->requiredExtensions(); 0088 pluginsForSession.append(plugin); 0089 } 0090 else 0091 qDebug() << "plugin " << plugin->name() <<" is not supported"; 0092 } 0093 0094 return pluginsForSession; 0095 } 0096 0097 QList<PanelPlugin*> PanelPluginHandler::activePluginsForSession(Session* session, const PanelStates& previousPluginStates) 0098 { 0099 const auto& plugins = this->plugins(session); 0100 for (auto* plugin : plugins) 0101 { 0102 if(!plugin) 0103 { 0104 qDebug()<<"somethings wrong with plugin inside PanelPluginHandler"; 0105 continue; 0106 } 0107 0108 if (previousPluginStates.contains(plugin->name())) 0109 plugin->restoreState(previousPluginStates[plugin->name()]); 0110 else 0111 { 0112 Cantor::PanelPlugin::State initState; 0113 initState.session = session; 0114 plugin->restoreState(initState); 0115 } 0116 } 0117 return plugins; 0118 }