Переглянути джерело

Added methods to retrieve registered backends from the module manager.

Sascha Zelzer 10 роки тому
батько
коміт
73e80bda4f

+ 12 - 31
Libs/CommandLineModules/Core/ctkCmdLineModuleManager.cpp

@@ -155,41 +155,22 @@ void ctkCmdLineModuleManager::registerBackend(ctkCmdLineModuleBackend *backend)
   }
 }
 
-
 //----------------------------------------------------------------------------
-void ctkCmdLineModuleManager::replaceBackend(ctkCmdLineModuleBackend* backend)
+ctkCmdLineModuleBackend*ctkCmdLineModuleManager::backend(const QString& scheme) const
 {
-  if (d->SchemeToBackend.size() == 0)
-  {
-    this->registerBackend(backend);
-  }
-
-  // Check if new backend has exactly matching list of schemes to an existing backend.
-  ctkCmdLineModuleBackend* matchingBackend = NULL;
-  QList<QString> supportedSchemes = backend->schemes();
-  QList<ctkCmdLineModuleBackend*> existingBackends = d->SchemeToBackend.values();
-  foreach (ctkCmdLineModuleBackend* existingBackend, existingBackends)
-  {
-    QList<QString> schemes = existingBackend->schemes();
-    if (schemes == supportedSchemes)
-    {
-      matchingBackend = existingBackend;
-    }
-  }
-
-  if (matchingBackend != NULL)
-  {
-    foreach (QString scheme, supportedSchemes)
-    {
-      d->SchemeToBackend[scheme] = backend;
-    }
-  }
-  else
-  {
-    this->registerBackend(backend);
-  }
+  QHash<QString, ctkCmdLineModuleBackend*>::ConstIterator iter =
+      d->SchemeToBackend.find(scheme);
+  return iter == d->SchemeToBackend.end() ? NULL : iter.value();
 }
 
+//----------------------------------------------------------------------------
+QList<ctkCmdLineModuleBackend*> ctkCmdLineModuleManager::backends() const
+{
+  QList<ctkCmdLineModuleBackend*> result = d->SchemeToBackend.values();
+  qSort(result);
+  result.erase(std::unique(result.begin(), result.end()), result.end());
+  return result;
+}
 
 //----------------------------------------------------------------------------
 ctkCmdLineModuleReference

+ 10 - 5
Libs/CommandLineModules/Core/ctkCmdLineModuleManager.h

@@ -134,12 +134,17 @@ public:
   void registerBackend(ctkCmdLineModuleBackend* backend);
 
   /**
-   * @brief Replaces an existing back-end.
-   * @param backend The new back-end.
-   *
-   * If no backend exists, calls registerBackend.
+   * @brief Get the registered backend for a scheme.
+   * @param scheme The scheme the backend was registered with
+   * @return The backend or NULL, if \c scheme is unknown.
+   */
+  ctkCmdLineModuleBackend* backend(const QString& scheme) const;
+
+  /**
+   * @brief Get a list of all registered backends.
+   * @return A list of currently registered backends.
    */
-  void replaceBackend(ctkCmdLineModuleBackend* backend);
+  QList<ctkCmdLineModuleBackend*> backends() const;
 
   /**
    * @brief Registers a module, identified by the given URL.