]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Interface/Object.h
...
[cpPlugins.git] / lib / cpPlugins / Interface / Object.h
index d4436f68db36a6619947081124fd61275e120a21..ef8cab82dfedf6c96feaa84174cd9ef86462c1ca 100644 (file)
@@ -3,7 +3,54 @@
 
 #include <string>
 #include <Pluma/Pluma.hpp>
-#include <cpPlugins/Interface/cpPlugins_Interface_Export.h>
+#include <cpPlugins/cpPlugins_Export.h>
+
+#define ITK_MANUAL_INSTANTIATION
+#include <itkObject.h>
+#include <itkObjectFactory.h>
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_PROVIDER_HEADER_BEGIN( TYPE )                 \
+  class cpPlugins_EXPORT TYPE##Provider               \
+    : public pluma::Provider                                    \
+  {                                                             \
+  private:                                                      \
+    friend class pluma::Pluma;                                  \
+    static const unsigned int PLUMA_INTERFACE_VERSION;          \
+    static const unsigned int PLUMA_INTERFACE_LOWEST_VERSION;   \
+    static const std::string PLUMA_PROVIDER_TYPE;               \
+    std::string plumaGetType( ) const                           \
+    { return( PLUMA_PROVIDER_TYPE ); }                          \
+  public:                                                       \
+    unsigned int getVersion( ) const                            \
+    { return( PLUMA_INTERFACE_VERSION ); }
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_PROVIDER_HEADER_END };
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_PROVIDER_HEADER( TYPE )               \
+  CPPLUGINS_PROVIDER_HEADER_BEGIN( TYPE )               \
+    virtual TYPE::Pointer create( ) const = 0;          \
+  CPPLUGINS_PROVIDER_HEADER_END
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_PROVIDER_SOURCE( TYPE, Version, LowestVersion )       \
+  PLUMA_PROVIDER_SOURCE( TYPE, Version, LowestVersion )
+
+// -------------------------------------------------------------------------
+#define CPPLUGINS_INHERIT_PROVIDER( TYPE )                              \
+  class TYPE##Provider                                                  \
+    : public cpPlugins::Interface::ObjectProvider                       \
+  {                                                                     \
+  public:                                                               \
+    cpPlugins::Interface::Object::Pointer create( ) const               \
+    {                                                                   \
+      TYPE::Pointer a = TYPE::New( );                                   \
+      cpPlugins::Interface::Object::Pointer b = a.GetPointer( );        \
+      return( b );                                                      \
+    }                                                                   \
+  };
 
 namespace cpPlugins
 {
@@ -11,17 +58,41 @@ namespace cpPlugins
   {
     /**
      */
-    class cpPlugins_Interface_EXPORT Object
+    class cpPlugins_EXPORT Object
+      : public itk::Object
     {
     public:
+      typedef Object                          Self;
+      typedef itk::Object                     Superclass;
+      typedef itk::SmartPointer< Self >       Pointer;
+      typedef itk::SmartPointer< const Self > ConstPointer;
+
+    public:
+      itkNewMacro( Self );
+      itkTypeMacro( Object, itkObject );
+
+    public:
+      itkGetConstMacro( ClassName, std::string );
+      itkGetConstMacro( ClassCategory, std::string );
+
+    protected:
       Object( );
       virtual ~Object( );
 
-      virtual std::string GetClassName( ) const;
+    private:
+      // Purposely not implemented
+      Object( const Self& );
+      Self& operator=( const Self& );
+
+    protected:
+      std::string m_ClassName;
+      std::string m_ClassCategory;
     };
 
-    // TODO: doc
-    PLUMA_PROVIDER_HEADER( Object );
+    /**
+     * Plugin provider
+     */
+    CPPLUGINS_PROVIDER_HEADER( Object );
 
   } // ecapseman