Open Inventor Reference
MeVis/ThirdParty/Sources/Inventor/inventor/lib/database/include/Inventor/fields/SoFieldData.h
Go to the documentation of this file.
00001 /*
00002  *
00003  *  Copyright (C) 2000 Silicon Graphics, Inc.  All Rights Reserved. 
00004  *
00005  *  This library is free software; you can redistribute it and/or
00006  *  modify it under the terms of the GNU Lesser General Public
00007  *  License as published by the Free Software Foundation; either
00008  *  version 2.1 of the License, or (at your option) any later version.
00009  *
00010  *  This library is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  *  Lesser General Public License for more details.
00014  *
00015  *  Further, this software is distributed without any warranty that it is
00016  *  free of the rightful claim of any third person regarding infringement
00017  *  or the like.  Any license provided herein, whether implied or
00018  *  otherwise, applies only to this software file.  Patent licenses, if
00019  *  any, provided herein do not apply to combinations of this program with
00020  *  other software, or any other product whatsoever.
00021  * 
00022  *  You should have received a copy of the GNU Lesser General Public
00023  *  License along with this library; if not, write to the Free Software
00024  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00025  *
00026  *  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
00027  *  Mountain View, CA  94043, or:
00028  * 
00029  *  http://www.sgi.com 
00030  * 
00031  *  For further information regarding this notice, see: 
00032  * 
00033  *  http://oss.sgi.com/projects/GenInfo/NoticeExplan/
00034  *
00035  */
00036 
00037 
00038 /*
00039  * Copyright (C) 1990,91   Silicon Graphics, Inc.
00040  *
00041  _______________________________________________________________________
00042  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
00043  |
00044  |   $Revision: 1.1.1.1 $
00045  |
00046  |   Description:
00047  |      Definition of the SoFieldData class, which is used by all objects
00048  |      that have fields.
00049  |
00050  |   Author(s)          : Paul S. Strauss, Nick Thompson, Gavin Bell
00051  |
00052  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
00053  _______________________________________________________________________
00054  */
00055 
00056 
00057 #ifndef  _SO_FIELD_DATA_
00058 #define  _SO_FIELD_DATA_
00059 
00060 #include <Inventor/misc/SoBasic.h>
00061 #include <Inventor/SbPList.h>
00062 #include <Inventor/SbString.h>
00063 
00064 class SoField;
00065 class SoInput;
00066 class SoFieldContainer;
00067 class SoOutput;
00068 
00085 
00086 SoINTERNAL class INVENTOR_API SoFieldData {
00087   public:
00089     SoFieldData() {}
00090 
00092     SoFieldData(const SoFieldData &);
00093     SoFieldData(const SoFieldData *);
00094 
00096     SoFieldData(int numFields) : fields(numFields) {}
00097 
00099     ~SoFieldData();
00100 
00104     void                addField(SoFieldContainer *defObject,
00105                                  const char *fieldName,
00106                                  const SoField *field);
00107 
00111     void                overlay(SoFieldContainer *to,
00112                                 const SoFieldContainer *from,
00113                                 SbBool copyConnections) const;
00114 
00116     int                 getNumFields() const    { return fields.getLength(); }
00117 
00119     const SbName &      getFieldName(int index) const;
00120 
00122     SoField *           getField(const SoFieldContainer *object,
00123                                  int index) const;
00124 
00126     int                 getIndex(const SoFieldContainer *fc,
00127                                  const SoField *field) const;
00128 
00130     void                addEnumValue(const char *typeName,
00131                                      const char *valName, int val);
00132     void                getEnumData(const char *typeName, int &num,
00133                                     int *&vals, SbName *&names);
00134 
00135   SoINTERNAL public:
00136 
00142     SbBool              read(SoInput *in, SoFieldContainer *object,
00143                              SbBool errorOnUnknownField,
00144                              SbBool &notBuiltIn) const;
00145 
00152     SbBool              read(SoInput *in, SoFieldContainer *object,
00153                              const SbName &fieldName,
00154                              SbBool &foundName) const;
00155 
00157     void                write(SoOutput *out,
00158                               const SoFieldContainer *object) const;
00159 
00162     void                copy(const SoFieldData *from);
00163 
00166     SbBool              isSame(const SoFieldContainer *c1,
00167                                const SoFieldContainer *c2) const;
00168 
00170     SbBool              readFieldDescriptions(
00171                                 SoInput *in, SoFieldContainer *object,
00172                                 int numDescriptionsExpected) const;
00173 
00175     void                writeFieldDescriptions(
00176                                 SoOutput *out,
00177                                 const SoFieldContainer *object) const;
00178 
00179   private:
00181     SbBool              readFields(
00182                                 SoInput *in, SoFieldContainer *object,
00183                                 int numFieldsWritten) const;
00184 
00185     SbPList             fields;         
00186     SbPList             enums;          
00187 };    
00188 
00189 #endif /* _SO_FIELD_DATA_ */