Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
qSlicerAbstractModuleFactoryManager.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Kitware Inc.
6
7 See COPYRIGHT.txt
8 or http://www.slicer.org/copyright/copyright.txt for details.
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.
17 and was partially funded by NIH grant 3P41RR013218-12S1
18
19==============================================================================*/
20
21#ifndef __qSlicerAbstractModuleFactoryManager_h
22#define __qSlicerAbstractModuleFactoryManager_h
23
24// Qt includes
25#include <QObject>
26#include <QString>
27
28// CTK includes
29#include <ctkAbstractFileBasedFactory.h>
30
31#include "qSlicerBaseQTCoreExport.h"
32
34
35class qSlicerAbstractModuleFactoryManagerPrivate;
36
65class Q_SLICER_BASE_QTCORE_EXPORT qSlicerAbstractModuleFactoryManager : public QObject
66{
67 Q_OBJECT
78 Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths)
79
80
85public:
86 typedef ctkAbstractFileBasedFactory<qSlicerAbstractCoreModule> qSlicerFileBasedModuleFactory;
88
89 typedef QObject Superclass;
90 qSlicerAbstractModuleFactoryManager(QObject * newParent = nullptr);
91
95
97 virtual void printAdditionalInfo();
98
116 void registerFactory(qSlicerModuleFactory* factory, int priority = 0);
119
120 void setSearchPaths(const QStringList& searchPaths);
121 QStringList searchPaths()const;
122
125 inline void addSearchPaths(const QStringList& paths);
127 inline void addSearchPath(const QString& path);
128
131 inline void removeSearchPaths(const QStringList& paths);
132
134 inline void removeSearchPath(const QString& path);
135
136 void setExplicitModules(const QStringList& moduleNames);
137 QStringList explicitModules()const;
138
139
144 void setModulesToIgnore(const QStringList& modulesNames);
145 QStringList modulesToIgnore()const;
146
149 inline void addModuleToIgnore(const QString& moduleName);
150
153 inline void removeModuleToIgnore(const QString& moduleName);
154
157 QStringList ignoredModuleNames()const;
158
162
163 Q_INVOKABLE void registerModule(const QFileInfo& file);
164
166 Q_INVOKABLE QStringList registeredModuleNames() const;
167
169 Q_INVOKABLE bool isRegistered(const QString& name)const;
170
172 virtual void instantiateModules();
173
175 Q_INVOKABLE QStringList instantiatedModuleNames() const;
176
178 Q_INVOKABLE bool isInstantiated(const QString& name)const;
179
181 Q_INVOKABLE qSlicerAbstractCoreModule* moduleInstance(const QString& moduleName)const;
182
185
188
192 QStringList dependentModules(const QString& module)const;
193
197 QStringList moduleDependees(const QString& module)const;
198
199signals:
202 void modulesRegistered(const QStringList& moduleNames);
203 void moduleRegistered(const QString& moduleName);
204
205 void explicitModulesChanged(const QStringList& moduleNames);
206
207 void modulesToIgnoreChanged(const QStringList& moduleNames);
208 void moduleIgnored(const QString& moduleName);
209
210 void modulesInstantiated(const QStringList& moduleNames);
211 void moduleAboutToBeInstantiated(const QString& moduleName);
212 void moduleInstantiated(const QString& moduleName);
213
214 void modulesAboutToBeUninstantiated(const QStringList& moduleNames);
215 void moduleAboutToBeUninstantiated(const QString& moduleName);
216
217 void modulesUninstantiated(const QStringList& moduleNames);
218 void moduleUninstantiated(const QString& moduleName);
219
220public slots:
224 void setIsVerbose(bool flag);
225 bool isVerbose()const;
226protected:
227 QScopedPointer<qSlicerAbstractModuleFactoryManagerPrivate> d_ptr;
228
229 void registerModules(const QString& directoryPath);
230
233
235 virtual void uninstantiateModule(const QString& moduleName);
236
237private:
238 Q_DECLARE_PRIVATE(qSlicerAbstractModuleFactoryManager);
240};
241
242//-----------------------------------------------------------------------------
244{
245 this->setSearchPaths(this->searchPaths() << paths);
246}
247
248//-----------------------------------------------------------------------------
250{
251 this->setSearchPaths(this->searchPaths() << path);
252}
253
254//-----------------------------------------------------------------------------
256{
257 foreach(const QString& path, paths)
258 {
259 this->removeSearchPath(path);
260 }
261}
262
263//-----------------------------------------------------------------------------
265{
266 QStringList newSearchPaths = this->searchPaths();
267 newSearchPaths.removeAll(path);
268 this->setSearchPaths(newSearchPaths);
269}
270
271//-----------------------------------------------------------------------------
273{
274 QStringList modules = this->modulesToIgnore();
275 if (modules.contains(moduleName))
276 {
277 return;
278 }
279 modules << moduleName;
280 this->setModulesToIgnore(modules);
281}
282
283//-----------------------------------------------------------------------------
285{
286 QStringList modules = this->modulesToIgnore();
287 modules.removeAll(moduleName);
288 this->setModulesToIgnore(modules);
289}
290
291#endif
qSlicerAbstractCoreModule is the base class of any module in Slicer.
void moduleAboutToBeInstantiated(const QString &moduleName)
virtual void printAdditionalInfo()
Print internal state using qDebug()
void registerFactory(qSlicerModuleFactory *factory, int priority=0)
Register a factory The factory will be deleted when unregistered (e.g. in ~qSlicerAbstractModuleFacto...
void moduleIgnored(const QString &moduleName)
Q_INVOKABLE QStringList instantiatedModuleNames() const
List of registered and instantiated modules.
virtual void instantiateModules()
Instantiate all previously registered modules.
virtual void uninstantiateModule(const QString &moduleName)
Uninstantiate a module given its moduleName.
Q_INVOKABLE qSlicerAbstractCoreModule * moduleInstance(const QString &moduleName) const
Return the instance of a module if already instantiated, 0 otherwise.
void removeSearchPath(const QString &path)
Utility function that removes a path from the current searchPaths list.
void modulesUninstantiated(const QStringList &moduleNames)
QStringList moduleDependees(const QString &module) const
ctkAbstractFileBasedFactory< qSlicerAbstractCoreModule > qSlicerFileBasedModuleFactory
QStringList explicitModules() const
void setModulesToIgnore(const QStringList &modulesNames)
Q_INVOKABLE QStringList registeredModuleNames() const
Convenient method returning the list of all registered module names.
void modulesRegistered(const QStringList &moduleNames)
This signal is emitted when all the modules associated with the registered factories have been loaded...
void moduleUninstantiated(const QString &moduleName)
QScopedPointer< qSlicerAbstractModuleFactoryManagerPrivate > d_ptr
QStringList ignoredModuleNames() const
void setSearchPaths(const QStringList &searchPaths)
void explicitModulesChanged(const QStringList &moduleNames)
void setVerboseModuleDiscovery(bool value)
Enable/Disable verbose output during module discovery process.
Q_INVOKABLE bool isInstantiated(const QString &name) const
Return true if a module has been instantiated, false otherwise.
void moduleAboutToBeUninstantiated(const QString &moduleName)
QStringList dependentModules(const QString &module) const
void uninstantiateModules()
Uninstantiate all instantiated modules.
void unregisterFactory(qSlicerModuleFactory *factory)
qSlicerAbstractCoreModule * instantiateModule(const QString &name)
Instantiate a module given its name.
void modulesToIgnoreChanged(const QStringList &moduleNames)
qSlicerAbstractModuleFactoryManager(QObject *newParent=nullptr)
Q_INVOKABLE bool isRegistered(const QString &name) const
Return true if a module has been registered, false otherwise.
ctkAbstractFactory< qSlicerAbstractCoreModule > qSlicerModuleFactory
Q_INVOKABLE void registerModule(const QFileInfo &file)
void modulesInstantiated(const QStringList &moduleNames)
void setExplicitModules(const QStringList &moduleNames)
void moduleRegistered(const QString &moduleName)
void modulesAboutToBeUninstantiated(const QStringList &moduleNames)
void moduleInstantiated(const QString &moduleName)
void addSearchPath(const QString &path)
Utility function that adds a path to the current searchPaths list.