00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef COIN_SOFIELD_H
00021
#define COIN_SOFIELD_H
00022
00023
#include <Inventor/SoType.h>
00024
#include <Inventor/misc/SoNotification.h>
00025
00026
class SbString;
00027
class SoEngineOutput;
00028
class SoFieldContainer;
00029
class SoFieldConverter;
00030
class SoFieldList;
00031
class SoInput;
00032
class SoOutput;
00033
class SoVRMLInterpOutput;
00034
00035
00036 class COIN_DLL_API SoField {
00037
00038
public:
00039
virtual ~SoField();
00040
00041
static void initClass(
void);
00042
static void initClasses(
void);
00043
00044
void setIgnored(SbBool ignore);
00045 SbBool isIgnored(
void)
const;
00046
00047
void setDefault(SbBool def);
00048 SbBool isDefault(
void)
const;
00049
00050
virtual SoType getTypeId(
void)
const = 0;
00051
00052
static SoType getClassTypeId(
void);
00053 SbBool isOfType(
const SoType type)
const;
00054
00055
void enableConnection(SbBool flag);
00056 SbBool isConnectionEnabled(
void)
const;
00057
00058
00059 SbBool connectFrom(
SoEngineOutput * master,
00060 SbBool notnotify = FALSE, SbBool append = FALSE);
00061 SbBool appendConnection(
SoEngineOutput * master, SbBool notnotify = FALSE);
00062
void disconnect(
SoEngineOutput * engineoutput);
00063 SbBool isConnectedFromEngine(
void)
const;
00064 SbBool getConnectedEngine(
SoEngineOutput *& master)
const;
00065
00066
00067 SbBool connectFrom(SoField * master,
00068 SbBool notnotify = FALSE, SbBool append = FALSE);
00069 SbBool appendConnection(SoField * master, SbBool notnotify = FALSE);
00070
void disconnect(SoField * field);
00071 SbBool isConnectedFromField(
void)
const;
00072 SbBool getConnectedField(SoField *& master)
const;
00073
int getNumConnections(
void)
const;
00074
int getForwardConnections(
SoFieldList & slavelist)
const;
00075
int getConnections(
SoFieldList & masterlist)
const;
00076
00077
00078 SbBool connectFrom(SoVRMLInterpOutput * master,
00079 SbBool notnotify = FALSE, SbBool append = FALSE);
00080 SbBool appendConnection(SoVRMLInterpOutput * master,
00081 SbBool notnotify = FALSE);
00082
void disconnect(SoVRMLInterpOutput * interpoutput);
00083 SbBool isConnectedFromVRMLInterp(
void)
const;
00084 SbBool getConnectedVRMLInterp(SoVRMLInterpOutput *& master)
const;
00085
00086
void disconnect(
void);
00087 SbBool isConnected(
void)
const;
00088
00089
void setContainer(
SoFieldContainer * cont);
00090
SoFieldContainer * getContainer(
void)
const;
00091
00092 SbBool set(
const char * valuestring);
00093
void get(
SbString & valuestring);
00094
00095 SbBool shouldWrite(
void)
const;
00096
00097
virtual void touch(
void);
00098
virtual void startNotify(
void);
00099
virtual void notify(
SoNotList * nlist);
00100 SbBool enableNotify(SbBool on);
00101 SbBool isNotifyEnabled(
void)
const;
00102
00103
void addAuditor(
void * f, SoNotRec::Type type);
00104
void removeAuditor(
void * f, SoNotRec::Type type);
00105
00106
int operator ==(
const SoField & f)
const;
00107
int operator !=(
const SoField & f)
const;
00108
00109
virtual void connectionStatusChanged(
int numconnections);
00110 SbBool isReadOnly(
void)
const;
00111
virtual SbBool isSame(
const SoField & f)
const = 0;
00112
virtual void copyFrom(
const SoField & f) = 0;
00113
00114
virtual void fixCopy(SbBool copyconnections);
00115
virtual SbBool referencesCopy(
void)
const;
00116
void copyConnection(
const SoField * fromfield);
00117
00118
virtual SbBool read(
SoInput * in,
const SbName & name);
00119
virtual void write(
SoOutput * out,
const SbName & name)
const;
00120
00121
virtual void countWriteRefs(
SoOutput * out)
const;
00122
00123
void evaluate(
void)
const;
00124
00125
void setFieldType(
int type);
00126
int getFieldType(
void)
const;
00127
00128 SbBool getDirty(
void)
const;
00129
void setDirty(SbBool dirty);
00130
00131
protected:
00132 SoField(
void);
00133
00134
void valueChanged(SbBool resetdefault = TRUE);
00135
virtual void evaluateConnection(
void)
const;
00136
virtual SbBool readValue(
SoInput * in) = 0;
00137
virtual void writeValue(
SoOutput * out)
const = 0;
00138
virtual SbBool readConnection(
SoInput * in);
00139
virtual void writeConnection(
SoOutput * out)
const;
00140
00141 SbBool isDestructing(
void)
const;
00142
00143
private:
00144
void extendStorageIfNecessary(
void);
00145
SoFieldConverter * createConverter(
SoType from)
const;
00146
SoFieldContainer * resolveWriteConnection(
SbName & mastername)
const;
00147
00148
void notifyAuditors(
SoNotList * l);
00149
00150
static SoType classTypeId;
00151
00152
00153
enum FileFormatFlags {
00154 IGNORED = 0x01,
00155 CONNECTED = 0x02,
00156 DEFAULT = 0x04,
00157 ALLFILEFLAGS = IGNORED|CONNECTED|DEFAULT
00158 };
00159
00160 SbBool changeStatusBits(
const unsigned int bits,
const SbBool onoff);
00161
void clearStatusBits(
const unsigned int bits);
00162
void setStatusBits(
const unsigned int bits);
00163 SbBool getStatus(
const unsigned int bits)
const;
00164
unsigned int statusbits;
00165
union {
00166
SoFieldContainer * container;
00167
class SoConnectStorage * storage;
00168 };
00169
00170 SbBool hasExtendedStorage(
void)
const;
00171 };
00172
00173
00174
#ifndef COIN_INTERNAL
00175
00176
#include <Inventor/fields/SoSField.h>
00177
#include <Inventor/fields/SoMField.h>
00178
#endif // !COIN_INTERNAL
00179
00180
#endif // !COIN_SOFIELD_H