|
Slicer 4.2
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
|
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
1.7.4