]> vaikene.ee Git - evaf/blobdiff - src/libs/Plugins/pluginmanager.cpp
Ported to Qt5
[evaf] / src / libs / Plugins / pluginmanager.cpp
index c357d114a3236b227ed0fd4cf05428a033c283f9..5d08dcb10ddff65bf4ed64d207371d139ec542d6 100644 (file)
@@ -25,7 +25,6 @@
 #include <Common/Globals>
 #include <Common/Util>
 #include <Common/iLogger>
-#include <Common/iEnv>
 #include <Common/iApp>
 
 #include <QtCore>
@@ -145,7 +144,7 @@ void PluginManagerPrivate::done()
 bool PluginManagerPrivate::loadPlugins()
 {
     // Get the name of the application's XML file
-    QString xmlFileName = Common::iEnv::instance()->etcDir() + Common::iApp::instance()->xmlFileName();
+    QString xmlFileName = Common::iApp::instance()->etcDir() + Common::iApp::instance()->xmlFileName();
 
     // Open the XML file
     QFile xmlFile(xmlFileName);
@@ -292,14 +291,8 @@ bool PluginManagerPrivate::loadPlugins()
         } // End element?
     }
 
-    // Load Qt plugins
-    int i;
-    for (i = 0; i < qtPlugins.size(); ++i) {
-        loadQtPlugin(qtPlugins.at(i));
-    }
-
     // Load eVaf plugins
-    i = 0;
+    int i = 0;
     while (i < mPlugins.size()) {
         if (!mPlugins.at(i)->load()) {
             EVAF_ERROR("Failed to load module '%s'", qPrintable(mPlugins.at(i)->name()));
@@ -312,7 +305,7 @@ bool PluginManagerPrivate::loadPlugins()
     // Initialize eVaf plugins
     i = 0;
     while (i < mPlugins.size()) {
-        if (mPlugins.at(i)->init()) {
+        if (!mPlugins.at(i)->init()) {
             EVAF_ERROR("Failed to initialize module '%s'", qPrintable(mPlugins.at(i)->name()));
             mPlugins.removeAt(i);
         }
@@ -326,7 +319,7 @@ bool PluginManagerPrivate::loadPlugins()
 void PluginManagerPrivate::unloadPlugins()
 {
     // Finalize all the plugins
-    for (int i = 0; i < mPlugins.size(); ++i)
+    for (int i = mPlugins.size() - 1; i >= 0; --i)
         mPlugins.at(i)->done();
     while (!mPlugins.isEmpty()) {
         QExplicitlySharedDataPointer<Plugin> p = mPlugins.takeLast();
@@ -349,48 +342,6 @@ Module * PluginManagerPrivate::moduleByName(QString const & name) const
     return 0;
 }
 
-bool PluginManagerPrivate::loadQtPlugin(QString const & name) const
-{
-    // Get the Qt plugin file name with the full path
-    QString fileName;
-
-#ifdef Q_OS_LINUX
-    fileName = QString("%1libq%2.so").arg(Common::iEnv::instance()->qtPluginsDir()).arg(name);
-#  ifndef QT_NO_DEBUG
-    QString t = QString("%1libq%2.so.debug").arg(Common::iEnv::instance()->qtPluginsDir()).arg(name);
-    if (QFile::exists(t))
-        fileName = t;
-#  endif
-#endif
-
-#ifdef Q_OS_WIN32
-    fileName = QString("%2q%2%3").arg(Common::iEnv::instance()->qtPluginsDir()).arg(name).arg("4.dll");
-#  ifndef QT_NO_DEBUG
-    QString t = QString(%1q%2%3).arg(Common::iEnv::instance()->qtPluginsDir()).arg(name).arg(d4.dll);
-    if (!QFile::exists(t))
-        fileName = t;
-#  endif
-#endif
-
-    if (fileName.isEmpty()) {
-        EVAF_ERROR("Don\'t know how to load Qt plugin '%s'", qPrintable(name));
-        return false;
-    }
-
-    EVAF_INFO("Loading Qt plugin '%s'", qPrintable(fileName));
-
-    QLibrary lib(fileName);
-    void * fn = lib.resolve("qt_plugin_instance");
-    if (fn) {
-        qRegisterStaticPluginInstanceFunction(QtPluginInstanceFunction(fn));
-        return true;
-    }
-    else {
-        EVAF_ERROR("Failed to load Qt plugin '%s' : %s", qPrintable(fileName), qPrintable(lib.errorString()));
-        return false;
-    }
-}
-
 
 //-------------------------------------------------------------------
 
@@ -405,16 +356,16 @@ Module::Module(QString const & name)
 
 Module::~Module()
 {
-    if (mPluginFactory)
-        delete mPluginFactory;
-    if (mLoader)
+    if (mLoader) {
+        mLoader->unload();
         delete mLoader;
+    }
 }
 
 bool Module::load()
 {
     // The real file name with path
-    QString fileName = Common::iEnv::instance()->binDir() + expandPluginName(mName);
+    QString fileName = Common::iApp::instance()->binDir() + expandPluginName(mName);
 
     // Try to load the module
     QScopedPointer<QPluginLoader> p(new QPluginLoader(fileName));
@@ -430,7 +381,7 @@ bool Module::load()
     if ((mPluginFactory = qobject_cast<iPluginFactory *>(root)) == 0) {
 
         // If not, then it has to implement the iPlugin interface
-        if ((mPlugin = qobject_cast<iPlugin *>(root)) == 0) {
+        if (qobject_cast<iPlugin *>(root) == 0) {
             EVAF_FATAL_ERROR("Module '%s' is not a valid eVaf module", qPrintable(mName));
             return false;
         }
@@ -444,13 +395,10 @@ bool Module::load()
 void Module::unload()
 {
     mRoot = 0;
-
-    if (mPluginFactory) {
-        delete mPluginFactory;
-        mPluginFactory = 0;
-    }
+    mPluginFactory = 0;
     mPlugin = 0;
     if (mLoader) {
+        mLoader->unload();
         delete mLoader;
         mLoader = 0;
     }
@@ -461,7 +409,7 @@ iPlugin * Module::create(QString const & name)
     // If the module is not loaded, load it now
     if (!mLoader) {
         if (!load())
-            return false;
+            return 0;
     }
 
     iPlugin * i = 0;
@@ -509,8 +457,6 @@ Plugin::Plugin(Module * module, QString const & name, QString const & args)
 
 Plugin::~Plugin()
 {
-    if (mPlugin)
-        delete mPlugin;
 }
 
 bool Plugin::load()
@@ -523,10 +469,7 @@ bool Plugin::load()
 
 void Plugin::unload()
 {
-    if (mPlugin) {
-        delete mPlugin;
-        mPlugin = 0;
-    }
+    mPlugin = 0;
 }
 
 bool Plugin::init()