]> Creatis software - bbtk.git/blobdiff - kernel/appli/bbfy/bbfy.cpp
New widget pipeline : progressing ...
[bbtk.git] / kernel / appli / bbfy / bbfy.cpp
index 0d7804033d4b412ba4c4c24de1f68afda858c7b1..c22be3230c127a088389c5f7c3401acecee11f9d 100644 (file)
@@ -20,8 +20,8 @@ public:
 //==========================================================================
 
 const std::string itkImageToImageFilterString = "ITK_ImageToImageFilter";
-const std::string vtkImageAlgorithmString = "VTK_ImageAlgorithm";
-const std::string vtkPolyDataAlgorithmString = "VTK_PolyDataAlgorithm";
+const std::string vtkImageAlgorithmString     = "VTK_ImageAlgorithm";
+const std::string vtkPolyDataAlgorithmString  = "VTK_PolyDataAlgorithm";
 
 //==========================================================================
 class bbfy
@@ -87,6 +87,7 @@ private:
   {
     std::string name;
     std::string type;
+    std::string nature;
     std::string descr;
     std::string special;
     std::string generic_type;
@@ -276,19 +277,21 @@ void bbfy::ParseXML()
     }
 
   // UserConstructor body
-  if (BB.nChildNode("userconstructor"))
+  if (BB.nChildNode("constructor"))
     {
-      bbtk::GetTextOrClear(BB.getChildNode("userconstructor"),mUserConstructor);
+      bbtk::GetTextOrClear(BB.getChildNode("constructor"),mUserConstructor);
     }
+    
   // UserCopyConstructor body
-  if (BB.nChildNode("usercopyconstructor"))
+  if (BB.nChildNode("copyconstructor"))
     {
-      bbtk::GetTextOrClear(BB.getChildNode("usercopyconstructor"),mUserCopyConstructor);
+      bbtk::GetTextOrClear(BB.getChildNode("copyconstructor"),mUserCopyConstructor);
     }
+    
   // UserDestructor body
-  if (BB.nChildNode("userdestructor"))
+  if (BB.nChildNode("destructor"))
     {
-      bbtk::GetTextOrClear(BB.getChildNode("userdestructor"),mUserDestructor);
+      bbtk::GetTextOrClear(BB.getChildNode("destructor"),mUserDestructor);
     }
  
     // Template parameters
@@ -361,6 +364,11 @@ void bbfy::ParseXML()
          io.special =  n.getAttribute("special");  
        }
 
+      if (n.isAttributeSet("nature")) 
+       {
+         io.nature =  n.getAttribute("nature");  
+       }
+
       if (n.isAttributeSet("generic_type")) 
        {
          io.generic_type =  n.getAttribute("generic_type");  
@@ -395,6 +403,11 @@ void bbfy::ParseXML()
          io.special =  n.getAttribute("special");  
        }
 
+      if (n.isAttributeSet("nature")) 
+       {
+         io.nature =  n.getAttribute("nature");  
+       }
+
       if (n.isAttributeSet("generic_type")) 
        {
          io.generic_type =  n.getAttribute("generic_type");  
@@ -410,6 +423,7 @@ void bbfy::ParseXML()
      {
        bbtk::GetTextOrClear(BB.getChildNode("process"),mProcess);
      }
+     
   // CreateWidget
   // createwidget tag given ?
    if (BB.nChildNode("createwidget"))
@@ -481,6 +495,15 @@ void bbfy::CreateHeader()
   if (mGeneric) mFile << "#include \"bbitkImage.h\"\n";
   mFile << "\n";
 
+  if (mType == itkImageToImageFilter )
+    {
+      mFile << "#include \"bbtkItkBlackBoxMacros.h\"\n";
+    }
+  else if ( (mType == vtkImageAlgorithm) ||
+           (mType == vtkPolyDataAlgorithm) )
+    {
+      mFile << "#include \"bbtkVtkBlackBoxMacros.h\"\n";
+    }
   // Namespace
   BeginNamespace();
 
@@ -495,7 +518,6 @@ void bbfy::CreateHeader()
   // Class declaration and parents
   mFile << "class /*BBTK_EXPORT*/ "<<mName<<"\n";
   mFile << " : \n";
-  mFile << "   public "<<mParentBlackBox;
 
   /*
   if (mBB.nChildNode("inherits"))
@@ -515,38 +537,47 @@ void bbfy::CreateHeader()
 
   if (mType == itkImageToImageFilter )
     {
-      mFile << ",\n   public " << mItkParent <<"\n";
+      mFile << "   public " << mItkParent <<",\n";
     }
   else if ( (mType == vtkImageAlgorithm) ||
            (mType == vtkPolyDataAlgorithm) )
     {
-      mFile << ",\n   public " << mVtkParent <<"\n";
-    }
-  else 
-    {
-      mFile << "\n";
+      mFile << "   public " << mVtkParent <<",\n";
     }
 
+  mFile << "   public "<<mParentBlackBox << "\n";
+
   mFile << "{\n";
 
   // Interface
-  mFile << "  BBTK_USER_BLACK_BOX_INTERFACE("
-       << mName << ","
-       << mParentBlackBox << ");\n";
 
-  // typedef on itkfilter
+  // ITK 
   if (mType == itkImageToImageFilter)
     {
-      mFile << "  typedef " <<mItkParent <<" itkParent;"<<std::endl;
-      mFile << "  void bbDelete() { itkParent::UnRegister(); }"<<std::endl;
+      mFile << "  BBTK_ITK_BLACK_BOX_INTERFACE("
+           << mName << ","
+           << mParentBlackBox << ","
+           << mItkParent 
+           << ");\n";
     }
-  // typedef on itkfilter
-  if ( (mType == vtkImageAlgorithm) ||
+  // VTK
+  else if ( (mType == vtkImageAlgorithm) ||
        (mType == vtkPolyDataAlgorithm) )
     {
-      mFile << "  typedef " <<mVtkParent <<" vtkParent;"<<std::endl;
-      mFile << "  void bbDelete() { vtkParent::Delete(); }"<<std::endl;
+      mFile << "  BBTK_VTK_BLACK_BOX_INTERFACE("
+           << mName << ","
+           << mParentBlackBox << ","
+           << mVtkParent 
+           << ");\n";
+    }
+  // Default
+  else 
+    {
+      mFile << "  BBTK_BLACK_BOX_INTERFACE("
+           << mName << ","
+           << mParentBlackBox << ");\n";
     }
+
   for (i=mTypedef.begin(); i!=mTypedef.end(); ++i) 
     {
       mFile << *i <<"\n";
@@ -558,7 +589,7 @@ void bbfy::CreateHeader()
 
   mFile << "virtual void bbUserConstructor();"<<std::endl;
   mFile << "/// User callback called in the box copy constructor"<<std::endl;
-  mFile << "virtual void bbUserCopyConstructor();"<<std::endl;
+  mFile << "virtual void bbUserCopyConstructor(bbtk::BlackBox::Pointer);"<<std::endl;
   mFile << "/// User callback called in the box destructor"<<std::endl;
   mFile << "virtual void bbUserDestructor();"<<std::endl;
   mFile << "//=================================================================="<<std::endl; 
@@ -580,7 +611,6 @@ void bbfy::CreateHeader()
       else if (ioi->special=="itk input")
        {
          mFile << "  BBTK_DECLARE_ITK_INPUT(" 
-               << "itkParent,"
                << ioi->name
                << ","
                << ioi->type
@@ -590,7 +620,6 @@ void bbfy::CreateHeader()
        {
          if (mType == vtkImageAlgorithm) {
          mFile << "  BBTK_DECLARE_VTK_IMAGE_ALGORITHM_INPUT(" 
-               << "vtkParent,"
                << ioi->name
                << ","
                << ioi->type
@@ -598,7 +627,6 @@ void bbfy::CreateHeader()
          } 
          else if (mType == vtkPolyDataAlgorithm) {
          mFile << "  BBTK_DECLARE_POLY_DATA_ALGORITHM_INPUT(" 
-               << "vtkParent,"
                << ioi->name
                << ","
                << ioi->type
@@ -608,7 +636,6 @@ void bbfy::CreateHeader()
       else if (ioi->special=="itk parameter")
        {
          mFile << "  BBTK_DECLARE_ITK_PARAM(" 
-               << "itkParent,"
                << ioi->name
                << ","
                << ioi->type
@@ -617,7 +644,6 @@ void bbfy::CreateHeader()
       else if (ioi->special=="vtk parameter")
        {
          mFile << "  BBTK_DECLARE_VTK_PARAM(" 
-               << "vtkParent,"
                << ioi->name
                << ","
                << ioi->type
@@ -648,7 +674,6 @@ void bbfy::CreateHeader()
       else if (ioi->special=="itk output")
        {
          mFile << "  BBTK_DECLARE_ITK_OUTPUT(" 
-               << "itkParent,"
                << ioi->name
                << ","
                << ioi->type
@@ -657,7 +682,6 @@ void bbfy::CreateHeader()
       else if (ioi->special=="vtk output")
        {
          mFile << "  BBTK_DECLARE_VTK_OUTPUT(" 
-               << "vtkParent,"
                << ioi->name
                << ","
                << ioi->type
@@ -674,7 +698,6 @@ void bbfy::CreateHeader()
        }
     }
   
-
   // Process
   if ((mType == STD)||(mProcess.size()))
     {
@@ -683,28 +706,26 @@ void bbfy::CreateHeader()
     }
   else if (mType == itkImageToImageFilter)
     {   
-      mFile << "  BBTK_PROCESS(itkParent::Update);\n" ;
+      mFile << "  BBTK_ITK_PROCESS();\n" ;
     }
   else if ((mType == vtkImageAlgorithm) ||
           (mType == vtkPolyDataAlgorithm) )
 
     {   
-      mFile << "  BBTK_PROCESS(vtkParent::Update);\n" ;
+      mFile << "  BBTK_VTK_PROCESS();\n" ;
     }
 
   // CreateWidget
   if (mIsWidget) 
     {
        mFile << "  BBTK_CREATE_WIDGET(CreateWidget);\n" ;
-       mFile << "  void CreateWidget();\n";
+       mFile << "  void CreateWidget(wxWindow*);\n";
     }
 
 
   // EO black box declaration
   mFile << "};\n\n";
 
-
-
   // BO black box description
   if (mTemplateParam.size()==0)
     {
@@ -755,7 +776,8 @@ void bbfy::CreateHeader()
          mFile << "BBTK_INPUT(";
        } 
       mFile << mName << "," << ioi->name << ",\""
-           << ioi->descr << "\"," <<  ioi->type <<");\n";
+           << ioi->descr << "\"," <<  ioi->type << ",\"" 
+           << ioi->nature<<"\");\n";
     }
   
   // Outputs
@@ -770,7 +792,8 @@ void bbfy::CreateHeader()
          mFile << "BBTK_OUTPUT(";
        } 
       mFile << mName << "," << ioi->name << ",\""
-           << ioi->descr << "\"," <<  ioi->type <<");\n";
+           << ioi->descr << "\"," <<  ioi->type << ",\"" 
+           << ioi->nature<<"\");\n";
     }
   
   // EO black box description
@@ -833,7 +856,7 @@ void bbfy::WriteGenericITKFilterHeader()
   mFile << "{\n";
 
   // Interface
-  mFile << "  BBTK_USER_BLACK_BOX_INTERFACE("
+  mFile << "  BBTK_BLACK_BOX_INTERFACE("
        << mName << "Generic,bbtk::AtomicBlackBox);\n";
 
   // Inputs
@@ -978,14 +1001,14 @@ void bbfy::CreateCode()
   if (mTemplateParam.size()>0) 
     {
       // Implementation
-      mFile << "BBTK_USER_BLACK_BOX_TEMPLATE_IMPLEMENTATION("
+      mFile << "BBTK_BLACK_BOX_TEMPLATE_IMPLEMENTATION("
            << mName << ","  
            << mParentBlackBox << ");\n";
      
       if (mGeneric) 
        {       
          // Implementation
-         mFile << "BBTK_USER_BLACK_BOX_IMPLEMENTATION("
+         mFile << "BBTK_BLACK_BOX_IMPLEMENTATION("
                << mName << "Generic,bbtk::AtomicBlackBox);\n";
          // Package
          mFile << "BBTK_ADD_BLACK_BOX_TO_PACKAGE("
@@ -1002,7 +1025,7 @@ void bbfy::CreateCode()
            << mName << ")\n";
 
       // Implementation
-      mFile << "BBTK_USER_BLACK_BOX_IMPLEMENTATION("
+      mFile << "BBTK_BLACK_BOX_IMPLEMENTATION("
            << mName << ","  
            << mParentBlackBox << ");\n"; 
     }
@@ -1016,20 +1039,21 @@ void bbfy::CreateCode()
   // CreateWidget
   if (mIsWidget)
     {
-      mFile << "void "<<mName<<"::CreateWidget()\n{\n";
+      mFile << "void "<<mName<<"::CreateWidget(wxWindow* parent)\n{\n";
       mFile << mCreateWidget << "\n";
       mFile << "}\n";
     }
-  
 
   // User constr / copy constr / destr implementation
   mFile <<"void "<<mName<<"::bbUserConstructor()"<<std::endl;
   mFile << "{"<<std::endl;
   //mFile<<"bbtkDebugMessage(\"Kernel\",9,\""<<mName<<::bbUserConstructor()"<<std::endl);"<<std::endl;
+  
   mFile << mUserConstructor << std::endl;
   mFile << "}" << std::endl;
 
-  mFile <<"void "<<mName<<"::bbUserCopyConstructor()"<<std::endl;
+  mFile <<"void "<<mName<<"::bbUserCopyConstructor(bbtk::BlackBox::Pointer)"
+       <<std::endl;
   mFile << "{"<<std::endl;
   //mFile<<"bbtkDebugMessage(\"Kernel\",9,\""<<mName<<::bbUserCopyConstructor()"<<std::endl);"<<std::endl;
   mFile << mUserCopyConstructor << std::endl;