]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkExecuter.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkExecuter.cxx
index ddda38ace0fc164b55943fbcf67a6a6bb5fb0751..00a5551123d5100e99f4193beeeaebfc4e83a339 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkExecuter.cxx,v $ $
   Language:  C++
-  Date:      $Date: 2008/01/22 15:02:00 $
-  Version:   $Revision: 1.1 $
+  Date:      $Date: 2008/02/06 09:27:52 $
+  Version:   $Revision: 1.8 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
  *  \brief class Executer: level 0 of script execution (code)
  */
 
-#include "bbtkExecuter.h" 
+#include "bbtkExecuter.h"
 #include "bbtkMessageManager.h"
 #include "bbtkFactory.h"
 #include "bbtkUtilities.h"
-
 #include <fstream>
 
 #ifdef _USE_WXWIDGETS_
@@ -40,7 +39,7 @@ namespace bbtk
 /**
  *  
  */
-  Executer::Executer() 
+  Executer::Executer()
     : mPackage(0),
       mRoot(0),
       mNoExecMode(false),
@@ -48,17 +47,17 @@ namespace bbtk
   {
     //VirtualExec();
     
-    bbtkDebugMessageInc("Core",9,"Executer::Executer()" <<std::endl);
+    bbtkDebugMessageInc("Kernel",9,"Executer::Executer()" <<std::endl);
     Reset();
-    bbtkDebugDecTab("Core",9);
+    bbtkDebugDecTab("Kernel",9);
   } 
-  
+
 /**
  *  
  */
   Executer::~Executer()
   {
-     bbtkDebugMessageInc("Core",9,"Executer::~Executer()" <<std::endl);
+     bbtkDebugMessageInc("Kernel",9,"Executer::~Executer()" <<std::endl);
      if (mRoot) 
      {
         mPackage->UnRegisterBlackBox("workspace");
@@ -68,7 +67,7 @@ namespace bbtk
      {
         GetGlobalFactory()->UnLoadPackage("user");
      }
-     bbtkDebugDecTab("Core",9);
+     bbtkDebugDecTab("Kernel",9);
   }
   
 
@@ -77,7 +76,7 @@ namespace bbtk
  */
   void Executer::Reset()
   {
-    bbtkDebugMessageInc("Core",9,"Executer::Reset()" <<std::endl);
+    bbtkDebugMessageInc("Kernel",9,"Executer::Reset()" <<std::endl);
 
     // The 'user' package must be closed before all other 
     // because box destructors must not be unloaded when bb are deleted!
@@ -104,13 +103,13 @@ namespace bbtk
     mRoot = new ComplexBlackBoxDescriptor("workspace"); //,f);
     mRoot->AddToAuthor("bbi (internal)");
     mRoot->AddToDescription("User's workspace");
-    mCurrent.push_back(CBBDefinition(mRoot,"user"));
+    mOpenDefinition.push_back(CBBDefinition(mRoot,"user"));
     // Register it into the user package
     mPackage->RegisterBlackBox(mRoot);
     // Insert the user package in the factory
     InsertPackage(mPackage);
-
-    bbtkDebugDecTab("Core",9);
+    mOpenPackage.push_back(mPackage);
+    bbtkDebugDecTab("Kernel",9);
   }
   
   /// changes the workspace name
@@ -119,47 +118,86 @@ namespace bbtk
     mPackage->ChangeBlackBoxName( mRoot->GetTypeName(), n );
   }
   
+  void Executer::BeginPackage (const std::string &name)
+  {
+     bbtkDebugMessageInc("Kernel",9,"Executer::BeginPackage(\""<<name<<"\")"
+                        <<std::endl);
+     Package* p;
+     try 
+      {
+       p = GetGlobalFactory()->GetPackage(name);
+      }
+    catch (Exception e)
+      {
+       p = new Package(name,
+                       "",
+                       "",
+                       "",
+                       BBTK_STRINGIFY_SYMBOL(BBTK_VERSION));
+       InsertPackage(p);
+      }
+     mOpenPackage.push_back(p);
+  }
+
+  void Executer::EndPackage()
+  {
+    if (mOpenPackage.size()>1) mOpenPackage.pop_back();
+  }
 
   void Executer::Define (const std::string &name,
                         const std::string &pack,
                         const std::string &scriptfilename)
   {
-    bbtkDebugMessageInc("Core",9,"Executer::Define(\""<<name<<
+    bbtkDebugMessageInc("Kernel",9,"Executer::Define(\""<<name<<
                        ","<<pack<<"\")" 
                         <<std::endl);
 
     ComplexBlackBoxDescriptor* b = new ComplexBlackBoxDescriptor(name);
     b->SetScriptFileName(scriptfilename);
-    mCurrent.push_back( CBBDefinition( b, pack ) );
+    mOpenDefinition.push_back( CBBDefinition( b, pack ) );
     
-    bbtkDebugDecTab("Core",9);
+    bbtkDebugDecTab("Kernel",9);
   }
 
+  /// Sets the file name to use for the current definition
+  /// (Used to set it after the Define command)
+  void Executer::SetCurrentFileName (const std::string &name )
+  {
+    mOpenDefinition.back().box->SetScriptFileName(name);
+  }
+  
+
   void Executer::EndDefine ()
   {
-    bbtkDebugMessageInc("Core",9,"Executer::EndDefine(\""
+    bbtkDebugMessageInc("Kernel",9,"Executer::EndDefine(\""
                         <<Current()->GetTypeName()<<"\")" 
                         <<std::endl);
     // Does current package exist ?
-    std::string pname(mCurrent.back().package);
     Package* p;
-    try 
+    std::string pname(mOpenDefinition.back().package);
+    if (pname.size()>0)
+    {
+      try
       {
-       p = GetGlobalFactory()->GetPackage(pname);
+           p = GetGlobalFactory()->GetPackage(pname);
       }
-    catch (Exception e)
+      catch (Exception e)
       {
-       p = new Package(pname,
+            p = new Package(pname,
                        "",
                        "",
                        "",
                        BBTK_STRINGIFY_SYMBOL(BBTK_VERSION));
-       InsertPackage(p);
+           InsertPackage(p);
       }
-
+    }
+    else
+    {
+          p = mOpenPackage.back();
+    }
     p->RegisterBlackBox(Current());
-    
-    mCurrent.pop_back();
+
+    mOpenDefinition.pop_back();
   }
 
 
@@ -172,7 +210,7 @@ namespace bbtk
 
   /*
     void Executer::Remove (const std::string &nodeName)
-  { 
+  {
     // Current()->RemoveBlackBox(nodeName);
   }
   */    
@@ -185,9 +223,9 @@ namespace bbtk
                           const std::string &nodeTo, 
                           const std::string &inputLabel)
   {
-    Current()->Connect(nodeFrom, outputLabel, nodeTo, inputLabel); 
+    Current()->Connect(nodeFrom, outputLabel, nodeTo, inputLabel);
   }
-   
+
  /**
  *  
  */ 
@@ -258,9 +296,9 @@ namespace bbtk
        }
 #endif
     }
-    
+
     Current()->DefineInput(name,box,input,help);
-        
+
   }
   
  /**
@@ -273,7 +311,7 @@ namespace bbtk
   {
     Current()->DefineOutput(name,box,output,help);
   }
-  
+
   /**
    *  
    */ 
@@ -309,7 +347,6 @@ namespace bbtk
       }
   }
 
-  
   /**
    *  
    */ 
@@ -361,7 +398,10 @@ namespace bbtk
     Current()->AddToAuthor(authorName,Current()==mRoot);
   }
 
-
+  void Executer::Category(const std::string &category)
+  {
+    Current()->AddToCategory(category,Current()==mRoot);
+  }
 
   void Executer::Description(const std::string &d)
   {
@@ -378,7 +418,6 @@ namespace bbtk
     bbtkDecTab("Help",1);
  }
 
-
   std::string Executer::ShowGraph(const std::string &nameblackbox, 
                                  const std::string &detailStr, 
                                  const std::string &levelStr,
@@ -387,7 +426,6 @@ namespace bbtk
                                  const std::string &custom_title,
                                  bool system_display )
   {
-
     int detail =       atoi(detailStr.c_str());
     int level  =       atoi(levelStr.c_str());
 
@@ -413,28 +451,38 @@ namespace bbtk
 
        // Creating directory
        std::string command0("mkdir \"" +directory + "\"");
-       system( command0.c_str() );      
+       system( command0.c_str() );
 
        relative_link = false;
       }
 
+
+    Package* p;
+    try
+    {
+          p = GetGlobalFactory()->GetPackage(nameblackbox);
+    }
+    catch (Exception e)
+    {
+          p = mPackage;
+    }
     // Generating documentation-help of workspace
-    mPackage->SetDocURL(filename_rootHtml);
-    mPackage->SetDocRelativeURL(simplefilename_rootHtml);
+    p->SetDocURL(filename_rootHtml);
+    p->SetDocRelativeURL(simplefilename_rootHtml);
+
+    p->CreateHtmlPage(filename_rootHtml,"bbi","user package",custom_header,custom_title,detail,level,relative_link);
 
-    mPackage->CreateHtmlPage(filename_rootHtml,"bbi","user package",custom_header,custom_title,detail,level,relative_link);
-    
     std::string page = filename_rootHtml;
     /*
     try 
-      {
-       ShowGraphTypes(nameblackbox);
-      }
-    catch (bbtk::Exception a) 
-      {
-       std::cout <<"EXC"<<std::endl;
-       page = ShowGraphInstances(nameblackbox,detail,level,system_display);
-      }
+    {
+         ShowGraphTypes(nameblackbox);
+    }
+    catch (bbtk::Exception a)
+    {
+         std::cout <<"EXC"<<std::endl;
+         page = ShowGraphInstances(nameblackbox,detail,level,system_display);
+    }
     */
     return page;
   }
@@ -446,13 +494,13 @@ namespace bbtk
 
     BlackBox* blackbox=NULL;
     if (nameblackbox==".")
-      {
-       blackbox=Current()->GetPrototype();
-      } 
+    {
+         blackbox=Current()->GetPrototype();
+    }
     else 
-      {
-       blackbox = Current()->GetPrototype()->bbFindBlackBox(nameblackbox);
-      }
+    {
+         blackbox = Current()->GetPrototype()->bbFindBlackBox(nameblackbox);
+    }
     
     std::string page;
 
@@ -510,7 +558,6 @@ namespace bbtk
       }
     return page;
   }
-  
 
 void Executer::ShowRelations(const std::string &nameblackbox, const std::string &detailStr, const std::string &levelStr)
   {
@@ -540,12 +587,12 @@ void Executer::ShowRelations(const std::string &nameblackbox, const std::string
 
   /*
   /// sets the level of message
-  void Executer::Message(const std::string &category, 
+  void Executer::Message(const std::string &kind,
                          const std::string& level)
   {
     int l;
     sscanf(level.c_str(),"%d",&l);
-    bbtk::MessageManager::SetMessageLevel(category,l);
+    bbtk::MessageManager::SetMessageLevel(kind,l);
   }
   */