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 
28 ML_START_NAMESPACE
29 
30 class OutputConnectorField;
31 class BaseField;
32 class SoNodeField;
33 class NotifyField;
34 class FieldContainer;
35 
36 //-------------------------------------------------------------------------
71 //-------------------------------------------------------------------------
73 {
74 
75 public:
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 
150  void copyCStringValue(char* valueBuffer, MLint bufferSize);
151 
153  MLint getCStringValueSize(){ return static_cast<MLint>(getStringValue().size()); }
155 
156 
157  //------------------------------------------------------------------------
160  //------------------------------------------------------------------------
163 
166 
169 
174  void attachField(OutputConnectorField* targetField);
175  void attachField(BaseField* targetField);
176  void attachField(SoNodeField* targetField);
177  void attachField(NotifyField* targetField);
178 
182  void attachField(Field* targetField, bool propagateValueOnConnect);
183 
185  void detachField(Field* targetField);
186 
189 
192 
195 
198 
200  Field* getDestinationField(size_t index);
201 
204 
206  Field* getSourceField(size_t index);
207 
222  virtual void touch(FieldSensor::Strength strength=FieldSensor::CHANGED);
223 
227  void enableNotifications(bool flag);
228 
232 
239  static void enableNotificationsGlobally(bool flag);
240 
247 
254 
255 protected:
258  void attachSourceField(Field* field);
259 
261  void detachSourceField(Field* field);
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 
301 private:
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 
315 #if ML_DEPRECATED_SINCE(3,5,0)
316 
319 
320 public:
321 
324  #define notifyAttachments touch
325 
326 #if defined(WIN32) && !defined(ML_NO_DEPRECATED_WARNINGS)
327  #pragma deprecated("notifyAttachments")
328 #endif
329 
332  inline ML_DEPRECATED void deactivateAttachments() { enableNotifications(false); }
335  inline ML_DEPRECATED void activateAttachments() { enableNotifications(true); }
338  inline ML_DEPRECATED MLint isActiveAttachments() { return areNotificationsEnabled(); }
341  inline ML_DEPRECATED static void disableNotifications() { enableNotificationsGlobally(false); }
344  inline ML_DEPRECATED static void enableNotifications() { enableNotificationsGlobally(true); }
347  inline ML_DEPRECATED static MLint isEnabledNotifications() { return areNotificationsEnabledGlobally(); }
348 
350 
351 #endif
352 
353 
354 };
355 
356 ML_END_NAMESPACE
357 
358 
359 //-----------------------------------------------------------------------------------
360 // Stream output for std::ostream
361 //-----------------------------------------------------------------------------------
362 namespace std
363 {
364 
366  MLEXPORT std::ostream& operator<<(std::ostream& s, const ML_NAMESPACE::Field &v);
367 
368 }
369 
370 
371 #endif // __mlField_H
372 
373 
374 
#define ML_DEPRECATED
Definition: CSOGroup.h:371
Field to encapsulate a pointer to an ML base object.
Definition: mlFields.h:1187
Defines the class FieldContainer to encapsulate a vector of fields for (see class Field).
Class to define and to manage field sensors.
Definition: mlFieldSensor.h:39
Strength
Enumeration type describing the strength of notifications.
Definition: mlFieldSensor.h:44
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.
void attachField(OutputConnectorField *targetField)
This calls attachField(targetField, false).
Field * getDestinationField(size_t index)
Returns destination field at index. Returns NULL if index is out of range.
FieldContainer * getFieldContainer() const
Get the field container of the field (which may be NULL).
Definition: mlField.h:94
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
const std::string & getName() const
Returns name of field.
Definition: mlField.h:103
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.
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.
std::string getFullName() const
Returns "fieldContainerType(instanceName).fieldName" (if field container is available,...
Field * getSourceField(size_t index)
Returns the source field at index. Returns NULL if index is out of range.
std::vector< FieldSensor * > _sensors
List of field sensors.
Definition: mlField.h:275
static MLint & enableNotificationsCounterState()
Provides read/write access to the current counter state (see enableNotificationsGlobally(bool) ).
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.
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:1049
Field to encapsulate a pointer to an output connector which represents a module output.
Definition: mlFields.h:1085
Field to encapsulate a pointer to an SoNode instance of OpenInventor.
Definition: mlFields.h:1327
MLEXPORT std::ostream & operator<<(std::ostream &s, const ml::Field &v)
Overloads the operator "<<" for stream output of Field objects.
#define MLEXPORT
To export symbols from a dll/shared object, we need to mark them with the MLEXPORT symbol.
#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:578
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