diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin.h b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin.h index 237ad0aca..20aca34a1 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin.h @@ -21,13 +21,13 @@ #define IPLUGIN_H #include -#include - -#include "iplugin_manager.h" - -namespace NLQT -{ - +#include + +#include "iplugin_manager.h" + +namespace NLQT +{ + class IPlugin { public: @@ -37,9 +37,9 @@ public: virtual void extensionsInitialized() = 0; virtual void shutdown() { } - virtual QString name() const = 0; - virtual QString version() const = 0; - virtual QString vendor() const = 0; + virtual QString name() const = 0; + virtual QString version() const = 0; + virtual QString vendor() const = 0; virtual QString description() const = 0; }; diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_manager.h b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_manager.h index 64be11403..05aabe856 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_manager.h +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/iplugin_manager.h @@ -39,13 +39,13 @@ public: virtual void addObject(QObject *obj) = 0; virtual void removeObject(QObject *obj) = 0; virtual QList allObjects() const = 0; - + // Plugin operations virtual void loadPlugins() = 0; virtual QStringList getPluginPaths() const = 0; virtual void setPluginPaths(const QStringList &paths) = 0; virtual QList plugins() const = 0; - + Q_SIGNALS: void objectAdded(QObject *obj); void aboutToRemoveObject(QObject *obj); diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.cpp b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.cpp index 187cc4051..551f4222f 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.cpp @@ -1,129 +1,129 @@ -/* - Object Viewer Qt - Copyright (C) 2010 Dzmitry Kamiahin - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -*/ - -#include "plugin_manager.h" - -#include +/* + Object Viewer Qt + Copyright (C) 2010 Dzmitry Kamiahin -#include - -#include "plugin_spec.h" - -namespace NLQT -{ - -CPluginManager::CPluginManager(QObject *parent): - IPluginManager(parent) -{ -} - -CPluginManager::~CPluginManager() + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + +#include "plugin_manager.h" + +#include + +#include + +#include "plugin_spec.h" + +namespace NLQT +{ + +CPluginManager::CPluginManager(QObject *parent): + IPluginManager(parent) +{ +} + +CPluginManager::~CPluginManager() { stopAll(); - qDeleteAll(_pluginSpecs); -} - -void CPluginManager::addObject(QObject *obj) -{ - QWriteLocker lock(&_lock); - if (obj == 0) + qDeleteAll(_pluginSpecs); +} + +void CPluginManager::addObject(QObject *obj) +{ + QWriteLocker lock(&_lock); + if (obj == 0) { nlwarning("trying to add null object"); - return; + return; } - if (_allObjects.contains(obj)) + if (_allObjects.contains(obj)) { nlwarning("trying to add duplicate object"); return; - } + } nlinfo(QString("addObject:" + obj->objectName()).toStdString().c_str()); - + _allObjects.append(obj); - Q_EMIT objectAdded(obj); -} - -void CPluginManager::removeObject(QObject *obj) + Q_EMIT objectAdded(obj); +} + +void CPluginManager::removeObject(QObject *obj) { - if (obj == 0) + if (obj == 0) { nlwarning("trying to remove null object"); - return; - } + return; + } - if (!_allObjects.contains(obj)) + if (!_allObjects.contains(obj)) { nlinfo(QString("object not in list:" + obj->objectName()).toStdString().c_str()); return; - } + } nlinfo(QString("removeObject:" + obj->objectName()).toStdString().c_str()); - - Q_EMIT aboutToRemoveObject(obj); + + Q_EMIT aboutToRemoveObject(obj); QWriteLocker lock(&_lock); - _allObjects.removeAll(obj); -} - -QList CPluginManager::allObjects() const -{ - return _allObjects; -} - -void CPluginManager::loadPlugins() + _allObjects.removeAll(obj); +} + +QList CPluginManager::allObjects() const { - Q_FOREACH (CPluginSpec *spec, _pluginSpecs) - setPluginState(spec, State::Loaded); + return _allObjects; +} - Q_FOREACH (CPluginSpec *spec, _pluginSpecs) - setPluginState(spec, State::Initialized); +void CPluginManager::loadPlugins() +{ + Q_FOREACH (CPluginSpec *spec, _pluginSpecs) + setPluginState(spec, State::Loaded); - Q_FOREACH (CPluginSpec *spec, _pluginSpecs) - setPluginState(spec, State::Running); - - Q_EMIT pluginsChanged(); -} - -QStringList CPluginManager::getPluginPaths() const -{ - return _pluginPaths; -} - -void CPluginManager::setPluginPaths(const QStringList &paths) -{ - _pluginPaths = paths; - readPluginPaths(); -} - -QList CPluginManager::plugins() const -{ - return _pluginSpecs; -} - -void CPluginManager::readPluginPaths() + Q_FOREACH (CPluginSpec *spec, _pluginSpecs) + setPluginState(spec, State::Initialized); + + Q_FOREACH (CPluginSpec *spec, _pluginSpecs) + setPluginState(spec, State::Running); + + Q_EMIT pluginsChanged(); +} + +QStringList CPluginManager::getPluginPaths() const +{ + return _pluginPaths; +} + +void CPluginManager::setPluginPaths(const QStringList &paths) +{ + _pluginPaths = paths; + readPluginPaths(); +} + +QList CPluginManager::plugins() const +{ + return _pluginSpecs; +} + +void CPluginManager::readPluginPaths() { qDeleteAll(_pluginSpecs); - _pluginSpecs.clear(); + _pluginSpecs.clear(); QStringList pluginsList; - QStringList searchPaths = _pluginPaths; - while (!searchPaths.isEmpty()) + QStringList searchPaths = _pluginPaths; + while (!searchPaths.isEmpty()) { - const QDir dir(searchPaths.takeFirst()); + const QDir dir(searchPaths.takeFirst()); #ifdef Q_OS_WIN const QFileInfoList files = dir.entryInfoList(QStringList() << QString("*.dll"), QDir::Files); #elif defined(Q_OS_MAC) @@ -132,62 +132,62 @@ void CPluginManager::readPluginPaths() const QFileInfoList files = dir.entryInfoList(QStringList() << QString("*.so"), QDir::Files); #endif Q_FOREACH (const QFileInfo &file, files) - pluginsList << file.absoluteFilePath(); + pluginsList << file.absoluteFilePath(); const QFileInfoList dirs = dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot); Q_FOREACH (const QFileInfo &subdir, dirs) - searchPaths << subdir.absoluteFilePath(); - } - - Q_FOREACH (const QString &pluginFile, pluginsList) + searchPaths << subdir.absoluteFilePath(); + } + + Q_FOREACH (const QString &pluginFile, pluginsList) { - CPluginSpec *spec = new CPluginSpec; + CPluginSpec *spec = new CPluginSpec; if (spec->setFileName(pluginFile)) _pluginSpecs.append(spec); else delete spec; - } - - Q_EMIT pluginsChanged(); -} - + } + + Q_EMIT pluginsChanged(); +} + CPluginSpec *CPluginManager::pluginByName(const QString &name) const { - Q_FOREACH (CPluginSpec *spec, _pluginSpecs) - if (spec->name() == name) - return spec; - return 0; -} - -void CPluginManager::setPluginState(CPluginSpec *spec, int destState) + Q_FOREACH (CPluginSpec *spec, _pluginSpecs) + if (spec->name() == name) + return spec; + return 0; +} + +void CPluginManager::setPluginState(CPluginSpec *spec, int destState) { if (spec->hasError()) return; - if (destState == State::Running) + if (destState == State::Running) { spec->initializeExtensions(); - return; - } - else if (destState == State::Deleted) + return; + } + else if (destState == State::Deleted) { - spec->kill(); - return; - } - - if (destState == State::Loaded) - spec->loadLibrary(); - else if (destState == State::Initialized) - spec->initializePlugin(); - else if (destState == State::Stopped) - spec->stop(); -} - -void CPluginManager::stopAll() -{ - Q_FOREACH (CPluginSpec *spec, _pluginSpecs) - setPluginState(spec, State::Stopped); + spec->kill(); + return; + } + + if (destState == State::Loaded) + spec->loadLibrary(); + else if (destState == State::Initialized) + spec->initializePlugin(); + else if (destState == State::Stopped) + spec->stop(); +} + +void CPluginManager::stopAll() +{ + Q_FOREACH (CPluginSpec *spec, _pluginSpecs) + setPluginState(spec, State::Stopped); + + Q_FOREACH (CPluginSpec *spec, _pluginSpecs) + setPluginState(spec, State::Deleted); +} - Q_FOREACH (CPluginSpec *spec, _pluginSpecs) - setPluginState(spec, State::Deleted); -} - }; // namespace NLQT \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.h b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.h index 7c5ae30b0..63a781eee 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.h +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_manager.h @@ -33,22 +33,22 @@ class IPlugin; class CPluginManager : public IPluginManager { - Q_OBJECT + Q_OBJECT public: - CPluginManager(QObject *parent = 0); - ~CPluginManager(); + CPluginManager(QObject *parent = 0); + ~CPluginManager(); - // Object pool operations - virtual void addObject(QObject *obj); - virtual void removeObject(QObject *obj); - virtual QList allObjects() const; + // Object pool operations + virtual void addObject(QObject *obj); + virtual void removeObject(QObject *obj); + virtual QList allObjects() const; - // Plugin operations - virtual void loadPlugins(); - virtual QStringList getPluginPaths() const; - virtual void setPluginPaths(const QStringList &paths); - virtual QList plugins() const; + // Plugin operations + virtual void loadPlugins(); + virtual QStringList getPluginPaths() const; + virtual void setPluginPaths(const QStringList &paths); + virtual QList plugins() const; CPluginSpec *pluginByName(const QString &name) const; @@ -59,10 +59,10 @@ private: mutable QReadWriteLock _lock; - QList _pluginSpecs; - QStringList _pluginPaths; - QList _allObjects; - + QList _pluginSpecs; + QStringList _pluginPaths; + QList _allObjects; + }; // class CPluginManager } // namespace NLQT diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.cpp b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.cpp index b96d7c0c0..8237e1dd7 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.cpp @@ -1,46 +1,46 @@ -/* - Object Viewer Qt - Copyright (C) 2010 Dzmitry Kamiahin - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -*/ - -#include "plugin_spec.h" - -#include -#include -#include -#include - -#include "iplugin.h" -#include "iplugin_manager.h" - -namespace NLQT -{ - -CPluginSpec::CPluginSpec(): - _state(State::Invalid), - _hasError(false), - _plugin(NULL) -{ -} - -CPluginSpec::~CPluginSpec() -{ -} - +/* + Object Viewer Qt + Copyright (C) 2010 Dzmitry Kamiahin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + +#include "plugin_spec.h" + +#include +#include +#include +#include + +#include "iplugin.h" +#include "iplugin_manager.h" + +namespace NLQT +{ + +CPluginSpec::CPluginSpec(): + _state(State::Invalid), + _hasError(false), + _plugin(NULL) +{ +} + +CPluginSpec::~CPluginSpec() +{ +} + QString CPluginSpec::name() const { return _name; @@ -52,172 +52,172 @@ QString CPluginSpec::version() const } QString CPluginSpec::vendor() const -{ - return _vendor; -} - -QString CPluginSpec::description() const -{ - return _description; -} - -QString CPluginSpec::location() const -{ - return _location; -} - -QString CPluginSpec::filePath() const -{ - return _filePath; -} - -QString CPluginSpec::fileName() const -{ - return _fileName; -} - -IPlugin* CPluginSpec::plugin() const -{ - return _plugin; -} - -int CPluginSpec::getState() const -{ - return _state; -} - -bool CPluginSpec::hasError() const -{ - return _hasError; -} - -QString CPluginSpec::errorString() const -{ - return _errorString; -} - -bool CPluginSpec::setFileName(const QString &fileName) -{ +{ + return _vendor; +} + +QString CPluginSpec::description() const +{ + return _description; +} + +QString CPluginSpec::location() const +{ + return _location; +} + +QString CPluginSpec::filePath() const +{ + return _filePath; +} + +QString CPluginSpec::fileName() const +{ + return _fileName; +} + +IPlugin* CPluginSpec::plugin() const +{ + return _plugin; +} + +int CPluginSpec::getState() const +{ + return _state; +} + +bool CPluginSpec::hasError() const +{ + return _hasError; +} + +QString CPluginSpec::errorString() const +{ + return _errorString; +} + +bool CPluginSpec::setFileName(const QString &fileName) +{ _name - = _version - = _vendor - = _description - = _location - = _filePath - = _fileName - = ""; - _state = State::Invalid; - _hasError = false; - _errorString = ""; - QFile file(fileName); - if (!file.exists()) - return reportError(QCoreApplication::translate("CPluginSpec", "File does not exist: %1").arg(file.fileName())); - if (!file.open(QIODevice::ReadOnly)) - return reportError(QCoreApplication::translate("CPluginSpec", "Could not open file for read: %1").arg(file.fileName())); - + = _version + = _vendor + = _description + = _location + = _filePath + = _fileName + = ""; + _state = State::Invalid; + _hasError = false; + _errorString = ""; + QFile file(fileName); + if (!file.exists()) + return reportError(QCoreApplication::translate("CPluginSpec", "File does not exist: %1").arg(file.fileName())); + if (!file.open(QIODevice::ReadOnly)) + return reportError(QCoreApplication::translate("CPluginSpec", "Could not open file for read: %1").arg(file.fileName())); + QFileInfo fileInfo(file); - _location = fileInfo.absolutePath(); - _filePath = fileInfo.absoluteFilePath(); + _location = fileInfo.absolutePath(); + _filePath = fileInfo.absoluteFilePath(); _fileName = fileInfo.fileName(); - _state = State::Read; - return true; -} - + _state = State::Read; + return true; +} + bool CPluginSpec::loadLibrary() { if (_hasError) return false; - if (_state != State::Read) + if (_state != State::Read) { - if (_state == State::Loaded) - return true; + if (_state == State::Loaded) + return true; return reportError(QCoreApplication::translate("CPluginSpec", "Loading the library failed because state != Resolved")); - } - QString libName = QString("%1/%2").arg(_location).arg(_fileName); + } + QString libName = QString("%1/%2").arg(_location).arg(_fileName); - QPluginLoader loader(libName); - if (!loader.load()) + QPluginLoader loader(libName); + if (!loader.load()) return reportError(libName + QString::fromLatin1(": ") + loader.errorString()); - IPlugin *pluginObject = qobject_cast(loader.instance()); - if (!pluginObject) + IPlugin *pluginObject = qobject_cast(loader.instance()); + if (!pluginObject) { loader.unload(); return reportError(QCoreApplication::translate("CPluginSpec", "Plugin is not valid (does not derive from IPlugin)")); - } + } _name = pluginObject->name(); _version = pluginObject->version(); _vendor = pluginObject->vendor(); _description = pluginObject->description(); - _state = State::Loaded; - _plugin = pluginObject; - return true; + _state = State::Loaded; + _plugin = pluginObject; + return true; } bool CPluginSpec::initializePlugin() { if (_hasError) - return false; - if (_state != State::Loaded) + return false; + if (_state != State::Loaded) { - if (_state == State::Initialized) - return true; + if (_state == State::Initialized) + return true; return reportError(QCoreApplication::translate("CPluginSpec", "Initializing the plugin failed because state != Loaded)")); - } - if (!_plugin) + } + if (!_plugin) return reportError(QCoreApplication::translate("CPluginSpec", "Internal error: have no plugin instance to initialize")); QString err; - if (!_plugin->initialize(_pluginManager, &err)) + if (!_plugin->initialize(_pluginManager, &err)) return reportError(QCoreApplication::translate("CPluginSpec", "Plugin initialization failed: %1").arg(err)); - _state = State::Initialized; - return true; + _state = State::Initialized; + return true; } bool CPluginSpec::initializeExtensions() { if (_hasError) return false; - if (_state != State::Initialized) + if (_state != State::Initialized) { - if (_state == State::Running) - return true; + if (_state == State::Running) + return true; return reportError(QCoreApplication::translate("CPluginSpec", "Cannot perform extensionsInitialized because state != Initialized")); - } - if (!_plugin) + } + if (!_plugin) return reportError(QCoreApplication::translate("CPluginSpec", "Internal error: have no plugin instance to perform extensionsInitialized")); _plugin->extensionsInitialized(); - _state = State::Running; - return true; + _state = State::Running; + return true; } void CPluginSpec::stop() { if (!_plugin) return; - _plugin->shutdown(); - _state = State::Stopped; -} - -void CPluginSpec::kill() -{ + _plugin->shutdown(); + _state = State::Stopped; +} + +void CPluginSpec::kill() +{ if (!_plugin) return; - delete _plugin; - _plugin = NULL; - _state = State::Deleted; -} - + delete _plugin; + _plugin = NULL; + _state = State::Deleted; +} + bool CPluginSpec::reportError(const QString &err) { - _errorString = err; - _hasError = true; - return false; -} - + _errorString = err; + _hasError = true; + return false; +} + } // namespace NLQT \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.h b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.h index 1ae79e447..955ee9544 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.h +++ b/code/nel/tools/3d/object_viewer_qt/src/extension_system/plugin_spec.h @@ -26,37 +26,37 @@ namespace NLQT { class IPlugin; -class IPluginManager; - -struct State -{ - enum List - { - Invalid = 1, +class IPluginManager; + +struct State +{ + enum List + { + Invalid = 1, Read, Loaded, Initialized, Running, Stopped, - Deleted - }; + Deleted + }; }; class CPluginSpec { public: ~CPluginSpec(); - - QString name() const; - QString version() const; - QString vendor() const; + + QString name() const; + QString version() const; + QString vendor() const; QString description() const; QString location() const; QString filePath() const; QString fileName() const; - IPlugin *plugin() const; + IPlugin *plugin() const; // state int getState() const; @@ -66,27 +66,27 @@ public: private: CPluginSpec(); - bool setFileName(const QString &fileName); - bool loadLibrary(); - bool initializePlugin(); - bool initializeExtensions(); - void stop(); - void kill(); - - bool reportError(const QString &err); - - QString _location; - QString _filePath; + bool setFileName(const QString &fileName); + bool loadLibrary(); + bool initializePlugin(); + bool initializeExtensions(); + void stop(); + void kill(); + + bool reportError(const QString &err); + + QString _location; + QString _filePath; QString _fileName; - - QString _name; - QString _version; - QString _vendor; + + QString _name; + QString _version; + QString _vendor; QString _description; - - int _state; - bool _hasError; - QString _errorString; + + int _state; + bool _hasError; + QString _errorString; IPlugin *_plugin; IPluginManager *_pluginManager;