Kaynağa Gözat

ENH: Added virtual function fileNameToKey() to ctkAbstractLibraryFactory

This virtual function can be overloaded in sub-class to return an identifier
different from (or based on) the library filename.
Jean-Christophe Fillion-Robin 15 yıl önce
ebeveyn
işleme
0cf55385a4

+ 7 - 0
Libs/Core/ctkAbstractLibraryFactory.h

@@ -74,8 +74,15 @@ public:
   /// Set the list of symbols
   void setSymbols(const QStringList& symbols);
 
+  ///
+  /// Return a name allowing to uniquely identify the library
+  /// By default, it return \a fileName
+  virtual QString fileNameToKey(const QString& fileName);
+  
   /// 
   /// Register a plugin in the factory
+  /// The parameter \a key passed by reference will be updated with the
+  /// associated object name obtained using ::fileNameToKey()
   virtual bool registerLibrary(const QFileInfo& file, QString& key);
 
 private:

+ 13 - 3
Libs/Core/ctkAbstractLibraryFactory.tpp

@@ -125,16 +125,26 @@ ctkAbstractLibraryFactory<BaseClassType, FactoryItemType>::~ctkAbstractLibraryFa
 
 //-----------------------------------------------------------------------------
 template<typename BaseClassType, typename FactoryItemType>
-void ctkAbstractLibraryFactory<BaseClassType, FactoryItemType>::setSymbols(const QStringList& symbols) 
+void ctkAbstractLibraryFactory<BaseClassType, FactoryItemType>::setSymbols(
+  const QStringList& symbols) 
 {
   this->Symbols = symbols; 
 }
 
 //-----------------------------------------------------------------------------
 template<typename BaseClassType, typename FactoryItemType>
-bool ctkAbstractLibraryFactory<BaseClassType, FactoryItemType>::registerLibrary(const QFileInfo& file, QString& key)
+QString ctkAbstractLibraryFactory<BaseClassType, FactoryItemType>::fileNameToKey(
+  const QString& fileName)
 {
-  key = file.fileName();
+  return fileName; 
+}
+
+//-----------------------------------------------------------------------------
+template<typename BaseClassType, typename FactoryItemType>
+bool ctkAbstractLibraryFactory<BaseClassType, FactoryItemType>::registerLibrary(
+  const QFileInfo& file, QString& key)
+{
+  key = this->fileNameToKey(file.fileName());
   // Check if already registered
   if (this->item(key))
     {