MeVisLab Toolbox Reference
mlField.h
Go to the documentation of this file.
1/*************************************************************************************
2**
3** Copyright 2007, MeVis Medical Solutions AG
4**
5** The user may use this file in accordance with the license agreement provided with
6** the Software or, alternatively, in accordance with the terms contained in a
7** written agreement between the user and MeVis Medical Solutions AG.
8**
9** For further information use the contact form at https://www.mevislab.de/contact
10**
11**************************************************************************************/
12
13#ifndef ML_FIELD_H
14#define ML_FIELD_H
15
19
20// ML-includes
21#include "mlInitSystemML.h"
22#include "mlRuntimeSubClass.h"
23#include "mlFieldSensor.h"
24
25#include <string>
26#include <vector>
27
29
30class OutputConnectorField;
31class BaseField;
32class SoNodeField;
33class NotifyField;
34class FieldContainer;
35
36//-------------------------------------------------------------------------
71//-------------------------------------------------------------------------
73{
74
75public:
76
77 //---------------------------------------------------------------------------
80 //---------------------------------------------------------------------------
82 Field(const std::string& name = std::string());
83
85 virtual ~Field();
87
88 //---------------------------------------------------------------------------
91 //---------------------------------------------------------------------------
92
94 FieldContainer* getFieldContainer() const { return _fieldContainer; }
95
97
98 //----------------------------------------------------------
101 //----------------------------------------------------------
103 const std::string& getName() const { return _name; }
104
106 void setName(const std::string& name) { _name = name; }
107
110 std::string getFullName() const;
112
113 //----------------------------------------------------------
116 //----------------------------------------------------------
118 bool isOutputOnly() const;
119
121 void setOutputOnly(bool outputOnly = true);
123
124 //----------------------------------------------------------
127 //----------------------------------------------------------
128
131 virtual void setStringValue(const std::string& value) =0;
132
139 virtual std::string getStringValue() const =0;
140
144 virtual MLint isValidValue(){ return 1; }
145
146
151
153 MLint getCStringValueSize(){ return static_cast<MLint>(getStringValue().size()); }
155
156
157 //------------------------------------------------------------------------
160 //------------------------------------------------------------------------
163
166
169
178
183
186
189
192
195
198
201
204
206 Field* getSourceField(size_t index);
207
222 virtual void touch(FieldSensor::Strength strength=FieldSensor::CHANGED);
223
228
232
240
247
254
255protected:
259
262
265
269 virtual void setValueFromField(const Field& field);
270
272 std::string _name;
273
275 std::vector <FieldSensor*> _sensors;
276
279 std::vector <Field*> _destinationFields;
280
283 std::vector <Field*> _sourceFields;
284
287
289 struct Flags {
291 unsigned int insideTouch:1;
292 unsigned int notifyAttachmentsFlag:1;
293 unsigned int outputOnly:1;
294 };
295
297
300
301private:
302 friend class FieldContainer;
303
305 void setFieldContainer(FieldContainer* container) { _fieldContainer = container; }
306
307 // disallow copying
308 Field(const Field&) {}
309 Field& operator=(const Field&) { return *this; }
310
313};
314
316
317
318//-----------------------------------------------------------------------------------
319// Stream output for std::ostream
320//-----------------------------------------------------------------------------------
321namespace std
322{
323
325 MLEXPORT std::ostream& operator<<(std::ostream& s, const ML_NAMESPACE::Field &v);
326
327}
328
329
330#endif // __mlField_H
331
332
333
Field to encapsulate a pointer to an ML base object.
Definition mlFields.h:797
Defines the class FieldContainer to encapsulate a vector of fields for (see class Field).
Class to define and to manage field sensors.
Strength
Enumeration type describing the strength of notifications.
Base class for all fields used in the ML.
Definition mlField.h:73
void setName(const std::string &name)
Sets the name of field. Should be called only once after or while construction.
Definition mlField.h:106
virtual std::string getStringValue() const =0
Returns the value of the field as string value.
size_t getNumDestinationFields()
Returns the number of destination fields which could receive notifications or value sets.
Field(const std::string &name=std::string())
Constructor: Creates a field with name.
static bool areNotificationsEnabledGlobally()
Returns whether the notification mechanism for all fields (e.g., when field values are set) is enable...
void attachField(Field *targetField, bool propagateValueOnConnect)
Connects this class instance with the target field targetField.
Flags _flags
Definition mlField.h:296
void detachFieldSensor(FieldSensor *sensor)
Detaches the field sensor sensor of this class instance in both directions.
FieldContainer * _fieldContainer
The owning field container.
Definition mlField.h:286
MLint getCStringValueSize()
Returns the length of the character string of the string value of the field.
Definition mlField.h:153
void setOutputOnly(bool outputOnly=true)
Mark field as a pure output field that is never read by its module.
Field * getDestinationField(size_t index)
Returns destination field at index. Returns NULL if index is out of range.
void attachField(OutputConnectorField *targetField)
This calls attachField(targetField, false).
std::vector< Field * > _destinationFields
List of (target) fields which shall be set to the value of this field or which shall be notified only...
Definition mlField.h:279
void copyCStringValue(char *valueBuffer, MLint bufferSize)
Copies the value of the field (as character string) into the specified buffer valueBuffer.
std::vector< Field * > _sourceFields
List of (source) fields, which will notify this field or which will copy their value to this field.
Definition mlField.h:283
void attachField(BaseField *targetField)
size_t getNumSourceFields()
Returns the number of source fields which could send notifications or value sets.
std::string _name
The name of this field.
Definition mlField.h:272
virtual ~Field()
Destructor: Destroy field and remove all connection to fields an sensors.
void detachAllFields()
Disconnects all source and target fields of this instance in both directions.
static void enableNotificationsGlobally(bool flag)
Enables or disables globally the notification mechanism for all fields and field sensors when field v...
void detachDestinationFields()
Disconnects all target fields of this instance in both directions.
static MLint & enableNotificationsCounterState()
Provides read/write access to the current counter state (see enableNotificationsGlobally(bool) ).
virtual MLint isValidValue()
Returns true (=1) if the field's value is valid; otherwise false (=0) is returned.
Definition mlField.h:144
virtual void setStringValue(const std::string &value)=0
Set field value as string value.
void detachField(Field *targetField)
Disconnects connections between target field targetField and this instance.
bool isOutputOnly() const
Returns if this field is marked as pure output field.
void detachFieldSensors()
Detaches all field sensors of this class instance in both directions.
void detachSourceField(Field *field)
Removes a source field from this instance. If not found then this call does nothing.
virtual void touch(FieldSensor::Strength strength=FieldSensor::CHANGED)
Notifies all connected fields and field sensors.
void detachSourceFields()
Disconnects all source fields of this instance in both directions.
FieldContainer * getFieldContainer() const
Get the field container of the field (which may be NULL).
Definition mlField.h:94
Field * getSourceField(size_t index)
Returns the source field at index. Returns NULL if index is out of range.
std::string getFullName() const
Returns "fieldContainerType(instanceName).fieldName" (if field container is available,...
std::vector< FieldSensor * > _sensors
List of field sensors.
Definition mlField.h:275
void attachSourceField(Field *field)
Inserts a field as source field in this instance, i.e., from now on *this might receive values and/or...
void detachFieldInternal(Field *field)
Only remove the given field from the destination list.
const std::string & getName() const
Returns name of field.
Definition mlField.h:103
virtual void setValueFromField(const Field &field)
Sets the value of this field from the given field.
void attachFieldSensor(FieldSensor *sensor)
Attaches a field sensor sensor of this class instance in both directions.
void attachField(NotifyField *targetField)
bool areNotificationsEnabled()
Returns whether the notification mechanism for this field (e.g., when field values are set) is enable...
void attachField(SoNodeField *targetField)
void enableNotifications(bool flag)
Enables or disables notification of attached fields and field sensors when the field value is set or ...
static MLint _enableNotifications
Flag which disables the notification process of field (sensors) globally.
Definition mlField.h:299
Field without value for notifications.
Definition mlFields.h:659
Field to encapsulate a pointer to an output connector which represents a module output.
Definition mlFields.h:695
Field to encapsulate a pointer to an SoNode instance of OpenInventor.
Definition mlFields.h:937
#define MLEXPORT
To export symbols from a dll/shared object, we need to mark them with the MLEXPORT symbol.
Target mlrange_cast(Source arg)
Generic version of checked ML casts.
#define ML_ABSTRACT_ROOT_CLASS_HEADER(className)
MLint64 MLint
A signed ML integer type with at least 64 bits used for index calculations on very large images even ...
Definition mlTypeDefs.h:490
STL namespace.
MLEXPORT std::ostream & operator<<(std::ostream &s, const ml::Field &v)
Overloads the operator "<<" for stream output of Field objects.
Flags for internal usage.
Definition mlField.h:289
unsigned int insideTouch
< Flag to suppress multiple notifications of fields, which could lead to endless loops.
Definition mlField.h:291
unsigned int observersWereRemovedInsideTouch
< Flag that indicates that the sensor/destination fields lists contain NULL entries
Definition mlField.h:290
unsigned int notifyAttachmentsFlag
< Flag to suppress the notification of connected fields and field sensors when field values are set.
Definition mlField.h:292
unsigned int outputOnly
< Flag to mark this field as pure output field (this is used by the MeVisLab IDE).
Definition mlField.h:293