Coin Logo http://www.sim.no
http://www.coin3d.org

SoField.h
1 #ifndef COIN_SOFIELD_H
2 #define COIN_SOFIELD_H
3 
4 /**************************************************************************\
5  *
6  * This file is part of the Coin 3D visualization library.
7  * Copyright (C) 1998-2007 by Systems in Motion. All rights reserved.
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * ("GPL") version 2 as published by the Free Software Foundation.
12  * See the file LICENSE.GPL at the root directory of this source
13  * distribution for additional information about the GNU GPL.
14  *
15  * For using Coin with software that can not be combined with the GNU
16  * GPL, and for taking advantage of the additional benefits of our
17  * support services, please contact Systems in Motion about acquiring
18  * a Coin Professional Edition License.
19  *
20  * See http://www.coin3d.org/ for more information.
21  *
22  * Systems in Motion, Postboks 1283, Pirsenteret, 7462 Trondheim, NORWAY.
23  * http://www.sim.no/ sales@sim.no coin-support@coin3d.org
24  *
25 \**************************************************************************/
26 
27 #include <Inventor/SoType.h>
28 #include <Inventor/misc/SoNotification.h>
29 
30 class SbString;
31 class SoEngineOutput;
32 class SoFieldContainer;
33 class SoFieldConverter;
34 class SoFieldList;
35 class SoInput;
36 class SoOutput;
37 
38 class COIN_DLL_API SoField {
39 
40 public:
41  virtual ~SoField();
42 
43  static void initClass(void);
44  static void initClasses(void);
45 
46  void setIgnored(SbBool ignore);
47  SbBool isIgnored(void) const;
48 
49  void setDefault(SbBool def);
50  SbBool isDefault(void) const;
51 
52  virtual SoType getTypeId(void) const = 0;
53 
54  static SoType getClassTypeId(void);
55  SbBool isOfType(const SoType type) const;
56 
57  void enableConnection(SbBool flag);
58  SbBool isConnectionEnabled(void) const;
59 
60  // Field<-Engine connection stuff.
61  SbBool connectFrom(SoEngineOutput * master,
62  SbBool notnotify = FALSE, SbBool append = FALSE);
63  SbBool appendConnection(SoEngineOutput * master, SbBool notnotify = FALSE);
64  void disconnect(SoEngineOutput * engineoutput);
65  SbBool isConnectedFromEngine(void) const;
66  SbBool getConnectedEngine(SoEngineOutput *& master) const;
67 
68  // Field<->Field connection stuff.
69  SbBool connectFrom(SoField * master,
70  SbBool notnotify = FALSE, SbBool append = FALSE);
71  SbBool appendConnection(SoField * master, SbBool notnotify = FALSE);
72  void disconnect(SoField * field);
73  SbBool isConnectedFromField(void) const;
74  SbBool getConnectedField(SoField *& master) const;
75  int getNumConnections(void) const;
76  int getForwardConnections(SoFieldList & slavelist) const;
77  int getConnections(SoFieldList & masterlist) const;
78 
79  void disconnect(void);
80  SbBool isConnected(void) const;
81 
82  void setContainer(SoFieldContainer * cont);
83  SoFieldContainer * getContainer(void) const;
84 
85  SbBool set(const char * valuestring);
86  void get(SbString & valuestring);
87 
88  SbBool shouldWrite(void) const;
89 
90  virtual void touch(void);
91  virtual void startNotify(void);
92  virtual void notify(SoNotList * nlist);
93  SbBool enableNotify(SbBool on);
94  SbBool isNotifyEnabled(void) const;
95 
96  void addAuditor(void * f, SoNotRec::Type type);
97  void removeAuditor(void * f, SoNotRec::Type type);
98 
99  int operator ==(const SoField & f) const;
100  int operator !=(const SoField & f) const;
101 
102  virtual void connectionStatusChanged(int numconnections);
103  SbBool isReadOnly(void) const;
104  virtual SbBool isSame(const SoField & f) const = 0;
105  virtual void copyFrom(const SoField & f) = 0;
106 
107  virtual void fixCopy(SbBool copyconnections);
108  virtual SbBool referencesCopy(void) const;
109  void copyConnection(const SoField * fromfield);
110 
111  virtual SbBool read(SoInput * in, const SbName & name);
112  virtual void write(SoOutput * out, const SbName & name) const;
113 
114  virtual void countWriteRefs(SoOutput * out) const;
115 
116  // enums for setFieldType()/getFieldType()
117  enum FieldType {
118  NORMAL_FIELD = 0,
119  EVENTIN_FIELD,
120  EVENTOUT_FIELD,
121  EXPOSED_FIELD
122  };
123 
124  void setFieldType(int type);
125  int getFieldType(void) const;
126 
127  SbBool getDirty(void) const;
128  void setDirty(SbBool dirty);
129 
130  void evaluate(void) const {
131  if ((this->statusbits & (FLAG_EXTSTORAGE|FLAG_NEEDEVALUATION)) ==
132  (FLAG_EXTSTORAGE|FLAG_NEEDEVALUATION)) this->evaluateField();
133  }
134 
135 protected:
136  SoField(void);
137 
138  void valueChanged(SbBool resetdefault = TRUE);
139  virtual void evaluateConnection(void) const;
140  virtual SbBool readValue(SoInput * in) = 0;
141  virtual void writeValue(SoOutput * out) const = 0;
142  virtual SbBool readConnection(SoInput * in);
143  virtual void writeConnection(SoOutput * out) const;
144 
145  SbBool isDestructing(void) const;
146 
147 private:
148 
149  enum FieldFlags {
150  FLAG_TYPEMASK = 0x0007, // need 3 bits for values [0-5]
151  FLAG_ISDEFAULT = 0x0008,
152  FLAG_IGNORE = 0x0010,
153  FLAG_EXTSTORAGE = 0x0020,
154  FLAG_ENABLECONNECTS = 0x0040,
155  FLAG_NEEDEVALUATION = 0x0080,
156  FLAG_READONLY = 0x0100,
157  FLAG_DONOTIFY = 0x0200,
158  FLAG_ISDESTRUCTING = 0x0400,
159  FLAG_ISEVALUATING = 0x0800,
160  FLAG_ISNOTIFIED = 0x1000
161  };
162 
163  void evaluateField(void) const;
164  void extendStorageIfNecessary(void);
165  SoFieldConverter * createConverter(SoType from) const;
166  SoFieldContainer * resolveWriteConnection(SbName & mastername) const;
167 
168  void notifyAuditors(SoNotList * l);
169 
170  static SoType classTypeId;
171 
172  // These are bit flags.
173  enum FileFormatFlags {
174  IGNORED = 0x01,
175  CONNECTED = 0x02,
176  DEFAULT = 0x04,
177  ALLFILEFLAGS = IGNORED|CONNECTED|DEFAULT
178  };
179 
180  SbBool changeStatusBits(const unsigned int bits, const SbBool onoff);
181  void clearStatusBits(const unsigned int bits);
182  void setStatusBits(const unsigned int bits);
183  SbBool getStatus(const unsigned int bits) const;
184  unsigned int statusbits;
185  union {
186  SoFieldContainer * container;
187  class SoConnectStorage * storage;
188  };
189 
190  SbBool hasExtendedStorage(void) const;
191 };
192 
193 
194 #ifndef COIN_INTERNAL
195 // Added to be Inventor compliant.
196 #include <Inventor/fields/SoSField.h>
197 #include <Inventor/fields/SoMField.h>
198 #endif // !COIN_INTERNAL
199 
200 #endif // !COIN_SOFIELD_H
SoField::SoField
SoField(void)
Definition: SoField.cpp:516
SbPList::getLength
int getLength(void) const
Definition: SbPList.h:94
SoDB::getGlobalField
static SoField * getGlobalField(const SbName &name)
Definition: SoDB.cpp:1297
SoType::badType
static SoType badType(void)
Definition: SoType.cpp:664
SoFieldConverter::getOutput
virtual SoEngineOutput * getOutput(SoType type)=0
SoFieldConverter
The SoFieldConverter class is the abstract base class for field converters.
Definition: SoFieldConverter.h:32
SoReadError::post
static void post(const SoInput *const in, const char *const format,...)
Definition: SoReadError.cpp:110
SoField::getClassTypeId
static SoType getClassTypeId(void)
Definition: SoField.cpp:680
SoNodeEngine::getOutputName
SbBool getOutputName(const SoEngineOutput *output, SbName &outputname) const
Definition: SoNodeEngine.cpp:198
SoField::setDirty
void setDirty(SbBool dirty)
Definition: SoField.cpp:2126
SoFieldContainer::getField
virtual SoField * getField(const SbName &name) const
Definition: SoFieldContainer.cpp:364
SoField::valueChanged
void valueChanged(SbBool resetdefault=1)
Definition: SoField.cpp:2433
SbName
The SbName class stores strings by reference.
Definition: SbName.h:31
SoEngineOutput::addConnection
void addConnection(SoField *f)
Definition: SoEngineOutput.cpp:247
SoField::writeValue
virtual void writeValue(SoOutput *out) const =0
SoField::disconnect
void disconnect(void)
Definition: SoField.cpp:1118
SoNode::copyThroughConnection
virtual SoFieldContainer * copyThroughConnection(void) const
Definition: SoNode.cpp:1397
SoDebugError::post
static void post(const char *const source, const char *const format,...)
Definition: SoDebugError.cpp:314
SoWriteAction
The SoWriteAction class writes a scene graph to file.
Definition: SoWriteAction.h:31
SoField::readValue
virtual SbBool readValue(SoInput *in)=0
SoNotList::getLastRec
SoNotRec * getLastRec(void) const
Definition: SoNotification.cpp:149
SoOutput::getBuffer
virtual SbBool getBuffer(void *&bufPointer, size_t &nBytes) const
Definition: SoOutput.cpp:590
SoField::addAuditor
void addAuditor(void *f, SoNotRec::Type type)
Definition: SoField.cpp:1519
SoField::isDefault
SbBool isDefault(void) const
Definition: SoField.cpp:669
SoOutput::write
virtual void write(const char c)
Definition: SoOutput.cpp:757
SoOutput::indent
virtual void indent(void)
Definition: SoOutput.cpp:1074
SoOutput
The SoOutput class is an abstraction of an output stream.
Definition: SoOutput.h:42
SoField::isConnectedFromField
SbBool isConnectedFromField(void) const
Definition: SoField.cpp:1152
SoField::getConnectedField
SbBool getConnectedField(SoField *&master) const
Definition: SoField.cpp:1188
SoEngineOutput
The SoEngineOutput class is the output slots in SoEngine instances.
Definition: SoEngineOutput.h:36
SoDB::getConverter
static SoType getConverter(SoType from, SoType to)
Definition: SoDB.cpp:1494
SoField::isIgnored
SbBool isIgnored(void) const
Definition: SoField.cpp:638
SoEngineOutput::isEnabled
SbBool isEnabled(void) const
Definition: SoEngineOutput.cpp:148
SoField::set
SbBool set(const char *valuestring)
Definition: SoField.cpp:1272
SoBase::getName
virtual SbName getName(void) const
Definition: SoBase.cpp:730
SoNotRec::getBase
SoBase * getBase(void) const
Definition: SoNotRec.cpp:71
SoNotRec::Type
Type
Definition: SoNotRec.h:35
SoField::shouldWrite
SbBool shouldWrite(void) const
Definition: SoField.cpp:1569
SoField::initClasses
static void initClasses(void)
Definition: SoField.cpp:2496
SoDebugError::postWarning
static void postWarning(const char *const source, const char *const format,...)
Definition: SoDebugError.cpp:324
SoAuditorList
The SoAuditorList class is used to keep track of auditors for certain object classes.
Definition: SoAuditorList.h:43
SoEngineOutput::getForwardConnections
int getForwardConnections(SoFieldList &fl) const
Definition: SoEngineOutput.cpp:109
SoInput::setBuffer
virtual void setBuffer(void *bufpointer, size_t bufsize)
Definition: SoInput.cpp:1025
SoFieldContainer::getFieldName
SbBool getFieldName(const SoField *const field, SbName &name) const
Definition: SoFieldContainer.cpp:409
SoField::setContainer
void setContainer(SoFieldContainer *cont)
Definition: SoField.cpp:1234
SoFieldContainer::checkCopy
static SoFieldContainer * checkCopy(const SoFieldContainer *orig)
Definition: SoFieldContainer.cpp:797
SoOutput::addRoute
void addRoute(SoFieldContainer *from, const SbName &fromfield, SoFieldContainer *to, const SbName &tofield)
Definition: SoOutput.cpp:1436
SoNotRec
The SoNotRec class specifies records for notification lists.
Definition: SoNotRec.h:33
SoField::evaluateConnection
virtual void evaluateConnection(void) const
Definition: SoField.cpp:2375
SbString
The SbString class is a string class with convenience functions for string operations.
Definition: SbString.h:42
SoField::isReadOnly
SbBool isReadOnly(void) const
Definition: SoField.cpp:1631
SoField::copyFrom
virtual void copyFrom(const SoField &f)=0
SoField::isNotifyEnabled
SbBool isNotifyEnabled(void) const
Definition: SoField.cpp:1499
SoDB::endNotify
static void endNotify(void)
Definition: SoDB.cpp:1538
SoOutput::setBuffer
virtual void setBuffer(void *bufPointer, size_t initSize, SoOutputReallocCB *reallocFunc, int32_t offset=0)
Definition: SoOutput.cpp:572
SoField::getContainer
SoFieldContainer * getContainer(void) const
Definition: SoField.cpp:1253
SoField::isDestructing
SbBool isDestructing(void) const
Definition: SoField.cpp:2487
SoType::isDerivedFrom
SbBool isDerivedFrom(const SoType type) const
Definition: SoType.cpp:687
SoField::writeConnection
virtual void writeConnection(SoOutput *out) const
Definition: SoField.cpp:2303
SoEngine::getOutputName
SbBool getOutputName(const SoEngineOutput *output, SbName &outputname) const
Definition: SoEngine.cpp:244
SoField::connectionStatusChanged
virtual void connectionStatusChanged(int numconnections)
Definition: SoField.cpp:1618
SoBase::unref
void unref(void) const
Definition: SoBase.cpp:627
SoField::getConnectedEngine
SbBool getConnectedEngine(SoEngineOutput *&master) const
Definition: SoField.cpp:1202
SoField
The SoField class is the top-level abstract base class for fields.
Definition: SoField.h:38
SoField::enableConnection
void enableConnection(SbBool flag)
Definition: SoField.cpp:708
SoField::startNotify
virtual void startNotify(void)
Definition: SoField.cpp:1361
SoField::setDefault
void setDefault(SbBool def)
Definition: SoField.cpp:650
SoType
The SoType class is the basis for the run-time type system in Coin.
Definition: SoType.h:50
SoOutput::isBinary
virtual SbBool isBinary(void) const
Definition: SoOutput.cpp:650
SoField::read
virtual SbBool read(SoInput *in, const SbName &name)
Definition: SoField.cpp:1780
SoField::operator==
int operator==(const SoField &f) const
Definition: SoField.cpp:1547
SbName::getString
const char * getString(void) const
Definition: SbName.cpp:278
SoDebugError::postInfo
static void postInfo(const char *const source, const char *const format,...)
Definition: SoDebugError.cpp:334
SoFieldContainer::writeInstance
virtual void writeInstance(SoOutput *out)
Definition: SoFieldContainer.cpp:640
SoField::getDirty
SbBool getDirty(void) const
Definition: SoField.cpp:2116
SoNotList::append
void append(SoNotRec *const rec)
Definition: SoNotification.cpp:66
SoEngine::copyThroughConnection
virtual SoFieldContainer * copyThroughConnection(void) const
Definition: SoEngine.cpp:466
SoField::isConnectedFromEngine
SbBool isConnectedFromEngine(void) const
Definition: SoField.cpp:1165
SoField::initClass
static void initClass(void)
Definition: SoField.cpp:600
SoField::removeAuditor
void removeAuditor(void *f, SoNotRec::Type type)
Definition: SoField.cpp:1530
SoField::appendConnection
SbBool appendConnection(SoEngineOutput *master, SbBool notnotify=0)
Definition: SoField.cpp:2138
SoBase::read
static SbBool read(SoInput *in, SoBase *&base, SoType expectedtype)
Definition: SoBase.cpp:1146
SoInput::putBack
virtual void putBack(const char c)
Definition: SoInput.cpp:1834
SoWriteAction::continueToApply
void continueToApply(SoNode *node)
Definition: SoWriteAction.cpp:173
SoNode::VRML2
@ VRML2
Definition: SoNode.h:62
SoInput::checkISReference
SbBool checkISReference(SoFieldContainer *container, const SbName &fieldname, SbBool &readok)
Definition: SoInput.cpp:678
SoField::get
void get(SbString &valuestring)
Definition: SoField.cpp:1291
SoField::setFieldType
void setFieldType(int type)
Definition: SoField.cpp:2465
SoFieldList
The SoFieldList class is a container for pointers to SoField objects.
Definition: SoFieldList.h:31
SoBase
The SoBase class is the top-level superclass for a number of class-hierarchies.
Definition: SoBase.h:41
SoEngineOutput::getConnectionType
SoType getConnectionType(void) const
Definition: SoEngineOutput.cpp:88
SoField::enableNotify
SbBool enableNotify(SbBool on)
Definition: SoField.cpp:1485
SoFieldContainer
The SoFieldContainer class is a base class for all classes that contain fields.
Definition: SoFieldContainer.h:35
SoBase::ref
void ref(void) const
Definition: SoBase.cpp:574
SoField::countWriteRefs
virtual void countWriteRefs(SoOutput *out) const
Definition: SoField.cpp:2005
SoNodeEngine
SoNodeEngine is the base class for Coin node engines.
Definition: SoNodeEngine.h:33
SoEngineOutput::getNodeContainer
SoNodeEngine * getNodeContainer(void) const
Definition: SoEngineOutput.cpp:184
SoEngineOutput::isNodeEngineOutput
SbBool isNodeEngineOutput(void) const
Definition: SoEngineOutput.cpp:205
SoDataSensor
The SoDataSensor class is the abstract base class for sensors monitoring changes in a scene graph.
Definition: SoDataSensor.h:35
SoFieldConverter::getInput
virtual SoField * getInput(SoType type)=0
SoFieldList::append
void append(SoField *field)
Definition: SoFieldList.h:37
SoType::createInstance
void * createInstance(void) const
Definition: SoType.cpp:803
SoField::getConnections
int getConnections(SoFieldList &masterlist) const
Definition: SoField.cpp:1105
SoField::getTypeId
virtual SoType getTypeId(void) const =0
SbString::sprintf
SbString & sprintf(const char *formatstr,...)
Definition: SbString.h:105
SoOutput::setStage
void setStage(Stage stage)
Definition: SoOutput.cpp:728
SoDB::startNotify
static void startNotify(void)
Definition: SoDB.cpp:1517
SoFieldContainer::notify
virtual void notify(SoNotList *l)
Definition: SoFieldContainer.cpp:562
SoEngine::getOutput
SoEngineOutput * getOutput(const SbName &outputname) const
Definition: SoEngine.cpp:227
SoField::isConnectionEnabled
SbBool isConnectionEnabled(void) const
Definition: SoField.cpp:721
SoBase::getTypeId
virtual SoType getTypeId(void) const =0
SoOutput::getStage
Stage getStage(void) const
Definition: SoOutput.cpp:744
SoField::operator!=
int operator!=(const SoField &f) const
Definition: SoField.cpp:1557
SoType::createType
static const SoType createType(const SoType parent, const SbName name, const instantiationMethod method=(instantiationMethod) NULL, const uint16_t data=0)
Definition: SoType.cpp:256
SoEngineOutput::getContainer
SoEngine * getContainer(void) const
Definition: SoEngineOutput.cpp:160
SoEngineOutput::removeConnection
void removeConnection(SoField *f)
Definition: SoEngineOutput.cpp:287
SoField::referencesCopy
virtual SbBool referencesCopy(void) const
Definition: SoField.cpp:1666
SoField::notify
virtual void notify(SoNotList *nlist)
Definition: SoField.cpp:1382
SoInput::read
virtual SbBool read(char &c)
Definition: SoInput.cpp:1180
SoField::write
virtual void write(SoOutput *out, const SbName &name) const
Definition: SoField.cpp:1923
SoEngineOutputList
The SoEngineOutputList class is a container for SoEngineOutput objects.
Definition: SoEngineOutputList.h:31
SoField::touch
virtual void touch(void)
Definition: SoField.cpp:1349
SoField::getFieldType
int getFieldType(void) const
Definition: SoField.cpp:2478
SoInput::isBinary
virtual SbBool isBinary(void)
Definition: SoInput.cpp:1096
SoBase::assertAlive
void assertAlive(void) const
Definition: SoBase.cpp:546
SoField::getNumConnections
int getNumConnections(void) const
Definition: SoField.cpp:1089
SoNodeEngine::getOutput
SoEngineOutput * getOutput(const SbName &outputname) const
Definition: SoNodeEngine.cpp:181
SoInput
The SoInput class is an abstraction of file import functionality.
Definition: SoInput.h:55
SoField::disconnect
void disconnect(SoEngineOutput *engineoutput)
Definition: SoField.cpp:1022
SoEngineOutput::getFieldContainer
SoFieldContainer * getFieldContainer(void)
Definition: SoEngineOutput.cpp:420
SoNodeEngine::evaluateWrapper
void evaluateWrapper(void)
Definition: SoNodeEngine.cpp:271
SoEngine::evaluateWrapper
void evaluateWrapper(void)
Definition: SoEngine.cpp:343
SoBase::isOfType
SbBool isOfType(SoType type) const
Definition: SoBase.cpp:710
SoField::getForwardConnections
int getForwardConnections(SoFieldList &slavelist) const
Definition: SoField.cpp:1214
SoField::copyConnection
void copyConnection(const SoField *fromfield)
Definition: SoField.cpp:1699
SoNode
The SoNode class is the base class for nodes used in scene graphs.
Definition: SoNode.h:47
SoField::isSame
virtual SbBool isSame(const SoField &f) const =0
SoType::getName
SbName getName(void) const
Definition: SoType.cpp:628
SoNotList::setLastType
void setLastType(const SoNotRec::Type type)
Definition: SoNotification.cpp:122
SoField::isOfType
SbBool isOfType(const SoType type) const
Definition: SoField.cpp:690
SoField::isConnected
SbBool isConnected(void) const
Definition: SoField.cpp:1139
SoField::setIgnored
void setIgnored(SbBool ignore)
Definition: SoField.cpp:625
SoField::readConnection
virtual SbBool readConnection(SoInput *in)
Definition: SoField.cpp:2200
SoFieldContainer::addWriteReference
virtual void addWriteReference(SoOutput *out, SbBool isfromfield=0)
Definition: SoFieldContainer.cpp:605
SoField::connectFrom
SbBool connectFrom(SoEngineOutput *master, SbBool notnotify=0, SbBool append=0)
Definition: SoField.cpp:870
SbString::getString
const char * getString(void) const
Definition: SbString.h:71
SoField::evaluate
void evaluate(void) const
Definition: SoField.h:130
SoNotList
The SoNotList class is a list of SoNotRec notification records.
Definition: SoNotification.h:34
SoField::~SoField
virtual ~SoField()
Definition: SoField.cpp:530
SoNotList::getFirstRec
SoNotRec * getFirstRec(void) const
Definition: SoNotification.cpp:140
SoEngine
SoEngine is the base class for Coin engines.
Definition: SoEngine.h:34
SoField::fixCopy
virtual void fixCopy(SbBool copyconnections)
Definition: SoField.cpp:1651
SoNotRec::getType
SoNotRec::Type getType(void) const
Definition: SoNotRec.cpp:80
SoFieldContainer::copyThroughConnection
virtual SoFieldContainer * copyThroughConnection(void) const
Definition: SoFieldContainer.cpp:728

Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.

Generated on Mon Jul 27 2020 for Coin by Doxygen. 1.8.18