Slicer 4.2
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
qSlicerAbstractModuleFactoryManager.h
Go to the documentation of this file.
00001 /*==============================================================================
00002 
00003   Program: 3D Slicer
00004 
00005   Copyright (c) Kitware Inc.
00006 
00007   See COPYRIGHT.txt
00008   or http://www.slicer.org/copyright/copyright.txt for details.
00009 
00010   Unless required by applicable law or agreed to in writing, software
00011   distributed under the License is distributed on an "AS IS" BASIS,
00012   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013   See the License for the specific language governing permissions and
00014   limitations under the License.
00015 
00016   This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.
00017   and was partially funded by NIH grant 3P41RR013218-12S1
00018 
00019 ==============================================================================*/
00020 
00021 #ifndef __qSlicerAbstractModuleFactoryManager_h
00022 #define __qSlicerAbstractModuleFactoryManager_h
00023 
00024 // Qt includes
00025 #include <QObject>
00026 #include <QString>
00027 
00028 // CTK includes
00029 #include <ctkAbstractFileBasedFactory.h>
00030 
00031 #include "qSlicerBaseQTCoreExport.h"
00032 
00033 class qSlicerAbstractCoreModule;
00034 
00035 class qSlicerAbstractModuleFactoryManagerPrivate;
00036 
00065 class Q_SLICER_BASE_QTCORE_EXPORT qSlicerAbstractModuleFactoryManager : public QObject
00066 {
00067   Q_OBJECT
00076   Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths)
00077 
00078   
00079 
00080 
00081   Q_PROPERTY(QStringList modulesToIgnore READ modulesToIgnore WRITE setModulesToIgnore NOTIFY modulesToIgnoreChanged)
00082 public:
00083   typedef ctkAbstractFileBasedFactory<qSlicerAbstractCoreModule> qSlicerFileBasedModuleFactory;
00084   typedef ctkAbstractFactory<qSlicerAbstractCoreModule> qSlicerModuleFactory;
00085 
00086   typedef QObject Superclass;
00087   qSlicerAbstractModuleFactoryManager(QObject * newParent = 0);
00088 
00091   virtual ~qSlicerAbstractModuleFactoryManager();
00092 
00094   virtual void printAdditionalInfo();
00095 
00108   void registerFactory(qSlicerModuleFactory* factory, int priority = 0);
00109   void unregisterFactory(qSlicerModuleFactory* factory);
00110   void unregisterFactories();
00111 
00112   void setSearchPaths(const QStringList& searchPaths);
00113   QStringList searchPaths()const;
00114 
00117   inline void addSearchPaths(const QStringList& paths);
00119   inline void addSearchPath(const QString& path);
00120 
00123   inline void removeSearchPaths(const QStringList& paths);
00124 
00126   inline void removeSearchPath(const QString& path);
00127 
00128   void setExplicitModules(const QStringList& moduleNames);
00129   QStringList explicitModules()const;
00130 
00131   void setModulesToIgnore(const QStringList& modulesNames);
00132   QStringList modulesToIgnore()const;
00133 
00135   inline void addModuleToIgnore(const QString& moduleName);
00136 
00138   inline void removeModuleToIgnore(const QString& moduleName);
00139 
00142   QStringList ignoredModuleNames()const;
00143 
00146   void registerModules();
00147 
00149   Q_INVOKABLE QStringList registeredModuleNames() const;
00150 
00152   Q_INVOKABLE bool isRegistered(const QString& name)const;
00153 
00155   virtual void instantiateModules();
00156 
00158   Q_INVOKABLE QStringList instantiatedModuleNames() const;
00159 
00161   Q_INVOKABLE bool isInstantiated(const QString& name)const;
00162 
00164   Q_INVOKABLE qSlicerAbstractCoreModule* moduleInstance(const QString& moduleName)const;
00165 
00167   void uninstantiateModules();
00168 
00170   void setVerboseModuleDiscovery(bool value);
00171 
00175   QStringList dependentModules(const QString& module)const;
00176 
00180   QStringList moduleDependees(const QString& module)const;
00181 
00182 signals:
00185   void modulesRegistered(const QStringList& moduleNames);
00186   void moduleRegistered(const QString& moduleName);
00187 
00188   void explicitModulesChanged(const QStringList& moduleNames);
00189 
00190   void modulesToIgnoreChanged(const QStringList& moduleNames);
00191   void moduleIgnored(const QString& moduleName);
00192 
00193   void modulesInstantiated(const QStringList& moduleNames);
00194   void moduleInstantiated(const QString& moduleName);
00195 
00196   void modulesAboutToBeUninstantiated(const QStringList& moduleNames);
00197   void moduleAboutToBeUninstantiated(const QString& moduleName);
00198 
00199   void modulesUninstantiated(const QStringList& moduleNames);
00200   void moduleUninstantiated(const QString& moduleName);
00201 
00202 public slots:
00206   void setIsVerbose(bool flag);
00207   bool isVerbose()const;
00208 protected:
00209   QScopedPointer<qSlicerAbstractModuleFactoryManagerPrivate> d_ptr;
00210 
00211   void registerModules(const QString& directoryPath);
00212   void registerModule(const QFileInfo& file);
00213 
00215   qSlicerAbstractCoreModule* instantiateModule(const QString& name);
00216 
00218   virtual void uninstantiateModule(const QString& moduleName);
00219 
00220 private:
00221   Q_DECLARE_PRIVATE(qSlicerAbstractModuleFactoryManager);
00222   Q_DISABLE_COPY(qSlicerAbstractModuleFactoryManager);
00223 };
00224 
00225 //-----------------------------------------------------------------------------
00226 void qSlicerAbstractModuleFactoryManager::addSearchPaths(const QStringList& paths)
00227 {
00228   this->setSearchPaths(this->searchPaths() << paths);
00229 }
00230 
00231 //-----------------------------------------------------------------------------
00232 void qSlicerAbstractModuleFactoryManager::addSearchPath(const QString& path)
00233 {
00234   this->setSearchPaths(this->searchPaths() << path);
00235 }
00236 
00237 //-----------------------------------------------------------------------------
00238 void qSlicerAbstractModuleFactoryManager::removeSearchPaths(const QStringList& paths)
00239 {
00240   foreach(const QString& path, paths)
00241     {
00242     this->removeSearchPath(path);
00243     }
00244 }
00245 
00246 //-----------------------------------------------------------------------------
00247 void qSlicerAbstractModuleFactoryManager::removeSearchPath(const QString& path)
00248 {
00249   QStringList newSearchPaths = this->searchPaths();
00250   newSearchPaths.removeAll(path);
00251   this->setSearchPaths(newSearchPaths);
00252 }
00253 
00254 //-----------------------------------------------------------------------------
00255 void qSlicerAbstractModuleFactoryManager::addModuleToIgnore(const QString& moduleName)
00256 {
00257   QStringList modules = this->modulesToIgnore();
00258   if (modules.contains(moduleName))
00259     {
00260     return;
00261     }
00262   modules << moduleName;
00263   this->setModulesToIgnore(modules);
00264 }
00265 
00266 //-----------------------------------------------------------------------------
00267 void qSlicerAbstractModuleFactoryManager::removeModuleToIgnore(const QString& moduleName)
00268 {
00269   QStringList modules = this->modulesToIgnore();
00270   modules.removeAll(moduleName);
00271   this->setModulesToIgnore(modules);
00272 }
00273 
00274 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines