Преглед на файлове

Provide an explicit resolve operation for plug-ins.

Sascha Zelzer преди 10 години
родител
ревизия
d9e1af2797
променени са 3 файла, в които са добавени 50 реда и са изтрити 0 реда
  1. 1 0
      Libs/PluginFramework/ctkPlugin.h
  2. 31 0
      Libs/PluginFramework/ctkPluginFrameworkLauncher.cpp
  3. 18 0
      Libs/PluginFramework/ctkPluginFrameworkLauncher.h

+ 1 - 0
Libs/PluginFramework/ctkPlugin.h

@@ -796,6 +796,7 @@ public:
 protected:
 
   friend class ctkPluginFramework;
+  friend class ctkPluginFrameworkLauncherPrivate;
   friend class ctkPluginFrameworkPrivate;
   friend class ctkPluginFrameworkContext;
   friend class ctkPlugins;

+ 31 - 0
Libs/PluginFramework/ctkPluginFrameworkLauncher.cpp

@@ -25,6 +25,7 @@
 #include "ctkPluginFramework.h"
 #include "ctkPluginContext.h"
 #include "ctkPluginException.h"
+#include "ctkPlugin_p.h"
 #include "ctkDefaultApplicationLauncher_p.h"
 #include "ctkLocationManager_p.h"
 #include "ctkBasicLocation_p.h"
@@ -271,6 +272,15 @@ public:
     return install(QUrl::fromLocalFile(pluginPath), pc);
   }
 
+  //----------------------------------------------------------------------------
+  void resolvePlugin(const QSharedPointer<ctkPlugin>& plugin)
+  {
+    if (plugin)
+    {
+      plugin->d_func()->getUpdatedState();
+    }
+  }
+
   /*
    * Ensure all basic plugins are installed, resolved and scheduled to start. Returns a list containing
    * all basic bundles that are marked to start.
@@ -342,6 +352,11 @@ public:
 
     foreach(QSharedPointer<ctkPlugin> plugin, startEntries)
     {
+      this->resolvePlugin(plugin);
+    }
+
+    foreach(QSharedPointer<ctkPlugin> plugin, startEntries)
+    {
       plugin->start(startOptions);
     }
   }
@@ -658,6 +673,22 @@ bool ctkPluginFrameworkLauncher::stop(const QString& symbolicName,
 }
 
 //----------------------------------------------------------------------------
+void ctkPluginFrameworkLauncher::resolve(const QSharedPointer<ctkPlugin>& plugin)
+{
+  d->resolvePlugin(plugin);
+}
+
+//----------------------------------------------------------------------------
+void ctkPluginFrameworkLauncher::resolve()
+{
+  QList<QSharedPointer<ctkPlugin> > plugins = getPluginFramework()->getPluginContext()->getPlugins();
+  foreach(const QSharedPointer<ctkPlugin>& plugin, plugins)
+  {
+    resolve(plugin);
+  }
+}
+
+//----------------------------------------------------------------------------
 ctkPluginContext* ctkPluginFrameworkLauncher::getPluginContext()
 {
   if (d->fwFactory == 0) return 0;

+ 18 - 0
Libs/PluginFramework/ctkPluginFrameworkLauncher.h

@@ -231,6 +231,24 @@ public:
                     ctkPlugin::StopOptions options = 0, ctkPluginContext* context = 0);
 
   /**
+   * Resolve the given plug-in.
+   *
+   * This method tries to resolv the given plug-in. In case of an error,
+   * a framework event of type ctkPluginFrameworkEvent::PLUGIN_ERROR is send.
+   *
+   * @param plugin The plug-in to be resolved.
+   */
+  static void resolve(const QSharedPointer<ctkPlugin>& plugin);
+
+  /**
+   * Resolve all currently installed plug-ins.
+   *
+   * In case of an error, a framework event of type
+   * ctkPluginFrameworkEvent::PLUGIN_ERROR is send.
+   */
+  static void resolve();
+
+  /**
    * Get the plugin context for the Plugin Framework.
    *
    * \return The context associated to the Plugin Framework, or <code>null</code>