]> Creatis software - bbtk.git/blob - kernel/src/bbtkBlackBoxDescriptor.h
*** empty log message ***
[bbtk.git] / kernel / src / bbtkBlackBoxDescriptor.h
1 /*=========================================================================
2                                                                                 
3   Program:   bbtk
4   Module:    $RCSfile: bbtkBlackBoxDescriptor.h,v $
5   Language:  C++
6   Date:      $Date: 2008/04/08 06:59:29 $
7   Version:   $Revision: 1.7 $
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::BlackBoxDescriptor : (abstract) describes of a BlackBox (name, description, author) and is able to create an instance of it.
22  */
23 /**
24  * \class bbtk::BlackBoxDescriptor
25  * \brief (Abstract) Contains information on a BlackBox type (name, description, author, inputs, outputs) and is able to create an instance of it.
26  */
27
28 #ifndef __bbtkBlackBoxDescriptor_h__
29 #define __bbtkBlackBoxDescriptor_h__
30
31 #include "bbtkBlackBoxInputDescriptor.h"
32 #include "bbtkBlackBoxOutputDescriptor.h"
33 #include <map>
34 #include <fstream>
35
36 namespace bbtk
37 {
38
39   class BlackBox;
40   class Package;
41
42   //==========================================================================
43   class BBTK_EXPORT BlackBoxDescriptor
44   {
45   public:
46     /// The type of descriptor of inputs 
47     typedef BlackBoxInputDescriptor InputDescriptor;
48     /// The type of descriptor of outputs 
49     typedef BlackBoxOutputDescriptor OutputDescriptor;
50     /// The type of dictionnary of inputs = map of input descriptors pointers 
51     typedef std::map<std::string, InputDescriptor*> InputDescriptorMapType;
52     /// The type of dictionnary of outputs= map of output descriptors pointers 
53     typedef std::map<std::string, OutputDescriptor*> OutputDescriptorMapType;
54     /// The kinds of black box
55     typedef enum
56     {
57       STANDARD=0,
58       ADAPTOR=1,
59       DEFAULT_ADAPTOR=2,
60       WIDGET_ADAPTOR=3,
61       DEFAULT_WIDGET_ADAPTOR=4
62     }
63     Kind;
64
65     /// Default ctor
66     BlackBoxDescriptor(); 
67     /// Default dtor
68     virtual ~BlackBoxDescriptor();
69     /// Creates an instance with name boxname of the BlackBox
70     /// of which this is the descriptor 
71     virtual BlackBox* CreateInstance(const std::string& boxname) = 0;
72
73     /// Returns the name of the **TYPE** of the black box
74     const std::string& GetTypeName() const { return mTypeName; }
75     
76     /// Returns the description of the BlackBox 
77     const std::string& GetDescription() const { return mDescription; }
78     
79     /// Returns the author(s) of the BlackBox
80     const std::string& GetAuthor() const { return mAuthor; }
81     
82     /// Returns the category(s) of the BlackBox
83     const std::string& GetCategory() const { return mCategory; }
84     
85     /// Returns the Package to which the box belongs
86     Package* GetPackage() { return mPackage; }
87     
88     /// Returns the Package to which the box belongs (const pointer)
89     const Package* GetPackage() const { return mPackage; }
90     
91     /// Returns the kind of box 
92     Kind GetKind() const { return mKind; }
93
94     /// Prints help on the black box
95     virtual void GetHelp(bool full=true) const;
96
97     /// Returns a const ref on the map of input descriptors
98     const InputDescriptorMapType& GetInputDescriptorMap() const 
99       { return mInput; }
100       
101     /// Returns a const ref on the map of output descriptors
102     const OutputDescriptorMapType& GetOutputDescriptorMap() const 
103       { return mOutput; }
104       
105     /// Returns a const pointer on the descriptor of the input of name <name> 
106     const InputDescriptor* GetInputDescriptor(const std::string &name) const;
107
108     /// Returns a const pointer on the descriptor of the output of name <name> 
109     const OutputDescriptor* GetOutputDescriptor(const std::string &name) const;
110
111     /// Sets the name of the **TYPE** of BlackBox
112     void SetTypeName( const std::string& name ) { mTypeName=name; }
113
114     /// Adds the string to the BlackBox description
115     void AddToDescription( const std::string&, bool clear = false );
116     
117     /// Adds the string to the BlackBox author list
118     void AddToAuthor( const std::string&, bool clear = false );
119     
120     /// Adds the string to the BlackBox category list
121     void AddToCategory( const std::string&, bool clear = false );
122     
123     /// Sets the Package to which the box belongs
124     void SetPackage(Package *package) { mPackage = package; }
125     
126     /// Sets the kind of box 
127     void SetKind(Kind kind) { mKind = kind; }
128
129     /* 
130    virtual void InsertHTMLGraph( std::ofstream& s, int detail, int level, 
131                                   const std::string& output_dir = "" ) { }
132     */
133     /// Writes html formatted help into the output file stream. 
134     /// detail and level are used for graphical representation of 
135     /// complex black boxes (see ComplexBlackBox::InsertHTMLGraph)
136     /// output_dir is the directory in which to write auxilliary files 
137     /// (.dot/.png/.cmap)
138     virtual void InsertHtmlHelp ( std::ofstream& s, 
139                                   int detail, int level,
140                                   const std::string& output_dir = "",
141                                   bool relative_link = false );
142
143   protected:
144     /// Adds an input descriptor
145     void AddInputDescriptor( BlackBoxInputDescriptor *d ) 
146     { mInput[d->GetName()] = d; }
147     /// Adds an output descriptor
148     void AddOutputDescriptor( BlackBoxOutputDescriptor *d ) 
149     { mOutput[d->GetName()] = d; }
150
151     //  private:
152     /// The name of the type of black box
153     std::string mTypeName;
154     /// The description of the black box
155     std::string mDescription;
156     /// The author of the black box
157     std::string mAuthor;
158     /// The category of the black box
159     std::string mCategory;    
160     /// The kind of box (standard / adaptor)
161     Kind mKind;
162     /// The Package to which the box belongs
163     Package *mPackage;
164     /// The inputs 
165     InputDescriptorMapType mInput;
166     /// The outputs 
167     OutputDescriptorMapType mOutput;
168     
169   };
170   // class BlackBoxDescriptor
171   //==========================================================================
172
173
174  
175 }
176 // namespace bbtk
177 #endif