1 /*=========================================================================
4 Module: $RCSfile: bbtkBlackBoxDescriptor.h,v $
6 Date: $Date: 2008/04/08 06:59:29 $
7 Version: $Revision: 1.7 $
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.
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.
17 =========================================================================*/
21 * \brief Class bbtk::BlackBoxDescriptor : (abstract) describes of a BlackBox (name, description, author) and is able to create an instance of it.
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.
28 #ifndef __bbtkBlackBoxDescriptor_h__
29 #define __bbtkBlackBoxDescriptor_h__
31 #include "bbtkBlackBoxInputDescriptor.h"
32 #include "bbtkBlackBoxOutputDescriptor.h"
42 //==========================================================================
43 class BBTK_EXPORT BlackBoxDescriptor
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
61 DEFAULT_WIDGET_ADAPTOR=4
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;
73 /// Returns the name of the **TYPE** of the black box
74 const std::string& GetTypeName() const { return mTypeName; }
76 /// Returns the description of the BlackBox
77 const std::string& GetDescription() const { return mDescription; }
79 /// Returns the author(s) of the BlackBox
80 const std::string& GetAuthor() const { return mAuthor; }
82 /// Returns the category(s) of the BlackBox
83 const std::string& GetCategory() const { return mCategory; }
85 /// Returns the Package to which the box belongs
86 Package* GetPackage() { return mPackage; }
88 /// Returns the Package to which the box belongs (const pointer)
89 const Package* GetPackage() const { return mPackage; }
91 /// Returns the kind of box
92 Kind GetKind() const { return mKind; }
94 /// Prints help on the black box
95 virtual void GetHelp(bool full=true) const;
97 /// Returns a const ref on the map of input descriptors
98 const InputDescriptorMapType& GetInputDescriptorMap() const
101 /// Returns a const ref on the map of output descriptors
102 const OutputDescriptorMapType& GetOutputDescriptorMap() const
105 /// Returns a const pointer on the descriptor of the input of name <name>
106 const InputDescriptor* GetInputDescriptor(const std::string &name) const;
108 /// Returns a const pointer on the descriptor of the output of name <name>
109 const OutputDescriptor* GetOutputDescriptor(const std::string &name) const;
111 /// Sets the name of the **TYPE** of BlackBox
112 void SetTypeName( const std::string& name ) { mTypeName=name; }
114 /// Adds the string to the BlackBox description
115 void AddToDescription( const std::string&, bool clear = false );
117 /// Adds the string to the BlackBox author list
118 void AddToAuthor( const std::string&, bool clear = false );
120 /// Adds the string to the BlackBox category list
121 void AddToCategory( const std::string&, bool clear = false );
123 /// Sets the Package to which the box belongs
124 void SetPackage(Package *package) { mPackage = package; }
126 /// Sets the kind of box
127 void SetKind(Kind kind) { mKind = kind; }
130 virtual void InsertHTMLGraph( std::ofstream& s, int detail, int level,
131 const std::string& output_dir = "" ) { }
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 );
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; }
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
158 /// The category of the black box
159 std::string mCategory;
160 /// The kind of box (standard / adaptor)
162 /// The Package to which the box belongs
165 InputDescriptorMapType mInput;
167 OutputDescriptorMapType mOutput;
170 // class BlackBoxDescriptor
171 //==========================================================================