/*========================================================================= Program: bbtk Module: $RCSfile: bbtkComplexBlackBoxDescriptor.h,v $ Language: C++ Date: $Date: 2008/01/22 15:02:00 $ 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 bbtk::ComplexBlackBoxDescriptor : describes a ComplexBlackBox (constituents, connections) and is able to create an instance of it. */ /** * \class bbtk::ComplexBlackBoxDescriptor * \brief Describes a ComplexBlackBox (constituents, connections) and is able to create an instance of it. */ #ifndef __bbtkComplexBlackBoxDescriptor_h__ #define __bbtkComplexBlackBoxDescriptor_h__ #include "bbtkBlackBoxDescriptor.h" #include "bbtkComplexBlackBoxInputDescriptor.h" #include "bbtkComplexBlackBoxOutputDescriptor.h" #include "bbtkFactory.h" #include namespace bbtk { class ComplexBlackBox; //========================================================================== class BBTK_EXPORT ComplexBlackBoxDescriptor : public bbtk::BlackBoxDescriptor { public: /// Default ctor with name ComplexBlackBoxDescriptor(const std::string& name); //, Factory* f); /// Default dtor ~ComplexBlackBoxDescriptor(); /// Creates an instance of name of the ComplexBlackBox of which this is the descriptor virtual BlackBox* CreateInstance(const std::string& name); /// Adds a black box to the complex box void Add ( const std::string& type, const std::string& name ); /// Connects two black boxes of the complex box void Connect ( const std::string& from, const std::string& output, const std::string& to, const std::string& input ); /// Defines an input of the 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 complex box void DefineOutput ( const std::string& name, const std::string& box, const std::string& output, const std::string& help); /// Sets the name of the script file from which it is defined void SetScriptFileName(const std::string& n) { mScriptFileName = n; } /// Gets the name of the script file from which it is defined std::string GetScriptFileName() const { return mScriptFileName; } /// void AddToExecutionList( const std::string& box ); ComplexBlackBox* GetPrototype() { return mPrototype; } void PrintBlackBoxes(); /// Prints help on the black box void GetHelp(bool full=true) const; /// Writes html formatted help into the output file stream. /// detail and level are used for graphical representation of /// complex black boxes (see ComplexBlackBox::InsertHTMLGraph) /// output_dir is the directory in which to write auxilliary files /// (.dot/.png/.cmap) void InsertHtmlHelp ( std::ofstream& s, int detail, int level, const std::string& output_dir = "", bool relative_link = false); /// Generates a png image representing the pipeline graph of the /// complex box and writes html code to insert it /// into the output file stream. /// detail : /// level : depth of nested complex boxes graph development /// (0:only this box level /// output_dir is the directory in which to write the files /// (.dot/.png/.cmap) void InsertHTMLGraph( std::ofstream& s, int detail, int level, const std::string& output_dir = "", bool relative_link = false ); private: /// Default ctor is private (must have name and factory) ComplexBlackBoxDescriptor() {} /// The complex box in which boxes and connections are stored ComplexBlackBox* mPrototype; /// The name of the script file from which it was created std::string mScriptFileName; }; // class ComplexBlackBoxDescriptor //========================================================================== } // namespace bbtk #endif