Рефакторинг

This commit is contained in:
Andrey Rodionov 2020-05-12 20:16:09 +03:00
parent a605b7bf74
commit dc5a778c7e
3 changed files with 12 additions and 14 deletions

View File

@ -15,11 +15,8 @@ IPlugin::IPlugin(const QString& depInterfaces)
IPlugin::~IPlugin()
{
// NOTE: Возможно надо сделать на цикле for
for (IPlugin *plug : PluginManager::instance()->dependentPlugins(this)) {
if (!PluginManager::instance()->dependentPlugins(this).isEmpty())
if (plug)
delete plug;
delete plug;
}
}

View File

@ -52,28 +52,30 @@ QList<IPlugin *> PluginManager::dependPlugins(IPlugin *plugin)
{
QHash<QString, IPlugin *> pluginList;
if (plugin)
for (const QString &depInterfaceName : plugin->depModulList())
if (plugin) {
for (const QString &depInterfaceName : plugin->depModulList()) {
for (QObject *objInterfacePlugin : interfaceObjects(depInterfaceName)) {
IPlugin *interfacePlugin = qobject_cast<IPlugin *>(objInterfacePlugin);
if (interfacePlugin)
pluginList[objInterfacePlugin->objectName()] = interfacePlugin;
}
}
}
return pluginList.values();
}
QList<IPlugin *> PluginManager::dependentPlugins(IPlugin *plugin)
{
QHash<QString, IPlugin *> pluginList;
QList<IPlugin *> pluginList;
for (QObject *objPlug : m_interfaces.values("IPlugin")) {
IPlugin *dependPlugin = qobject_cast<IPlugin *>(objPlug);
if (dependPlugin != nullptr && dependPlugin != plugin) {
if (dependPlugins(dependPlugin).contains(plugin))
pluginList[objPlug->objectName()] = dependPlugin;
IPlugin *somePlugin = qobject_cast<IPlugin *>(objPlug);
if (somePlugin != nullptr && somePlugin != plugin) {
if (dependPlugins(somePlugin).contains(plugin))
pluginList.append(somePlugin);
}
}
return pluginList.values();
return pluginList;
}
bool PluginManager::loadPlugins()

View File

@ -93,7 +93,6 @@ public:
void setPluginsDir(const QDir &pluginsDir);
signals:
//! Сигнал о загрузке плагина
void loadedPlugin(QObject *plugin);
@ -108,7 +107,7 @@ private slots:
void removePlugin(QObject *obj);
private:
//! Структура файла с плагином
struct FileList {
QString filename;
bool lock;