]> Creatis software - bbtk.git/blob - kernel/src/bbtkComplexBlackBoxDescriptor.h
4b76df5cef0d371f21b7806cc7f8433849246262
[bbtk.git] / kernel / src / bbtkComplexBlackBoxDescriptor.h
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkComplexBlackBoxDescriptor.h,v $
5   Language:  C++
6   Date:      $Date: 2008/04/08 06:59:30 $
7   Version:   $Revision: 1.3 $
8                                                                                 
9   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10   l'Image). All rights reserved. See Doc/License.txt or
11   http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
12                                                                                 
13      This software is distributed WITHOUT ANY WARRANTY; without even
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15      PURPOSE.  See the above copyright notices for more information.
16                                                                                 
17 =========================================================================*/
18
19 /**
20  *  \file 
21  *  \brief Class bbtk::ComplexBlackBoxDescriptor : describes a ComplexBlackBox (constituents, connections) and is able to create an instance of it.
22  */
23 /**
24  * \class bbtk::ComplexBlackBoxDescriptor
25  * \brief Describes a ComplexBlackBox (constituents, connections) and is able to create an instance of it.
26  */
27
28 #ifndef __bbtkComplexBlackBoxDescriptor_h__
29 #define __bbtkComplexBlackBoxDescriptor_h__
30
31 #include "bbtkBlackBoxDescriptor.h"
32 #include "bbtkComplexBlackBoxInputDescriptor.h"
33 #include "bbtkComplexBlackBoxOutputDescriptor.h"
34 #include "bbtkFactory.h"
35 #include <fstream>
36
37 namespace bbtk
38 {
39
40   class ComplexBlackBox;
41   
42   //==========================================================================
43   class BBTK_EXPORT ComplexBlackBoxDescriptor : public bbtk::BlackBoxDescriptor
44   {
45   public:
46     friend class ComplexBlackBox;
47     /// Default ctor with name 
48     ComplexBlackBoxDescriptor(const std::string& name); 
49     /// Default dtor
50     ~ComplexBlackBoxDescriptor();
51
52     /// Sets the factory used 
53     void SetFactory(Factory* f) { mFactory = f; }
54     /// Gets the factory used
55     Factory* GetFactory() { return mFactory; }
56     /// Gets the factory used (const)
57     const Factory* GetFactory() const { return mFactory; }
58
59     /// Creates an instance of name <name> of the ComplexBlackBox of which this is the descriptor 
60     virtual BlackBox* CreateInstance(const std::string& name);
61
62     /// Adds a black box to the complex box
63     /// Needs a factory set !
64     void Add ( const std::string& type,
65                const std::string& name
66                ); 
67     /// Connects two black boxes of the complex box
68     /// Needs a factory set !
69      void Connect ( const std::string& from,
70                    const std::string& output,
71                    const std::string& to,
72                    const std::string& input
73                    ); 
74     /// Defines an input of the complex box
75     void DefineInput ( const std::string& name,
76                        const std::string& box,
77                        const std::string& input,
78                        const std::string& help);
79     /// Defines an output of the complex box
80     void DefineOutput ( const std::string& name,
81                        const std::string& box,
82                        const std::string& output,
83                        const std::string& help);
84  
85  
86     /// Sets the name of the script file from which it is defined
87     void SetScriptFileName(const std::string& n) { mScriptFileName = n; }
88     /// Gets the name of the script file from which it is defined
89     std::string GetScriptFileName() const { return mScriptFileName; }
90    
91     /// 
92     void AddToExecutionList( const std::string& box );
93
94     ComplexBlackBox* GetPrototype() { return mPrototype; }
95     void PrintBlackBoxes(); 
96    
97     /// Prints help on the black box
98     void GetHelp(bool full=true) const;
99  
100     /// Writes html formatted help into the output file stream. 
101     /// detail and level are used for graphical representation of 
102     /// complex black boxes (see ComplexBlackBox::InsertHTMLGraph)
103     /// output_dir is the directory in which to write auxilliary files 
104     /// (.dot/.png/.cmap)
105     void InsertHtmlHelp ( std::ofstream& s, 
106                           int detail, int level,
107                           const std::string& output_dir = "",
108                           bool relative_link = false);
109
110     /// Generates a png image representing the pipeline graph of the 
111     /// complex box and writes html code to insert it 
112     /// into the output file stream. 
113     /// detail : 
114     /// level : depth of nested complex boxes graph development 
115     /// (0:only this box level 
116     /// output_dir is the directory in which to write the files 
117     /// (.dot/.png/.cmap)
118     void InsertHTMLGraph( std::ofstream& s, 
119                           int detail, int level, 
120                           const std::string& output_dir = "",
121                           bool relative_link = false );
122     
123
124
125   private:
126     /// Default ctor is private (must have name and factory)
127     ComplexBlackBoxDescriptor() {}
128     /// The factory used
129     Factory* mFactory;
130     /// The complex box in which boxes and connections are stored
131     ComplexBlackBox* mPrototype;
132     /// The name of the script file from which it was created
133     std::string mScriptFileName;
134     
135   };
136   // class ComplexBlackBoxDescriptor
137   //==========================================================================
138
139
140  
141 }
142 // namespace bbtk
143 #endif