--- /dev/null
+/*=========================================================================
+
+ Program: bbtk
+ Module: $RCSfile: bbtkTranscriptor.h,v $ $
+ Language: C++
+ Date: $Date: 2008/01/22 17:00:17 $
+ Version: $Revision: 1.1 $
+
+ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
+ l'Image). All rights reserved. See Doc/License.txt or
+ http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+/**
+ * \file
+ * \brief class Transcriptor: level 0 of script C++ translation (header)
+ */
+/**
+ * \class bbtk::Transcriptor
+ * \brief class Transcriptor: level 0 of script C++ translation
+ */
+
+#ifndef __bbtkTranscriptor_h__
+#define __bbtkTranscriptor_h__
+
+#include "bbtkVirtualExec.h"
+
+#include <iostream>
+
+namespace bbtk
+{
+
+ class /*BBTK_EXPORT*/ Transcriptor : public VirtualExec
+ {
+
+ public:
+
+ /// Constructor
+ Transcriptor(std::string filename);
+
+ /// Destructor
+ ~Transcriptor( );
+
+ /// Sets the inputs of the workspace :
+ void SetInputs(const std::map<std::string,std::string>& m) { mInputs = m; }
+
+ /// Puts the executer in "no exec" mode,
+ /// which creates but does not execute pipelines
+
+ //void SetNoExecMode(bool b) { mNoExecMode = b; }
+ void SetNoExecMode(bool b)
+ {
+ m_Fp << "e->SetNoExecMode(true);" << std::endl;
+ }
+
+ bool GetNoExecMode() const { return mNoExecMode; }
+ /*
+ bool GetNoExecMode() const
+ {
+ // cannot compile, since ethos is 'const' !
+ //m_Fp << "e->GetNoExecMode(true);" << std::endl;
+ }
+ */
+ /// Sets the mode of dialog of the executer for Root inputs
+ void SetDialogMode(DialogModeType t) { mDialogMode = t; }
+
+ /// Starts the definition of a new ComplexBlackBox in package pack
+ /// scriptfilename is the file from which the def is read
+ void Define (const std::string &name,
+ const std::string& pack,
+ const std::string &scriptfilename);
+
+ /// End the definition of a ComplexBlackBox
+ void EndDefine ();
+
+ /// Creates a new black box in current complex box
+ void Create ( const std::string& boxType, const std::string& boxName);
+
+ /// Destroys a black box
+ void Destroy (const std::string &boxName);
+
+ /// Connects the output boxOutput to the input boxInput
+ void Connect (const std::string &boxfrom,
+ const std::string &output,
+ const std::string &boxto,
+ const std::string &input);
+
+ /// Updates the box
+ /// would 'Execute' be more meaningfull ?
+ void Update (const std::string &box);
+
+ /// Defines an input of the current complex box
+ void DefineInput (const std::string &name,
+ const std::string &box,
+ const std::string &input,
+ const std::string &help);
+
+ /// Defines an output of the current complex box
+ void DefineOutput (const std::string &name,
+ const std::string &box,
+ const std::string &output,
+ const std::string &help);
+
+ /// sets the input of the box with the value
+ void Set (const std::string &box,
+ const std::string &input,
+ const std::string &value);
+
+ /// gets the output of the box
+ std::string Get (const std::string &box,
+ const std::string &output);
+
+ /// changes the workspace name
+ void SetWorkspaceName( const std::string& n );
+
+ ///Adds the authorName to the Box's author list
+ void Author(const std::string &authorName);
+
+ /// The description string which explains what does the ComplexBox
+ void Description(const std::string & d);
+
+ /// prints the list off the boxes of the current box
+ void PrintBoxes();
+
+ /// Generate a HTML with a gif file with the actual pipeline (Graphviz-dot needed). Returns the file path
+ std::string ShowGraph(const std::string &nameblackbox,
+ const std::string &detailStr,
+ const std::string &levelStr,
+ const std::string &output_file,
+ const std::string &custom_header,
+ const std::string &custom_title,
+ bool system_display = true);
+
+ /// Generate a HTML with a gif file with the actual pipeline (Graphviz-dot needed). Returns the file path
+ std::string ShowGraphInstances(const std::string &nameblackbox, int detail, int level, bool system_display=true);
+
+ /// Description of the actual pipeline
+ void ShowRelations(const std::string &nameblackbox, const std::string &detailStr, const std::string &levelStr);
+
+ void Reset();
+
+ // static const std::string& GetObjectDescription()
+ // { static std::string s("Executer"); return s; }
+
+ protected:
+
+ private:
+
+ /// Gets the current working black box
+ ComplexBlackBoxDescriptor* Current() { return mCurrent.back().box; }
+
+ /// Returns true when we are inside a define/endefine block
+ // bool InDefinitionBlock() { return (mCurrent.size()>1); }
+
+ //==================================================================
+ // ATTRIBUTES
+
+ /// The factory used
+ // Factory* mFactory;
+
+ /// The Root Package
+ Package* mPackage;
+
+ /// The root ComplexBlackBox, in which operations are done when outside a define/endefine block
+ /// Its name in bbi is 'workspace'
+ ComplexBlackBoxDescriptor* mRoot;
+
+ /// Struct that stores info on user defined complex black boxes
+ struct CBBDefinition
+ {
+ ComplexBlackBoxDescriptor* box;
+ std::string package;
+ CBBDefinition(ComplexBlackBoxDescriptor* d, const std::string& p )
+ : box(d), package(p) {}
+ };
+
+ /// The stack of current working ComplexBlackBox
+ /// (is a stack for nested definitions)
+ /// only contains the root when outside a define/endefine block
+ std::deque<CBBDefinition> mCurrent;
+
+ /// flag which is true when we are inside a Define/EndDefine block
+ // bool mDefineFlag;
+
+ /// The input values of the Root ComplexBlackBox
+ std::map<std::string,std::string> mInputs;
+
+ /// no exec mode flag
+ bool mNoExecMode;
+
+ /// Dialog mode
+ DialogModeType mDialogMode;
+
+ /// File Pointer, to hold generated C++ code.
+ // std::ofstream *m_Fp;
+ std::ofstream m_Fp;
+ };
+}
+#endif