00001
00127 #ifndef INC_RVC_DBTABLE_H
00128 #define INC_RVC_DBTABLE_H
00129
00130 #ifndef INC_RVC_DBASE_H
00131 #include <rvc/dbase.h>
00132 #endif
00133
00134 #ifndef INC_RVC_DBFIELDCONSTRAINT_H
00135 #include <rvc/dbfieldconstraint.h>
00136 #endif
00137
00138 #ifndef INC_RVC_STYLETYPE_H
00139 #include <rvc/styletype.h>
00140 #endif
00141
00142 #ifndef INC_MI32_BITSET_H
00143 #include <mi32/bitset.h>
00144 #endif
00145
00146 #ifndef INC_MI32_RANGE_H
00147 #include <mi32/range.h>
00148 #endif
00149
00150 #ifndef INC_MI32_GREMODE_H
00151 #include <mi32/gremode.h>
00152 #endif
00153
00154 #ifndef INC_MI32_ENUMSET_H
00155 #include <mi32/enumset.h>
00156 #endif
00157
00158 #ifndef INC_MI32_DATETIME_H
00159 #include <mi32/datetime.h>
00160 #endif
00161
00162 #ifndef INC_MI32_COLOR_H
00163 #include <mi32/color.h>
00164 #endif
00165
00166 #ifndef INC_MI32_UOM_H
00167 #include <mi32/uom.h>
00168 #endif
00169
00170 #ifndef INC_VECTOR
00171 #include <vector>
00172 #define INC_VECTOR
00173 #endif
00174
00175
00176 #ifndef GENERATING_DOXYGEN_OUTPUT
00177
00178 struct UNITCONV;
00179 struct DBFIELDINFO;
00180 struct DBCONSTRAINT;
00181 namespace SML {
00182 class TABLEDATA;
00183 }
00184 namespace SPATMOD {
00185 namespace IMAGE {
00186 class STAGE;
00187 }
00188 }
00189 namespace RVC {
00190 struct DBCALLBACKSTRUCT;
00191 class SHAPE;
00192 class STYLE;
00193 class DBASE_ELEMENT;
00194 class TABLEJOININFO;
00195 class DBTRANSINFO;
00196 }
00197 #endif
00198
00199
00200 namespace RVC {
00201
00217 class DBTABLE : public RVC::OBJECT {
00218 public:
00219
00221 enum ATTACHMENT {
00222 ATTACHMENT_Unknown = 0,
00223 ATTACHMENT_OneRecordPerElement,
00224 ATTACHMENT_OneElementPerRecord,
00225 ATTACHMENT_OneToOne,
00226 ATTACHMENT_RelatedOnly,
00227 ATTACHMENT_Identity,
00228 ATTACHMENT_NoRestrictions
00229 };
00230
00232 enum DEFINEDID {
00233 DEFINEDID_Internal = -1,
00234 DEFINEDID_InternalNode = -2,
00235 DEFINEDID_Invalid = -98,
00236 DEFINEDID_New = -9
00237 };
00238
00240 enum FINDFLAG {
00241 FINDFLAG_AllAttached = 0,
00242 FINDFLAG_OnlyDirect = 2,
00243 FINDFLAG_FirstMatch = 8
00244 };
00245
00247 enum INDEXSEARCH {
00248 INDEXSEARCH_ReturnIndexOffset = 0x00000000,
00249 INDEXSEARCH_CheckExists = 0x00000001,
00250 INDEXSEARCH_ReturnRecordNumber = 0x00000002,
00251 INDEXSEARCH_ReturnInsertOffset = 0x00000004
00252 };
00253
00254 enum ITERATERECORD {
00255 ITERATERECORD_None = 0x0000,
00256 ITERATERECORD_SkipDeleted = 0x0001,
00257 ITERATERECORD_Sort = 0x0002,
00258 ITERATERECORD_UniqueOnly = 0x0004,
00259 ITERATERECORD_SaveIndex = 0x0008,
00260 ITERATERECORD_SingleKey = 0x8000
00261 };
00262
00264 enum LINKTYPE {
00265 LINKTYPE_Internal = 0,
00266 LINKTYPE_MIPS,
00267 LINKTYPE_DBASE3,
00268 LINKTYPE_INFO,
00269 LINKTYPE_DBASE4,
00270 LINKTYPE_RBASE,
00271 LINKTYPE_DBASE2,
00272 LINKTYPE_ODBC,
00273 LINKTYPE_CSV,
00274 LINKTYPE_TAB,
00275 LINKTYPE_ORACLE,
00276 LINKTYPE_RDBMS,
00277 LINKTYPE_LAS,
00278 LINKTYPE_NUMTYPES
00279 };
00280
00281 enum KEYFLAGS {
00282 KEYFLAG_None = 0x0000,
00283 KEYFLAG_PrimaryKey = 0x0001,
00284 KEYFLAG_ForeignKey = 0x0002,
00285 KEYFLAG_Indexed = 0x0004,
00286 KEYFLAG_RebuildIndex = 0x2000,
00287 KEYFLAG_Sorted = 0x4000
00288 };
00289
00291 enum RECORDREFTYPE {
00292 RECORDREFTYPE_New = 0,
00293 RECORDREFTYPE_Absolute = 1,
00294 RECORDREFTYPE_Bookmark = 2
00295 };
00296
00298 enum REFELEM {
00299 REFELEM_All = 0x00000000,
00300 REFELEM_Node = 0x00000010,
00301 REFELEM_Edge = 0x00000020,
00302 REFELEM_Triangle = 0x00000040,
00303 REFELEM_Hull = 0x00000080
00304 };
00305
00307 enum STRUCTCOMPARE {
00308 STRUCTCOMPARE_DoNotMatch = 0,
00309 STRUCTCOMPARE_Exact,
00310 STRUCTCOMPARE_Compatible,
00311 STRUCTCOMPARE_SameTable
00312 };
00313
00315 enum CAPABILITY {
00316 CAPABILITY_Create = 2048,
00317 CAPABILITY_Link,
00318 CAPABILITY_ReadMemo,
00319 CAPABILITY_WriteMemo,
00320 CAPABILITY_WriteRecord,
00321 CAPABILITY_MultiTable,
00322 CAPABILITY_Server,
00323 CAPABILITY_Import,
00324 CAPABILITY_Export,
00325 CAPABILITY_DeleteRecord,
00326 CAPABILITY_UserWritable,
00327 CAPABILITY_CanSetUserWrite,
00328 CAPABILITY_ChangeFields,
00329 CAPABILITY_AddFields,
00330 CAPABILITY_DeleteFields,
00331 CAPABILITY_AddRecord,
00332 CAPABILITY_RandomAccess,
00333 CAPABILITY_ReadBinary,
00334 CAPABILITY_WriteBinary,
00335 CAPABILITY_WriteIfOpenForWrite,
00336 CAPABILITY_BookmarksAreNotAbsolute
00337 };
00338
00339 enum PERMISSIONS {
00340 PERMISSION_View = 0,
00341 PERMISSION_Modify,
00342 PERMISSION_Delete,
00343 PERMISSION_ViewStructure,
00344 PERMISSION_ModifyStructure,
00345 PERMISSION_Duplicate,
00346 PERMISSION_ReadACL,
00347 PERMISSION_ChangeACL
00348 };
00349
00351 enum USAGE {
00352 USAGE_UserDefined = 0,
00353 USAGE_StdStats = 2,
00354 USAGE_ElementID = 3,
00355 USAGE_NodeTurn = 4,
00356 USAGE_ScaleSelect = 5,
00357 USAGE_Section = 6,
00358 USAGE_Internal = 7,
00359 USAGE_PointStyle = 8,
00360 USAGE_LineStyle = 9,
00361 USAGE_PolyStyle = 10,
00362 USAGE_TextStyle = 11,
00363 USAGE_MultiStyle = 12,
00364 USAGE_CADStyle = USAGE_MultiStyle,
00365 USAGE_EditLog = 13,
00366 USAGE_Selection = 14,
00367 USAGE_FlightPath = 15,
00368 USAGE_PointOfInterest = 16,
00369 USAGE_LegendElement = 17,
00370 USAGE_StyleParameters = 18,
00371 USAGE_SelectParameters = 19,
00372 USAGE_ExtrudedPoints = 20,
00373 USAGE_InfluenceSphere = 21,
00374 USAGE_Sketch = 22,
00375 USAGE_ClumpRaster = 23,
00376 USAGE_Enumeration = 24,
00377 USAGE_Shape = 25,
00378 USAGE_PickList = 26,
00379 USAGE_Properties = 27,
00380 USAGE_FieldOfView = 28,
00381 USAGE_LAST
00382 };
00383
00384 enum VIEWMODE {
00385 VIEWMODE_Tabular = 0,
00386 VIEWMODE_SingleRecord = 1
00387 };
00388
00389 #ifndef GENERATING_DOXYGEN_OUTPUT
00390 class BOOKMARK;
00391 class CURSOR;
00392 class FIELDINFO;
00393 class GETOBJFILTER_ISSELECTABLE;
00394 class GETOBJFILTER_ISUSAGEVALID;
00395 class GETOBJFILTER_ISUSERDEFINED;
00396 class RECORD;
00397 friend class RECORD;
00398 class RECORD_ID_ELEMENT;
00399 class RECORD_ID_POINT;
00400 class RECORD_LEGENDELEMENT;
00401 class RECORD_NODETURN;
00402 class RECORD_SCALESELECT;
00403 class RECORD_SELECTION;
00404 class RECORD_STYLE_CAD;
00405 typedef RECORD_STYLE_CAD RECORD_STYLE_MULTI;
00406 class RECORD_STYLE_ELEMENT;
00407 #endif // GENERATING_DOXYGEN_OUTPUT
00408
00409 typedef ENUMSET<USAGE, USAGE_LAST> USAGESET;
00410 typedef std::vector<FIELDINFO> FIELDINFOARRAY;
00411 #ifndef GENERATING_DOXYGEN_OUTPUT
00412 class CONSTRAINT;
00413 class LINKPARMS;
00414 class MAKEPARMS;
00415 class MAKEPARM_ID_ELEMENT;
00416 class MAKEPARM_ID_POINT;
00417 class MAKEPARM_STYLE_ELEMENT;
00418 class MAKEPARM_STYLE_CAD;
00419 typedef MAKEPARM_STYLE_CAD MAKEPARM_STYLE_MULTI;
00420 class MAKEPARM_STYLE_LINE;
00421 class MAKEPARM_STYLE_POINT;
00422 class MAKEPARM_STYLE_POLYGON;
00423 class MAKEPARM_SCALESELECT;
00424 class MAKEPARM_SELECTION;
00425 class MAKEPARM_LEGENDELEMENT;
00426 class MAKEPARM_NODETURN;
00427 class MAKEPARM_ORACLE;
00428 class RECORDITERATOR;
00429 class CONST_RECORDITERATOR;
00430 class OBSERVER;
00431 #endif // GENERATING_DOXYGEN_OUTPUT
00432
00434 class CONSTRAINT {
00435 public:
00436 enum CASE {
00437 CASE_None = 0,
00438 CASE_ForceUpperCase = DBFIELDCONSTRAINT_Case_AllUpper,
00439 CASE_ForceLowerCase = DBFIELDCONSTRAINT_Case_AllLower,
00440 CASE_CapFirstLetter = DBFIELDCONSTRAINT_Case_FirstLetterCap,
00441 CASE_CapFirstWord = DBFIELDCONSTRAINT_Case_FirstWordCap,
00442 };
00443
00444 enum PKTABLE {
00445 PKTABLE_None = 0,
00446 PKTABLE_MustExist = DBFIELDCONSTRAINT_PrimaryKey_MustExist,
00447 PKTABLE_AutoAdd = DBFIELDCONSTRAINT_PrimaryKey_AutoAdd,
00448 PKTABLE_AutoAddPrompt = DBFIELDCONSTRAINT_PrimaryKey_PromptAdd,
00449 };
00450
00451 enum KEYMODE {
00452 KEYMODE_None = 0,
00453 KEYMODE_ComboBox = DBFIELDCONSTRAINT_UI_ComboBox,
00454 KEYMODE_OptionMenu = DBFIELDCONSTRAINT_UI_OptionMenu,
00455 KEYMODE_CSVListAllowDups = DBFIELDCONSTRAINT_ValueList_AllowDups,
00456 KEYMODE_CSVListUnique = DBFIELDCONSTRAINT_ValueList_NoDups,
00457 };
00458
00459 enum RANGEFLAG {
00460 RANGEFLAG_None = 0,
00461 RANGEFLAG_MinExclusive = DBFIELDCONSTRAINT_Range_MinExclusive,
00462 RANGEFLAG_MaxExclusive = DBFIELDCONSTRAINT_Range_MaxExclusive,
00463 RANGEFLAG_MinInclusive = DBFIELDCONSTRAINT_Range_MinInclusive,
00464 RANGEFLAG_MaxInclusive = DBFIELDCONSTRAINT_Range_MaxInclusive,
00465 RANGEFLAG_MINMASK = DBFIELDCONSTRAINT_Range_Min_MASK,
00466 RANGEFLAG_MAXMASK = DBFIELDCONSTRAINT_Range_Max_MASK,
00467 };
00468
00469 enum DEFAULTFLAG {
00470 DEFAULT_Zero = 0,
00471 DEFAULT_Constant = DBFIELDCONSTRAINT_Default_Constant,
00472 DEFAULT_Blank = DBFIELDCONSTRAINT_Default_Empty,
00473 };
00474
00476 CONSTRAINT (
00477 );
00478
00480 CONSTRAINT (
00481 const CONSTRAINT& rhs
00482 );
00483
00485 ~CONSTRAINT (
00486 ) {}
00487
00488 #ifndef NO_DEPRECATED
00490 DEPRECATED bool CanBeEmpty (
00491 ) const {return (!m_NotNull);}
00492 #endif
00493
00494 void Clear (
00495 );
00496
00497 CASE GetCaseFlags (
00498 ) const {return (m_Case);}
00499
00500 double GetDefaultNum (
00501 ) const {return (m_DefaultNum);}
00502
00503 DEFAULTFLAG GetDefaultFlags (
00504 ) const {return (m_DefaultFlags);}
00505
00506 KEYMODE GetKeyMode (
00507 ) const {return (m_KeyMode);}
00508
00509 const MISTRING& GetPrefixLabel (
00510 ) const {return (m_Label);}
00511
00512 const MISTRING& GetPostfixLabel (
00513 ) const {return (m_LabelAfter);}
00514
00515 PKTABLE GetPkTableFlags (
00516 ) const {return (m_PkTable);}
00517
00518 const DOUBLE_RANGE& GetRange (
00519 ) const {return (m_Range);}
00520
00521 RANGEFLAG GetRangeFlags (
00522 ) const {return (m_RangeFlags);}
00523
00524 bool IsAutoComplete (
00525 ) const {return (m_AutoComplete);}
00526
00527 void SetAutoComplete (
00528 bool value
00529 ) {m_AutoComplete = value;}
00530
00531 void SetCaseFlags (
00532 CASE flags
00533 ) {m_Case = flags;}
00534
00535 void SetDefaultNum (
00536 double number
00537 ) {m_DefaultNum = number;}
00538
00539 #ifndef NO_DEPRECATED
00541 DEPRECATED void SetEmpty (
00542 bool value
00543 ) {m_NotNull = !value;}
00544 #endif
00545
00546 void SetDefaultFlags (
00547 DEFAULTFLAG flags
00548 ) {m_DefaultFlags = flags;}
00549
00550 void SetKeyMode (
00551 KEYMODE flags
00552 ) {m_KeyMode = flags;}
00553
00554 void SetPrefixLabel (
00555 const MISTRING& label
00556 ) {m_Label = label;}
00557
00558 void SetPostfixLabel (
00559 const MISTRING& label
00560 ) {m_LabelAfter = label;}
00561
00562 void SetPkTableFlags (
00563 PKTABLE flags
00564 ) {m_PkTable = flags;}
00565
00566 void SetRange (
00567 const DOUBLE_RANGE& range
00568 ) {m_Range = range;}
00569
00570 void SetRangeFlags (
00571 RANGEFLAG flags
00572 ) {m_RangeFlags = flags;}
00573
00574 private:
00575 #ifndef GENERATING_DOXYGEN_OUTPUT
00576
00577 RANGEFLAG m_RangeFlags;
00578 DEFAULTFLAG m_DefaultFlags;
00579 KEYMODE m_KeyMode;
00580 CASE m_Case;
00581 PKTABLE m_PkTable;
00582 DOUBLE_RANGE m_Range;
00583 double m_DefaultNum;
00584 bool m_NotNull;
00585 bool m_AutoComplete;
00586 MISTRING m_Label;
00587 MISTRING m_LabelAfter;
00588
00589 void GetConstraint (DBCONSTRAINT& rhs) const;
00590 void SetConstraint (const DBCONSTRAINT& rhs);
00591
00592 friend class DBTABLE;
00593 friend class SHAPE;
00594 #endif // GENERATING_DOXYGEN_OUTPUT
00595 };
00596
00597
00598 class FIELDINFO {
00599 public:
00600
00608 enum NEXTFIELD {
00609 NEXTFIELD_ThisFieldName = 0xFFFF,
00610 NEXTFIELD_ThisTableName = 0xFFFE,
00611 NEXTFIELD_DomID = 0xFFFD,
00612 NEXTFIELD_PseudoField = 0xFFFC
00613 };
00614
00615 enum FLAGS {
00616 FLAG_None = 0x0000,
00617 FLAG_PrimaryKey = 0x0001,
00618 FLAG_PK = FLAG_PrimaryKey,
00619 FLAG_ForeignKey = 0x0002,
00620 FLAG_Indexed = 0x0004,
00621 FLAG_ComputeOnRead = 0x0008,
00622 FLAG_NotNULL = 0x0010,
00623 FLAG_Unique = 0x0020,
00624 FLAG_ReadOnly = 0x0040,
00625 FLAG_SecondaryKey = 0x0080,
00626 FLAG_Invisible = 0x0100,
00627 FLAG_Closest = 0x0200,
00628 FLAG_RangeAbove = 0x0400,
00629 FLAG_RangeBelow = 0x0800,
00630 FLAG_ComputeOnWrite = 0x1000,
00631 FLAG_ComputedMASK = 0x1008,
00632 FLAG_LocalTime = 0x2000,
00633 FLAG_AutoIncrement = 0x4000,
00634 FLAG_SSIndex = 0x10000,
00635 FLAG_Searchable = (FLAG_Indexed | FLAG_SSIndex)
00636 };
00637
00638 enum TYPE {
00639 TYPE_Invalid = 0,
00640 TYPE_String = 1,
00641 TYPE_Char = 2,
00642 TYPE_UINT8 = 3,
00643 TYPE_SINT8 = 4,
00644 TYPE_UINT16 = 5,
00645 TYPE_SINT16 = 6,
00646 TYPE_UINT32 = 7,
00647 TYPE_SINT32 = 8,
00648 TYPE_Float = 9,
00649 TYPE_Double = 10,
00650 TYPE_Logical = 11,
00651 TYPE_Date = 12,
00652 TYPE_UINT64 = 13,
00653 TYPE_SINT64 = 14,
00654 TYPE_Color = 15,
00655 TYPE_Binary = 16,
00656 TYPE_Memo = 17,
00657 TYPE_Unicode = 18,
00658 TYPE_DateTime = 19,
00659 TYPE_NUMTYPES,
00660 #ifndef GENERATING_DOXYGEN_OUTPUT
00661 TYPE_UByte = TYPE_UINT8,
00662 TYPE_Byte = TYPE_SINT8,
00663 TYPE_UWord = TYPE_UINT16,
00664 TYPE_Word = TYPE_SINT16,
00665 TYPE_ULong = TYPE_UINT32,
00666 TYPE_Long = TYPE_SINT32,
00667 TYPE_UDLong = TYPE_UINT64,
00668 TYPE_DLong = TYPE_SINT64,
00669 #endif
00670 };
00671
00672 enum USAGE {
00673 USAGE_Undefined = 0,
00674 USAGE_XCoord = 1,
00675 USAGE_YCoord,
00676 USAGE_ZCoord,
00677 USAGE_Label,
00678 USAGE_Filename,
00679 USAGE_ObjName,
00680 USAGE_ImageBLOB,
00681 USAGE_ImageFile,
00682 USAGE_ImageURL,
00683 USAGE_ImageName,
00684 USAGE_Spatial,
00685 USAGE_HyperLink,
00686 USAGE_DataTip,
00687 USAGE_Heading,
00688 USAGE_Velocity,
00689 USAGE_CRS,
00690 USAGE_DateTime,
00691 USAGE_ImageThumbnail,
00692 USAGE_ImageDescription,
00693 USAGE_RecordModTime,
00694 USAGE_EnumLabel,
00695 USAGE_EnumToolTip,
00696 USAGE_ElementID,
00697 USAGE_ElementName,
00698 USAGE_ElementDesc,
00699 USAGE_LAST
00700 };
00701
00702
00703 enum FORMAT {
00704 FORMAT_Undefined = 0,
00705 FORMAT_OGC_WKB = 1,
00706 FORMAT_OGC_WKT,
00707 FORMAT_ImageJPG,
00708 FORMAT_ImagePNG,
00709 };
00710
00711 typedef ENUMSET<USAGE, USAGE_LAST> USAGESET;
00712
00714 FIELDINFO (
00715 );
00716
00718 FIELDINFO (
00719 const FIELDINFO& rhs
00720 );
00721
00722 ~FIELDINFO (
00723 );
00724
00726 FIELDINFO& operator= (
00727 const FIELDINFO& rhs
00728 );
00729
00731 void Clear (
00732 );
00733
00735 void ClearFlag (
00736 FLAGS flag
00737 );
00738
00740 void ClearLink (
00741 );
00742
00744 void ClearNextLinkField (
00745 );
00746
00750 TYPE CompareFieldTypes (
00751 const FIELDINFO& rhs,
00752 bool& ExactMatch
00753 ) const;
00754
00757 UINT32 GetAutoIncrement (
00758 ) const;
00759
00762 int GetDecimalPlaces (
00763 ) const;
00764
00767 int GetDispUnits (
00768 ) const;
00769
00772 int GetDispWidth (
00773 ) const;
00774
00777 const RVC::OBJECTNAME& GetDomainID (
00778 ) const;
00779
00782 FLAGS GetFlags (
00783 ) const;
00784
00789 FORMAT GetFormat (
00790 ) const;
00791
00792 const RVC::DBTABLE::CONSTRAINT& GetConstraint (
00793 ) const { return (m_Constraint); }
00794
00795 const RVC::DESCRIPTOR& GetDescriptor (
00796 ) const { return (m_Descriptor); }
00797
00798 #ifndef NO_DEPRECATED
00802 DEPRECATED const RVC::OBJECTNAME& GetName (
00803 ) const {return (GetShortName());}
00804 #endif
00805
00809 const RVC::OBJECTNAME& GetShortName (
00810 ) const;
00811
00815 const MISTRING& GetFullName (
00816 ) const {return (m_Descriptor.GetFullName());}
00817
00820 INT32 GetNextLinkField (
00821 ) const;
00822
00823 INT32 GetOffset (
00824 ) const;
00825
00828 NEXTFIELD GetPseudoNextLinkField (
00829 ) const;
00830
00834 INT32 GetRelatedField (
00835 ) const;
00836
00840 INT32 GetRelatedTable (
00841 ) const;
00842
00845 INT32 GetSize (
00846 ) const;
00847
00850 TYPE GetType (
00851 ) const;
00852
00854 void GetUnits (
00855 UNITCONV& conv,
00856 bool bGetUnitsShown = false
00857 ) const;
00858
00864 UOM::UNIT GetUnits (
00865 bool bGetUnitsShown = false
00866 ) const;
00867
00868 int GetUnitType () const;
00869
00872 USAGE GetUsage () const;
00873
00876 bool HasRelation () const;
00877
00880 bool HasNextKey () const;
00881
00884 bool HasPseudoNextKey () const;
00885
00888 bool IsNumeric () const;
00889
00892 bool IsString () const;
00893
00895 void ResetPosition ();
00896
00898 void SetAutoIncrement (
00899 UINT32 count
00900 );
00901
00902 void SetConstraint (
00903 const RVC::DBTABLE::CONSTRAINT& Constraint
00904 ) { m_Constraint = Constraint; }
00905
00906 void SetDescription (
00907 const MISTRING& Description
00908 ) { m_Descriptor.SetDescription(Description); }
00909
00910 void SetDescriptor (
00911 const RVC::DESCRIPTOR& Descriptor
00912 ) { m_Descriptor = Descriptor; }
00913
00915 void SetDecimalPlaces (
00916 int decplaces
00917 );
00918
00920 void SetDispUnits (
00921 int unit
00922 );
00923
00925 void SetDispWidth (
00926 int width
00927 );
00928
00930 void SetDomainID (
00931 const RVC::OBJECTNAME& name
00932 );
00933
00935 void SetFlags (
00936 FLAGS flags
00937 );
00938
00940 void SetFlag (
00941 FLAGS flag
00942 );
00943
00947 void SetFormat (
00948 FORMAT format
00949 );
00950
00952 void SetLink (
00953 INT32 TableNum,
00954 INT32 FieldNum,
00955 INT32 NextFieldNum = -1
00956 );
00957
00959 void SetLink (
00960 INT32 TableNum,
00961 INT32 FieldNum,
00962 NEXTFIELD NextFieldNum
00963 );
00964
00966 void SetName (
00967 const RVC::OBJECTNAME& name
00968 );
00969
00971 void SetName (
00972 const MISTRING& name
00973 );
00974
00979 void SetName (
00980 TEXTID name
00981 );
00982
00984 void SetNextLinkField (
00985 INT32 NextFieldNum
00986 );
00987
00989 void SetNextLinkField (
00990 NEXTFIELD NextFieldNum
00991 );
00992
00996 void SetOffset (
00997 int offset
00998 );
00999
01001 void SetSize (
01002 INT32 size
01003 );
01004
01006 void SetType (
01007 TYPE type
01008 );
01009
01013 void SetUnits (
01014 const UNITCONV& conv
01015 );
01016
01021 void SetUnits (
01022 const UOM::UNIT& units,
01023 bool bSetUnitsStored = true,
01024 bool bSetUnitsShown = true
01025 );
01026
01031 void SetUnits (
01032 UOM::IDNUM units,
01033 bool bSetUnitsStored = true,
01034 bool bSetUnitsShown = true
01035 );
01036
01041 void SetUnitsShown (
01042 const UNITCONV& conv
01043 );
01044
01046 void SetUsage (
01047 USAGE usage
01048 );
01049
01050 private:
01051 #ifndef GENERATING_DOXYGEN_OUTPUT
01052 DBFIELDINFO* m_pFieldInfo;
01053 RVC::DESCRIPTOR m_Descriptor;
01054 RVC::DBTABLE::CONSTRAINT m_Constraint;
01055
01056 const DBFIELDINFO* GetFieldInfoPtr () const {return (m_pFieldInfo); }
01057 DBFIELDINFO* GetFieldInfoPtr () {return (m_pFieldInfo); }
01058
01059 friend class DBTABLE;
01060 friend class DBTABLE::CURSOR;
01061 friend class DBTABLE::RECORD;
01062 friend class SHAPE;
01063 #endif // GENERATING_DOXYGEN_OUTPUT
01064 };
01065
01066
01068 static TEXTID GetAttachmentTextID (
01069 ATTACHMENT attachment
01070 );
01071
01073 static bool HasDBTypeCapability (
01074 LINKTYPE LinkType,
01075 CAPABILITY Capability
01076 );
01077
01079 DBTABLE (
01080 );
01081
01083 DBTABLE (
01084 const RVC::DBTABLE& rhs
01085 );
01086
01088 virtual ~DBTABLE (
01089 );
01090
01092 RVC::DBTABLE& operator= (
01093 const RVC::DBTABLE& rhs
01094 );
01095
01104 INT32 AddRecord (
01105 RECORD& Record
01106 );
01107
01109 ERRVALUE AddRecord (
01110 RECORD& Record,
01111 BOOKMARK& Bookmark
01112 );
01113
01115 ERRVALUE BuildIndex (
01116 INT32 FieldNum,
01117 KEYFLAGS flags = KEYFLAG_Indexed
01118 );
01119
01123 ERRVALUE ChangeAttachmentType (
01124 ATTACHMENT Attachment,
01125 ELEMTYPE ElemType = ELEMTYPE_Empty
01126 );
01127
01128 #ifndef NO_DEPRECATED
01130 DEPRECATED ERRVALUE Combine (
01131 const RVC::DBTABLE& rhs,
01132 RVC::DBASE::JOINFLAGS flags,
01133 RVC::DBASE& dest,
01134 const MISTRING& name,
01135 const MISTRING& desc
01136 );
01137 #endif
01138
01140 ERRVALUE Combine (
01141 const RVC::DBTABLE& rhs,
01142 RVC::DBASE::JOINFLAGS flags,
01143 RVC::DBASE& dest,
01144 const RVC::DESCRIPTOR& DestDescriptor
01145 );
01146
01149 STRUCTCOMPARE CompareStructures (
01150 const RVC::DBTABLE& rhs
01151 ) const;
01152
01164 ATTACHMENT ComputeMinimumAttachmentType (
01165 ELEMTYPE ElemType = ELEMTYPE_Empty
01166 ) const;
01167
01169 ERRVALUE CopyRecordAttachmentsTo (
01170 RVC::DBTABLE& DestTable,
01171 const SIMPLE_ARRAY<INT32>& SrcToDestTrans
01172 ) const;
01173
01194 ERRVALUE CopyTo (
01195 RVC::DBASE& DestDatabase,
01196 RVC::DESCRIPTOR *pDestDescriptor = 0,
01197 INT32* pNewTableNumber = 0,
01198 SIMPLE_ARRAY<INT32>* pRecordTrans = 0,
01199 DELEGATE_BOOL_UINT32 Filter = 0,
01200 const RVC::CREDENTIALS *pCredentials = 0,
01201 RVC::DBASE::COPYFLAG flags = RVC::DBASE::COPYFLAG_None
01202 ) const;
01203
01205 ERRVALUE Drop (
01206 bool CleanDBList
01207 );
01208
01210 ERRVALUE DeleteRecord (
01211 INT32 RecordNum
01212 );
01213
01215 ERRVALUE DeleteRecord (
01216 CURSOR& cursor,
01217 const BOOKMARK& bookmark
01218 );
01219
01220 #ifndef NO_DEPRECATED
01224 DEPRECATED INT32 FindField (
01225 const RVC::OBJECTNAME& name
01226 ) const;
01227 #endif
01228
01231 INT32 FindField (
01232 const MISTRING& name
01233 ) const;
01234
01237 INT32 FindFieldByShortName (
01238 const RVC::OBJECTNAME& name
01239 ) const;
01240
01245 INT32 FindFieldByUsage (
01246 RVC::DBTABLE::FIELDINFO::USAGE Usage
01247 ) const;
01248
01251 INT32 FindRecords (
01252 INT32 FieldNum,
01253 double value,
01254 SIMPLE_ARRAY<INT32>& FoundRecList
01255 ) const;
01256
01259 INT32 FindRecords (
01260 INT32 FieldNum,
01261 const char* string,
01262 SIMPLE_ARRAY<INT32>& FoundRecList,
01263 CHAR_ENCODING Encoding = CHAR_ENCODING_UTF8
01264 ) const;
01265
01268 INT32 FindRecords (
01269 INT32 FieldNum,
01270 const MIUNICODE* string,
01271 SIMPLE_ARRAY<INT32>& FoundRecList
01272 ) const;
01273
01276 INT32 FindRecords (
01277 INT32 FieldNum,
01278 const MISTRING& string,
01279 SIMPLE_ARRAY<INT32>& FoundRecList
01280 ) const;
01281
01284 INT32 FindRecords (
01285 INT32 FieldNum,
01286 const RECORD& record,
01287 SIMPLE_ARRAY<INT32>& FoundRecList,
01288 INT32 RecordFieldNum = -1
01289 ) const;
01290
01293 INT32 GetAttachedRecords (
01294 INT32 ElementNum,
01295 ELEMTYPE ElemType,
01296 SIMPLE_ARRAY<INT32>& RecordList,
01297 FINDFLAG FindFlags = FINDFLAG_AllAttached,
01298 DBTABLE* SourceTable = 0
01299 ) const;
01300
01303 ATTACHMENT GetAttachmentType (
01304 ) const;
01305
01308 bool HasCapability (
01309 CAPABILITY capability
01310 ) const;
01311
01313 ERRVALUE GetComputedFieldQuery (
01314 INT32 FieldNum,
01315 MISTRING& QueryStr
01316 ) const;
01317
01320 CHAR_ENCODING GetEncoding (
01321 ) const;
01322
01324 ERRVALUE GetFieldIndex (
01325 INT32 FieldNum,
01326 SIMPLE_ARRAY<INT32>& Index,
01327 BITSET& DuplicateBits
01328 );
01329
01331 ERRVALUE GetFieldDescriptor (
01332 INT32 FieldNum,
01333 RVC::DESCRIPTOR& Descriptor
01334 ) const;
01335
01337 ERRVALUE GetFieldInfo (
01338 INT32 FieldNum,
01339 FIELDINFO& FieldInfo
01340 ) const;
01341
01343 ERRVALUE GetFieldInfo (
01344 FIELDINFOARRAY& FieldArray
01345 ) const;
01346
01348 ERRVALUE GetLinkFields (
01349 INT32 StartFieldNum,
01350 SIMPLE_ARRAY<INT32>& FieldNumArray
01351 ) const;
01352
01354 LINKTYPE GetLinkType (
01355 ) const;
01356
01358 INT32 GetNumDeletedRecords (
01359 ) const;
01360
01363 INT32 GetNumFields (
01364 ) const;
01365
01371 INT32 GetNumRecords (
01372 ) const;
01373
01376 REFELEM GetReferenceElement (
01377 ) const;
01378
01381 INT32 GetRelatedRecords (
01382 INT32 RecordNum,
01383 INT32 BaseTableNum,
01384 SIMPLE_ARRAY<INT32>& RecordList,
01385 FINDFLAG FindFlags = FINDFLAG_AllAttached
01386 ) const;
01387
01390 INT32 GetRelatedRecords (
01391 const RECORD& record,
01392 SIMPLE_ARRAY<INT32>& RecordList,
01393 FINDFLAG FindFlags = FINDFLAG_AllAttached
01394 ) const;
01395
01401 ERRVALUE GetTableMetadata (
01402 SIMPLE_ARRAY<UINT8>& buffer
01403 ) const;
01404
01407 INT32 GetTableNumber (
01408 ) const;
01409
01412 USAGE GetUsage (
01413 ) const;
01414
01416 VIEWMODE GetViewMode (
01417 ) const;
01418
01421 LRECT2D GetWindowRect (
01422 ) const;
01423
01426 bool IsHidden (
01427 ) const;
01428
01431 bool IsInternal (
01432 ) const;
01433
01436 bool IsMissing (
01437 ) const;
01438
01441 bool IsPrompt (
01442 ) const;
01443
01446 bool IsUserDefined (
01447 ) const;
01448
01451 bool IsValid (
01452 ) const;
01453
01456 bool IsWritable (
01457 ) const;
01458
01460 ERRVALUE Link (
01461 RVC::DBASE& parent,
01462 const DESCRIPTOR& Descriptor,
01463 const LINKPARMS& LinkParms,
01464 const CREDENTIALS *pCredentials RVC_DEFAULT_CREDENTIALS
01465 );
01466
01468 ERRVALUE Make (
01469 RVC::DBASE& parent,
01470 const DESCRIPTOR& Descriptor,
01471 MAKEPARMS& MakeParms,
01472 const CREDENTIALS *pCredentials RVC_DEFAULT_CREDENTIALS
01473 );
01474
01477 ERRVALUE MakeDistinctTableFromField (
01478 RVC::DBASE& parent,
01479 const RVC::DBTABLE& SourceTable,
01480 INT32 Field,
01481 const DESCRIPTOR& Descriptor,
01482 const CREDENTIALS *pCredentials RVC_DEFAULT_CREDENTIALS
01483 );
01484
01486 ERRVALUE Open (
01487 const RVC::DBASE& parent,
01488 const MISTRING& TableName,
01489 #ifdef RVC_CREDENTIALS_MANDATORY
01490 OPENMODE OpenMode,
01491 MDLGPARENT dlgparent,
01492 const CREDENTIALS *pCredentials
01493 #else
01494 OPENMODE OpenMode = OPENMODE_Read,
01495 MDLGPARENT dlgparent = 0,
01496 const CREDENTIALS *pCredentials = 0
01497 #endif
01498 );
01499
01501 ERRVALUE Open (
01502 const RVC::DBASE& parent,
01503 const RVC::OBJECTNAME& ShortName,
01504 #ifdef RVC_CREDENTIALS_MANDATORY
01505 OPENMODE OpenMode,
01506 MDLGPARENT dlgparent,
01507 const CREDENTIALS *pCredentials
01508 #else
01509 OPENMODE OpenMode = OPENMODE_Read,
01510 MDLGPARENT dlgparent = 0,
01511 const CREDENTIALS *pCredentials = 0
01512 #endif
01513 );
01514
01516 ERRVALUE Open (
01517 const RVC::DBASE& parent,
01518 INT32 TableNum,
01519 #ifdef RVC_CREDENTIALS_MANDATORY
01520 OPENMODE OpenMode,
01521 MDLGPARENT dlgparent,
01522 const CREDENTIALS *pCredentials
01523 #else
01524 OPENMODE OpenMode = OPENMODE_Read,
01525 MDLGPARENT dlgparent = 0,
01526 const CREDENTIALS *pCredentials = 0
01527 #endif
01528 );
01529
01531 ERRVALUE Open (
01532 const DBTABLE& twin,
01533 #ifdef RVC_CREDENTIALS_MANDATORY
01534 OPENMODE OpenMode,
01535 MDLGPARENT dlgparent,
01536 const CREDENTIALS *pCredentials
01537 #else
01538 OPENMODE OpenMode = OPENMODE_Read,
01539 MDLGPARENT dlgparent = 0,
01540 const CREDENTIALS *pCredentials = 0
01541 #endif
01542 );
01543
01547 ERRVALUE Open (
01548 const RVC::OBJITEM& ObjItem,
01549 #ifdef RVC_CREDENTIALS_MANDATORY
01550 OPENMODE OpenMode,
01551 MDLGPARENT dlgparent,
01552 const CREDENTIALS *pCredentials
01553 #else
01554 OPENMODE OpenMode = OPENMODE_Read,
01555 MDLGPARENT dlgparent = 0,
01556 const CREDENTIALS *pCredentials = 0
01557 #endif
01558 );
01559
01562 ERRVALUE Open (
01563 #ifdef RVC_CREDENTIALS_MANDATORY
01564 OPENMODE OpenMode,
01565 MDLGPARENT dlgparent,
01566 const CREDENTIALS *pCredentials
01567 #else
01568 OPENMODE OpenMode = OPENMODE_Read,
01569 MDLGPARENT dlgparent = 0,
01570 const CREDENTIALS *pCredentials = 0
01571 #endif
01572 );
01573
01574 #ifndef GENERATING_DOXYGEN_OUTPUT
01575
01576
01577
01578
01579 ERRVALUE Open (
01580 const SML::TABLEDATA* TableData,
01581 OPENMODE mode = OPENMODE_Read
01582
01583 );
01584 #endif // doxygen
01585
01587 ERRVALUE Read (
01588 const BOOKMARK& Bookmark,
01589 RECORD& Record
01590 ) const {return (Read(0, 0, &Bookmark, Record, RECACC_Bookmark));}
01591
01593 ERRVALUE Read (
01594 INT32 RecordNum,
01595 RECORD& Record
01596 ) const {return (Read(0, RecordNum, 0, Record, RECACC_RecordNum));}
01597
01599 ERRVALUE Read (
01600 CURSOR& cursor,
01601 RECORD& Record
01602 ) const {return (Read(&cursor, 0, 0, Record, RECACC_Cursor));}
01603
01605 ERRVALUE Read (
01606 CURSOR& cursor,
01607 const BOOKMARK& bookmark,
01608 RECORD& Record
01609 ) const {return (Read(&cursor, 0, &bookmark, Record, RECACC_Bookmark));}
01610
01612 ERRVALUE ReadDefault (
01613 RECORD& Record
01614 ) const {return (Read(0, RECORD_New, 0, Record, RECACC_RecordNum));}
01615
01616 ERRVALUE ReadConstraint (
01617 std::vector<CONSTRAINT>& ConstraintList
01618 ) const;
01619
01620 INT32 ReadInverseDBList (
01621 INT32 RecNum,
01622 SIMPLE_ARRAY<DBLISTELMT>& List
01623 );
01624
01626 void RecordBegin (
01627 CONST_RECORDITERATOR& Iterator,
01628 ITERATERECORD IterateRecord = ITERATERECORD_SkipDeleted,
01629 INT32 FieldNum = 0
01630 ) const;
01631
01633 void RecordBegin (
01634 RECORDITERATOR& Iterator,
01635 ITERATERECORD IterateRecord = ITERATERECORD_SkipDeleted,
01636 INT32 FieldNum = 0
01637 );
01638
01640 ERRVALUE RemoveDuplicateRecords (
01641 );
01642
01644 ERRVALUE RemoveUnattachedRecords (
01645 );
01646
01648 ERRVALUE Resize (
01649 INT32 NewNumRecords,
01650 bool CleanDBList
01651 );
01652
01655 template <class _CT>
01656 INT32 SearchIndex (
01657 INT32 FieldNum,
01658 const _CT& item,
01659 const FIELDINFO& finfo,
01660 INT32& offset,
01661 INDEXSEARCH flag = INDEXSEARCH_ReturnIndexOffset,
01662 CHAR_ENCODING Encoding = CHAR_ENCODING_ASCII
01663 ) const {return (SearchIndex(FieldNum, &item, &finfo, &offset, flag));}
01664
01667 template <class _CT>
01668 INT32 SearchIndex (
01669 INT32 FieldNum,
01670 const _CT& item,
01671 INT32& offset,
01672 INDEXSEARCH flag = INDEXSEARCH_ReturnIndexOffset,
01673 CHAR_ENCODING Encoding = CHAR_ENCODING_ASCII
01674 ) const {return (SearchIndex(FieldNum, &item, 0, &offset, flag, Encoding));}
01675
01678 INT32 SearchIndex (
01679 INT32 FieldNum,
01680 double value,
01681 INT32& offset,
01682 INDEXSEARCH flag
01683 ) const;
01684
01687 INT32 SearchIndex (
01688 INT32 FieldNum,
01689 const MISTRING& value,
01690 INT32& offset,
01691 INDEXSEARCH flag
01692 ) const;
01693
01696 INT32 SearchIndex (
01697 INT32 FieldNum,
01698 const RECORD& Record,
01699 INT32 RecFieldNum,
01700 INT32& offset,
01701 INDEXSEARCH flag
01702 ) const;
01703
01708 ERRVALUE SetAttachmentType (
01709 ATTACHMENT Attachment
01710 );
01711
01713 ERRVALUE SetComputedFieldQuery (
01714 INT32 FieldNum,
01715 const MISTRING& QueryStr
01716 );
01717
01719 void SetEncoding (
01720 CHAR_ENCODING Encoding
01721 );
01722
01726 ERRVALUE SetFieldDescriptor (
01727 const RVC::DESCRIPTOR& Descriptor
01728 );
01729
01731 ERRVALUE SetFieldInfo (
01732 INT32 FieldNum,
01733 const FIELDINFO& FieldInfo
01734 );
01735
01737 ERRVALUE SetFieldInfo (
01738 FIELDINFOARRAY& FieldArray
01739 );
01740
01742 ERRVALUE SetFieldInfo (
01743 FIELDINFOARRAY& FieldArray,
01744 const SIMPLE_ARRAY<int>& NewToOld
01745 );
01746
01748 ERRVALUE SetPromptOnAddElement (
01749 bool prompt = true
01750 );
01751
01753 ERRVALUE SetReferenceElement (
01754 REFELEM RefElem
01755 );
01756
01759 ERRVALUE SetReadOnly (
01760 bool bReadOnly = true
01761 );
01762
01764 ERRVALUE SetUsage (
01765 DBTABLE::USAGE usage
01766 );
01767
01769 ERRVALUE SetViewMode (
01770 VIEWMODE ViewMode
01771 );
01772
01774 void SetWindowRect (
01775 const LRECT2D& rect
01776 );
01777
01781 ERRVALUE UpgradeLinkToOLEDB (
01782 );
01783
01786 ERRVALUE ValidateAccess (
01787 PERMISSIONS Permission,
01788 bool bGenerateErrorMsg = true
01789 ) const;
01790
01793 ERRVALUE ValidateAccess (
01794 INT32 FieldNum,
01795 PERMISSIONS Permission,
01796 bool bGenerateErrorMsg = true
01797 ) const;
01798
01802 ERRVALUE ValidateTableName (
01803 OBJECTNAME& NewTableName,
01804 SIMPLE_ARRAY<OBJECTNAME>& NewFieldNames
01805 );
01806
01808 ERRVALUE Write (
01809 INT32 RecordNum,
01810 RECORD& Record
01811 ) {return (Write(0, RecordNum, 0, Record, RECACC_RecordNum));}
01812
01814 ERRVALUE Write (
01815 const BOOKMARK& Bookmark,
01816 RECORD& Record
01817 ) {return (Write(0, 0, &Bookmark, Record, RECACC_Bookmark));}
01818
01820 ERRVALUE Write (
01821 CURSOR& cursor,
01822 RECORD& Record
01823 ) {return (Write(&cursor,0, 0, Record, RECACC_Cursor));}
01824
01826 ERRVALUE Write (
01827 CURSOR& cursor,
01828 const BOOKMARK& bookmark,
01829 RECORD& Record
01830 ) {return (Write(&cursor, 0, &bookmark, Record, RECACC_Bookmark));}
01831
01832 ERRVALUE WriteConstraint (
01833 const std::vector<CONSTRAINT>& ConstraintList
01834 );
01835
01836 protected:
01837
01838 #ifndef GENERATING_DOXYGEN_OUTPUT
01839 RVC::DBASE m_ParentObj;
01840 DATABASEHANDLE* m_DBHandle;
01841 OBJITEM m_DBObjItem;
01842 int m_TableID;
01843
01844 DATABASEHANDLE* GetDBHandle() const {return (m_DBHandle);}
01845
01846 virtual bool v_IsValidTable (const RVC::DBTABLE& table);
01847 virtual bool v_IsObjectOpen () const;
01848 #endif // GENERATING_DOXYGEN_OUTPUT
01849
01850 private:
01851 #ifndef GENERATING_DOXYGEN_OUTPUT
01852
01853 class TABLELIST;
01854
01855 enum RECACC {
01856 RECACC_RecordNum,
01857 RECACC_Cursor,
01858 RECACC_Bookmark
01859 };
01860
01862 virtual ERRVALUE v_CloseObject ();
01863 virtual ERRVALUE v_GetDescriptor (RVC::DESCRIPTOR& Descriptor, const CREDENTIALS *pCredentials) const;
01864 virtual OBJTYPE v_GetDftObjectType () const;
01865 virtual ERRVALUE v_GetParent (RVC::OBJECT& ObjParent) const;
01866 virtual ERRVALUE v_OpenObject (OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS *pCredentials);
01867
01868 ERRVALUE CopyRecordAttachmentsLow (
01869 const RVC::DBTABLE* SrcTable1,
01870 TABLEJOININFO* TableJoinInfo1,
01871 const RVC::DBTABLE* SrcTable2,
01872 TABLEJOININFO* TableJoinInfo2,
01873 DBASE::JOINFLAGS
01874 );
01875
01876
01877 INT32 GetRecordSize () const;
01878
01879
01880
01881 INT32 AppendTo (
01882 RVC::DBASE& DestDBase,
01883 const BITSET& recbit,
01884 RVC::DBTRANSINFO& TransInfo,
01885 RVC::DBTABLE::TABLELIST* TableEntry,
01886 INT32& rNextElemID,
01887 RVC::DBASE::JOINFLAGS flags
01888 );
01889
01890 static INT32 TestIsJoinable (
01891 const DBTABLE& src,
01892 const DBTABLE& dest,
01893 TABLELIST* TableEntry,
01894 RVC::DBASE::COPYFLAG CopyFlags,
01895 RVC::DBASE::JOINFLAGS JoinFlags
01896 );
01897
01898 ERRVALUE Read (
01899 CURSOR* cursor,
01900 INT32 RecordNum,
01901 const BOOKMARK* bookmark,
01902 RECORD& Record,
01903 RECACC flags
01904 ) const;
01905
01906 INT32 SearchIndex (
01907 INT32 FieldNum,
01908 void* buf,
01909 const FIELDINFO* finfo,
01910 INT32& offset,
01911 INDEXSEARCH flag = INDEXSEARCH_ReturnIndexOffset,
01912 CHAR_ENCODING = CHAR_ENCODING_ASCII
01913 ) const;
01914
01915 static void TableCallbackFunc (DBCALLBACKSTRUCT *cb, void *data);
01916
01917 ERRVALUE Write (
01918 CURSOR* cursor,
01919 INT32 RecordNum,
01920 const BOOKMARK* bookmark,
01921 RECORD& Record,
01922 RECACC flags
01923 );
01924
01925 ERRVALUE WriteBinary (
01926 CURSOR* cursor,
01927 INT32 RecordNum,
01928 const BOOKMARK* bookmark,
01929 INT32 FieldNum,
01930 const SIMPLE_ARRAY<UINT8>& binary,
01931 RECACC flags
01932 );
01933
01934 ERRVALUE WriteMemo (
01935 CURSOR* cursor,
01936 INT32 RecordNum,
01937 const BOOKMARK* bookmark,
01938 INT32 FieldNum,
01939 const MISTRING& string,
01940 RECACC flags
01941 );
01942
01943 friend class CURSOR;
01944 friend class DBASE;
01945 #endif // GENERATING_DOXYGEN_OUTPUT
01946
01947 };
01948
01949
01951 class DBTABLE::BOOKMARK {
01952 public:
01953
01955 explicit BOOKMARK (
01956 UINT32 Bookmark = 0
01957 ) : m_Bookmark(Bookmark) {}
01958
01960 BOOKMARK (
01961 const BOOKMARK& rhs
01962 ) : m_Bookmark(rhs.m_Bookmark) {}
01963
01965 BOOKMARK& operator= (
01966 const BOOKMARK& rhs
01967 ) {
01968 if (this != &rhs) m_Bookmark = rhs.m_Bookmark;
01969 return (*this);
01970 }
01971
01972 bool operator== (
01973 const BOOKMARK& rhs
01974 ) const {return (m_Bookmark == rhs.m_Bookmark);}
01975
01976 UINT32 GetValue (
01977 ) const { return m_Bookmark; }
01978
01979 private:
01980 #ifndef GENERATING_DOXYGEN_OUTPUT
01981 UINT32 m_Bookmark;
01982
01983 friend class DBTABLE;
01984 friend class DBTABLE::CURSOR;
01985 friend class DBTABLE::RECORD;
01986 #endif // GENERATING_DOXYGEN_OUTPUT
01987 };
01988
01989
01991 class DBTABLE::CURSOR {
01992 public:
01993 enum FUNCTION {
01994 FUNCTION_None = 0x00000000,
01995 FUNCTION_Unique = 0x00000001,
01996 FUNCTION_Sorted = 0x00000002,
01997 FUNCTION_Equal = 0x00000004,
01998 FUNCTION_GreaterThan = 0x00000008,
01999 FUNCTION_LessThan = 0x00000010,
02000 FUNCTION_NotEqual = 0x00000020,
02001 FUNCTION_AND = 0x00000040,
02002 FUNCTION_OR = 0x00000080,
02003 FUNCTION_NoClear = 0x00000100,
02004 FUNCTION_ForUpdate = 0x00000200
02005 };
02006
02008 enum INDEXFLAG {
02009 INDEXFLAG_None = 0,
02010 INDEXFLAG_IndexOffset = 0x00000001,
02011 INDEXFLAG_LeaveRunBit = 0x00000002
02012 };
02013
02015 explicit CURSOR (
02016 const RVC::DBTABLE& table
02017 );
02018
02020 ~CURSOR (
02021 );
02022
02024 bool operator== (
02025 const CURSOR& rhs
02026 ) const;
02027
02029 ERRVALUE GetBookmark (
02030 BOOKMARK& Bookmark
02031 ) const;
02032
02035 ERRVALUE GetIndex (
02036 INT32& Index,
02037 INDEXFLAG flags = INDEXFLAG_None
02038 ) const;
02039
02040 #ifndef NO_DEPRECATED
02044 DEPRECATED INT32 GetRecordNum (
02045 ) const;
02046 #endif
02047
02051 bool IsDone (
02052 ) const { return (!IsValid()); }
02053
02056 bool IsValid (
02057 ) const;
02058
02067 int Next (
02068 );
02069
02082 ERRVALUE Rewind (
02083 );
02084
02088 INT32 SeekValue (
02089 INT32 FieldNum,
02090 const void* vbuf,
02091 const FIELDINFO* finfo,
02092 bool bSingleField = true
02093 );
02094
02098 INT32 SeekValue (
02099 INT32 FieldNum,
02100 const MISTRING& value
02101 );
02102
02106 ERRVALUE SetFunction (
02107 INT32 FieldNum,
02108 FUNCTION Function
02109 );
02110
02112 ERRVALUE SetSort (
02113 const SIMPLE_ARRAY<INT32>& FieldList
02114 );
02115
02116 private:
02117 #ifndef GENERATING_DOXYGEN_OUTPUT
02118 const DBTABLE& m_Table;
02119
02120 class PRIV;
02121
02122 PRIV* m_Cursor;
02123
02124 CURSOR (const CURSOR& rhs);
02125 CURSOR& operator=(const CURSOR& rhs);
02126
02127 friend class DBTABLE;
02128 friend class DBTABLE::RECORD;
02129 #endif // GENERATING_DOXYGEN_OUTPUT
02130 };
02131
02132
02134 class DBTABLE::GETOBJFILTER_ISSELECTABLE : public RVC::GETOBJFILTER {
02135 public:
02136 GETOBJFILTER_ISSELECTABLE() : GETOBJFILTER() { }
02137 virtual ~GETOBJFILTER_ISSELECTABLE() { }
02138
02139 private:
02140 virtual bool v_IsSelectable (
02141 const RVC::OBJITEM& objitem,
02142 int position
02143 );
02144
02145 virtual bool v_HasSelectableSubObjects (
02146 const RVC::OBJITEM& objitem
02147 );
02148
02149 virtual bool v_IsValidParent (
02150 const RVC::OBJITEM& objitem
02151 );
02152 };
02153
02155 class DBTABLE::GETOBJFILTER_ISUSAGEVALID : public GETOBJFILTER {
02156 public:
02157 GETOBJFILTER_ISUSAGEVALID (
02158 const RVC::OBJITEM& DBaseObjItem,
02159 const USAGESET& UsageSet
02160 );
02161
02162 virtual ~GETOBJFILTER_ISUSAGEVALID () {}
02163 private:
02164 #ifndef GENERATING_DOXYGEN_OUTPUT
02165 const RVC::OBJITEM& m_DBaseObjItem;
02166 RVC::DBASE m_DBaseObj;
02167 const USAGESET m_UsageSet;
02168
02169 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
02170 #endif // GENERATING_DOXYGEN_OUTPUT
02171 };
02172
02173
02175 class DBTABLE::GETOBJFILTER_ISUSERDEFINED : public GETOBJFILTER {
02176 public:
02177 GETOBJFILTER_ISUSERDEFINED (
02178 const RVC::OBJITEM& DBaseObjItem
02179 );
02180
02181 virtual ~GETOBJFILTER_ISUSERDEFINED () {}
02182 private:
02183 #ifndef GENERATING_DOXYGEN_OUTPUT
02184 GETOBJFILTER_ISUSAGEVALID m_UsageValidFilter;
02185
02186 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
02187 #endif // GENERATING_DOXYGEN_OUTPUT
02188 };
02189
02190
02191
02193 class DBTABLE::LINKPARMS {
02194 public:
02195
02197 enum LINKFLAG {
02198 LINKFLAG_None = 0,
02199 LINKFLAG_KeepPassword = 0x00800000
02200 };
02201
02203 LINKPARMS (
02204 const FILEPATH& filepath,
02205 DBTABLE::LINKTYPE LinkType,
02206 CHAR_ENCODING Encoding,
02207 LINKFLAG LinkFlag = LINKFLAG_None,
02208 char Delimiter = ','
02209 );
02210
02212 LINKPARMS (
02213 const MISTRING& LinkString,
02214 DBTABLE::LINKTYPE LinkType,
02215 CHAR_ENCODING Encoding,
02216 LINKFLAG LinkFlag = LINKFLAG_None,
02217 char Delimiter = ','
02218 );
02219
02221 ~LINKPARMS ();
02222
02223 char GetDelimiter () const
02224 { return (m_Delimiter); }
02225
02227 CHAR_ENCODING GetEncoding () const
02228 { return (m_Encoding); }
02229
02230 LINKFLAG GetLinkFlag () const
02231 { return (m_LinkFlag); }
02232
02233 const MISTRING& GetLinkString () const
02234 { return (m_LinkString); }
02235
02238 DBTABLE::LINKTYPE GetLinkType () const
02239 { return (m_LinkType); }
02240
02241 private:
02242 #ifndef GENERATING_DOXYGEN_OUTPUT
02243 MISTRING m_LinkString;
02244 DBTABLE::LINKTYPE m_LinkType;
02245 CHAR_ENCODING m_Encoding;
02246 LINKFLAG m_LinkFlag;
02247 char m_Delimiter;
02248 #endif // GENERATING_DOXYGEN_OUTPUT
02249 };
02250
02251
02252
02253
02255 class DBTABLE::MAKEPARMS {
02256 public:
02258 MAKEPARMS (
02259 const DBTABLE::FIELDINFOARRAY& FieldInfoArray,
02260 DBTABLE::ATTACHMENT Attachment = ATTACHMENT_RelatedOnly,
02261 CHAR_ENCODING Encoding = CHAR_ENCODING_ASCII,
02262 DBTABLE::USAGE Usage = USAGE_UserDefined
02263 ) :
02264 m_FieldInfoArray(FieldInfoArray),
02265 m_Attachment(Attachment),
02266 m_Encoding(Encoding),
02267 m_Usage(Usage),
02268 m_RefElem(REFELEM_All),
02269 m_LinkObject(0),
02270 m_LinkType(LINKTYPE_Internal),
02271 m_Delimiter(0),
02272 m_bPromptTable(false),
02273 m_UseFieldNamesAsHeading(false)
02274 {}
02275
02277 MAKEPARMS (
02278 DBTABLE::ATTACHMENT Attachment = ATTACHMENT_RelatedOnly,
02279 CHAR_ENCODING Encoding = CHAR_ENCODING_ASCII,
02280 DBTABLE::USAGE Usage = USAGE_UserDefined
02281 ) :
02282 m_Attachment(Attachment),
02283 m_Encoding(Encoding),
02284 m_Usage(Usage),
02285 m_RefElem(REFELEM_All),
02286 m_LinkObject(0),
02287 m_LinkType(LINKTYPE_Internal),
02288 m_Delimiter(0),
02289 m_bPromptTable(false),
02290 m_UseFieldNamesAsHeading(false)
02291 {}
02292
02294 MAKEPARMS (
02295 const DBTABLE& Template
02296 );
02297
02298 virtual ~MAKEPARMS (){}
02299
02302 DBTABLE::ATTACHMENT GetAttachmentType (
02303 ) const {return (m_Attachment);}
02304
02307 char GetDelimiter (
02308 ) const { return (m_Delimiter); }
02309
02312 CHAR_ENCODING GetEncoding (
02313 ) const {return (m_Encoding);}
02314
02317 const DBTABLE::FIELDINFOARRAY& GetFieldInfo (
02318 ) const {return (m_FieldInfoArray);}
02319
02322 const MISTRING& GetLinkFile (
02323 ) const {return (m_NewLinkFile);}
02324
02325 #ifndef GENERATING_DOXYGEN_OUTPUT
02327 const RVC::OBJECT* GetLinkObject (
02328 ) const {return (m_LinkObject);}
02329 #endif // GENERATING_DOXYGEN_OUTPUT
02330
02333 DBTABLE::LINKTYPE GetLinkType (
02334 ) const {return (m_LinkType);}
02335
02337 bool GetPromptOnAddElement (
02338 ) const { return m_bPromptTable; }
02339
02342 DBTABLE::REFELEM GetReferenceElement (
02343 ) const {return (m_RefElem);}
02344
02347 DBTABLE::USAGE GetUsage (
02348 ) const {return (m_Usage);}
02349
02351 bool GetUseFieldNamesAsHeading () const
02352 { return (m_UseFieldNamesAsHeading); }
02353
02355 void SetAttachmentType (
02356 ATTACHMENT Attachment
02357 ) {m_Attachment = ((Attachment == ATTACHMENT_Unknown) ? ATTACHMENT_NoRestrictions : Attachment);}
02358
02362 void SetDelimiter (
02363 char delim
02364 ) { m_Delimiter = delim; }
02365
02367 void SetEncoding (
02368 CHAR_ENCODING Encoding
02369 ) {m_Encoding = Encoding;}
02370
02372 void SetFieldInfo (
02373 const FIELDINFOARRAY& FieldInfoArray
02374 ) {m_FieldInfoArray = FieldInfoArray;}
02375
02377 void SetLinkFile (
02378 const MISTRING& filename
02379 ) {m_NewLinkFile = filename;}
02380
02382 void SetLinkType (
02383 LINKTYPE LinkType
02384 ) {m_LinkType = LinkType;}
02385
02387 void SetPromptOnAddElement (
02388 bool prompt = true
02389 ) { m_bPromptTable = prompt; }
02390
02392 void SetReferenceElement (
02393 REFELEM RefElem
02394 ) {m_RefElem = RefElem;}
02395
02397 void SetUsage (
02398 USAGE Usage
02399 ) {m_Usage = Usage;}
02400
02402 void SetUseFieldNamesAsHeading (
02403 bool UseFieldNamesAsHeading
02404 ) { m_UseFieldNamesAsHeading = UseFieldNamesAsHeading; }
02405
02406 protected:
02407
02408 DBTABLE::FIELDINFOARRAY& GetFieldArray (
02409 ) {return (m_FieldInfoArray);}
02410
02411 void SetLinkObject (
02412 const OBJECT& object
02413 ) {m_LinkObject = &object;}
02414
02415 void SetupRelatedFields (
02416 const DBTABLE& RelTable,
02417 INT32 RelFieldNum,
02418 FIELDINFO::FLAGS RelFieldFlags,
02419 INT32 FirstFieldNum,
02420 INT32 NumStaticFields,
02421 bool UseRelatedSingle
02422 );
02423
02424 private:
02425 #ifndef GENERATING_DOXYGEN_OUTPUT
02426 FIELDINFOARRAY m_FieldInfoArray;
02427 DBTABLE::ATTACHMENT m_Attachment;
02428 CHAR_ENCODING m_Encoding;
02429 DBTABLE::USAGE m_Usage;
02430 DBTABLE::REFELEM m_RefElem;
02431 const OBJECT* m_LinkObject;
02432 DBTABLE::LINKTYPE m_LinkType;
02433 MISTRING m_NewLinkFile;
02434 char m_Delimiter;
02435 bool m_bPromptTable;
02436 bool m_UseFieldNamesAsHeading;
02437
02438 friend class DBTABLE;
02439 #endif // GENERATING_DOXYGEN_OUTPUT
02440
02441 };
02442
02443
02444
02446 class DBTABLE::MAKEPARM_ID_ELEMENT : public RVC::DBTABLE::MAKEPARMS {
02447 public:
02449 MAKEPARM_ID_ELEMENT ();
02450 };
02451
02452
02453
02455 class DBTABLE::MAKEPARM_ID_POINT : public RVC::DBTABLE::MAKEPARMS {
02456 public:
02458 MAKEPARM_ID_POINT ();
02459 };
02460
02461
02462
02464 class DBTABLE::MAKEPARM_STYLE_ELEMENT : public RVC::DBTABLE::MAKEPARMS {
02465 public:
02466
02468 static void SetupStaticFields (
02469 FIELDINFOARRAY& FieldInfoArray,
02470 USAGE Usage
02471 );
02472
02474 MAKEPARM_STYLE_ELEMENT (
02475 const RVC::DBTABLE& RelTable,
02476 INT32 RelFieldNum,
02477 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02478 USAGE Usage,
02479 bool UseRelatedSingle
02480 );
02481
02483 MAKEPARM_STYLE_ELEMENT (
02484 const RVC::DBTABLE& RelTable,
02485 INT32 RelFieldNum,
02486 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02487 const RVC::STYLE& StyleObj,
02488 USAGE Usage,
02489 bool UseRelatedSingle
02490 );
02491
02493 void SetStyleLink (
02494 const RVC::STYLE& StyleObj
02495 );
02496
02497 private:
02498 #ifndef GENERATING_DOXYGEN_OUTPUT
02499 void Setup (
02500 const RVC::DBTABLE& RelTable,
02501 INT32 RelFieldNum,
02502 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02503 USAGE Usage,
02504 bool UseRelatedSingle
02505 );
02506 #endif // GENERATING_DOXYGEN_OUTPUT
02507 };
02508
02509
02510
02512 class DBTABLE::MAKEPARM_STYLE_CAD : public RVC::DBTABLE::MAKEPARM_STYLE_ELEMENT {
02513 public:
02515 MAKEPARM_STYLE_CAD (
02516 const RVC::DBTABLE& RelTable,
02517 INT32 RelFieldNum,
02518 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02519 const RVC::STYLE& StyleObj,
02520 bool UseRelatedSingle
02521 ) : MAKEPARM_STYLE_ELEMENT(RelTable, RelFieldNum, RelFieldFlags, StyleObj, USAGE_MultiStyle, UseRelatedSingle) {}
02523 MAKEPARM_STYLE_CAD (
02524 const RVC::DBTABLE& RelTable,
02525 INT32 RelFieldNum,
02526 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02527 bool UseRelatedSingle
02528 ) : MAKEPARM_STYLE_ELEMENT(RelTable, RelFieldNum, RelFieldFlags, USAGE_MultiStyle, UseRelatedSingle) {}
02529 };
02530
02531
02532
02534 class DBTABLE::MAKEPARM_STYLE_LINE : public RVC::DBTABLE::MAKEPARM_STYLE_ELEMENT {
02535 public:
02537 MAKEPARM_STYLE_LINE (
02538 const RVC::DBTABLE& RelTable,
02539 INT32 RelFieldNum,
02540 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02541 const RVC::STYLE& StyleObj,
02542 bool UseRelatedSingle
02543 ) : MAKEPARM_STYLE_ELEMENT(RelTable, RelFieldNum, RelFieldFlags, StyleObj, USAGE_LineStyle, UseRelatedSingle) {}
02545 MAKEPARM_STYLE_LINE (
02546 const RVC::DBTABLE& RelTable,
02547 INT32 RelFieldNum,
02548 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02549 bool UseRelatedSingle
02550 ) : MAKEPARM_STYLE_ELEMENT(RelTable, RelFieldNum, RelFieldFlags, USAGE_LineStyle, UseRelatedSingle) {}
02551 };
02552
02553
02554
02556 class DBTABLE::MAKEPARM_STYLE_POINT : public RVC::DBTABLE::MAKEPARM_STYLE_ELEMENT {
02557 public:
02559 MAKEPARM_STYLE_POINT (
02560 const RVC::DBTABLE& RelTable,
02561 INT32 RelFieldNum,
02562 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02563 const RVC::STYLE& StyleObj,
02564 bool UseRelatedSingle
02565 ) : MAKEPARM_STYLE_ELEMENT(RelTable, RelFieldNum, RelFieldFlags, StyleObj, USAGE_PointStyle, UseRelatedSingle) {}
02567 MAKEPARM_STYLE_POINT (
02568 const RVC::DBTABLE& RelTable,
02569 INT32 RelFieldNum,
02570 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02571 bool UseRelatedSingle
02572 ) : MAKEPARM_STYLE_ELEMENT(RelTable, RelFieldNum, RelFieldFlags, USAGE_PointStyle, UseRelatedSingle) {}
02573 };
02574
02575
02576
02578 class DBTABLE::MAKEPARM_STYLE_POLYGON : public RVC::DBTABLE::MAKEPARM_STYLE_ELEMENT {
02579 public:
02581 MAKEPARM_STYLE_POLYGON (
02582 const RVC::DBTABLE& RelTable,
02583 INT32 RelFieldNum,
02584 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02585 const RVC::STYLE& StyleObj,
02586 bool UseRelatedSingle
02587 ) : MAKEPARM_STYLE_ELEMENT(RelTable, RelFieldNum, RelFieldFlags, StyleObj, USAGE_PolyStyle, UseRelatedSingle) {}
02589 MAKEPARM_STYLE_POLYGON (
02590 const RVC::DBTABLE& RelTable,
02591 INT32 RelFieldNum,
02592 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02593 bool UseRelatedSingle
02594 ) : MAKEPARM_STYLE_ELEMENT(RelTable, RelFieldNum, RelFieldFlags, USAGE_PolyStyle, UseRelatedSingle) {}
02595 };
02596
02597
02598
02600 class DBTABLE::MAKEPARM_SCALESELECT : public RVC::DBTABLE::MAKEPARMS {
02601 public:
02603 MAKEPARM_SCALESELECT (
02604 const RVC::DBTABLE& RelTable,
02605 INT32 RelFieldNum,
02606 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02607 bool UseRelatedSingle
02608 );
02609 };
02610
02611
02612
02614 class DBTABLE::MAKEPARM_SELECTION : public RVC::DBTABLE::MAKEPARMS {
02615 public:
02617 MAKEPARM_SELECTION (
02618 const RVC::DBTABLE& RelTable,
02619 INT32 RelFieldNum,
02620 DBTABLE::FIELDINFO::FLAGS RelFieldFlags,
02621 bool UseRelatedSingle
02622 );
02623 };
02624
02625
02626
02628 class DBTABLE::MAKEPARM_LEGENDELEMENT : public RVC::DBTABLE::MAKEPARMS {
02629 public:
02631 MAKEPARM_LEGENDELEMENT (
02632 );
02633 };
02634
02635
02636
02638 class DBTABLE::MAKEPARM_NODETURN : public RVC::DBTABLE::MAKEPARMS {
02639 public:
02641 MAKEPARM_NODETURN (
02642 );
02643 };
02644
02645
02646
02648 class DBTABLE::MAKEPARM_ORACLE : public DBTABLE::MAKEPARMS {
02649 public:
02650 MAKEPARM_ORACLE (
02651 ) : MAKEPARMS(ATTACHMENT_RelatedOnly, CHAR_ENCODING_UTF8) {
02652 SetLinkType(LINKTYPE_ORACLE);
02653 }
02654
02655 MAKEPARM_ORACLE (
02656 const DBTABLE::FIELDINFOARRAY& FieldInfoArray
02657 ) : MAKEPARMS(FieldInfoArray, ATTACHMENT_RelatedOnly, CHAR_ENCODING_UTF8) {
02658 SetLinkType(LINKTYPE_ORACLE);
02659 }
02660
02661 MAKEPARM_ORACLE (
02662 const DBTABLE& Template
02663 ) : MAKEPARMS(Template) {
02664 SetLinkType(LINKTYPE_ORACLE);
02665 SetAttachmentType(ATTACHMENT_RelatedOnly);
02666 SetUsage(USAGE_UserDefined);
02667 }
02668 };
02669
02670
02671
02672
02673
02675 class DBTABLE::RECORD {
02676 public:
02677
02679 enum FIELDFLAG {
02680 FIELDFLAG_None = 0x0000,
02681 FIELDFLAG_NaN = 0x0010,
02682 FIELDFLAG_NoUnitConv = 0x0020,
02683 FIELDFLAG_MultiKey = 0x0040,
02684 FIELDFLAG_LocalTime = 0x0080,
02685 FIELDFLAG_MemoEncoding = 0x8000
02686 };
02687
02688
02689 class VALUE {
02690 public:
02691 enum TYPE {
02692 TYPE_Invalid,
02693 TYPE_Double,
02694 TYPE_String,
02695 TYPE_DateTime,
02696 TYPE_Color
02697 };
02698
02700 VALUE (
02701 ) : m_type(TYPE_Invalid), m_pValue(0) { }
02703 VALUE (
02704 const VALUE& rhs
02705 ) { Copy(rhs); }
02707 VALUE (
02708 double value
02709 ) : m_type(TYPE_Double), m_pValue(new double(value)) { }
02711 VALUE (
02712 const MISTRING& value
02713 ) : m_type(TYPE_String), m_pValue(new MISTRING(value)) { }
02715 VALUE (
02716 const DATETIME& value
02717 ) : m_type(TYPE_String), m_pValue(new DATETIME(value)) { }
02719 VALUE (
02720 const COLOR& value
02721 ) : m_type(TYPE_String), m_pValue(new COLOR(value)) { }
02723 ~VALUE ()
02724 { Free(); }
02726 VALUE& operator= (const VALUE& rhs)
02727 { if (this != &rhs) { Free(); Copy(rhs); return (*this); } }
02729 VALUE& operator= (double rhs)
02730 { Free(); m_type = TYPE_Double; m_pValue = new double(rhs); return (*this); }
02732 VALUE& operator= (const MISTRING& rhs)
02733 { Free(); m_type = TYPE_String; m_pValue = new MISTRING(rhs); return (*this); }
02735 VALUE& operator= (const DATETIME& rhs)
02736 { Free(); m_type = TYPE_DateTime; m_pValue = new DATETIME(rhs); return (*this); }
02738 VALUE& operator= (const COLOR& rhs)
02739 { Free(); m_type = TYPE_Color; m_pValue = new COLOR(rhs); return (*this); }
02741 bool operator== (const VALUE& rhs) const
02742 { return (IsEqual(rhs)); }
02744 bool operator!= (const VALUE& rhs) const
02745 { return (!IsEqual(rhs)); }
02747 bool operator< (const VALUE& rhs) const;
02749 COLOR GetColor () const { return ((m_type == TYPE_Color) ? *static_cast<const COLOR*>(m_pValue) : COLOR()); }
02751 DATETIME GetDateTime () const { return ((m_type == TYPE_DateTime) ? *static_cast<const DATETIME*>(m_pValue) : DATETIME()); }
02753 double GetDouble () const { return ((m_type == TYPE_Double) ? *static_cast<const double*>(m_pValue) : 0); }
02755 const MISTRING& GetString () const { return ((m_type == TYPE_String) ? *static_cast<const MISTRING*>(m_pValue) : MISTRING::GetEmpty()); }
02757 TYPE GetType () const
02758 { return (m_type); }
02759
02760 private:
02761 #ifndef GENERATING_DOXYGEN_OUTPUT
02762 TYPE m_type;
02763 void *m_pValue;
02764
02765 void Copy (const VALUE& rhs);
02766 void Free ();
02767 bool IsEqual (const VALUE& rhs) const;
02768 #endif
02769 };
02770
02771
02773 RECORD (
02774 );
02775
02777 RECORD (
02778 const RECORD& rhs
02779 );
02780
02782 RECORD (
02783 const RVC::DBTABLE& table
02784 );
02785
02787 virtual ~RECORD (
02788 );
02789
02791 RECORD& operator= (
02792 const RECORD& rhs
02793 );
02794
02796 bool operator== (
02797 RECORD& rhs
02798 );
02799
02800
02801 bool CompareRecords (
02802 RECORD& rhs,
02803 double threshhold = 0.0
02804 );
02805
02807 bool operator!= (
02808 RECORD& rhs
02809 ) { return (!(*this == rhs)); }
02810
02812 ERRVALUE AssignTable (
02813 const RVC::DBTABLE& table
02814 );
02815
02817 void Clear (
02818 );
02819
02821 void ClearAttachment ();
02822
02824 bool CompareField (
02825 INT32 FieldNum,
02826 const RECORD& record,
02827 double threshhold = 0.0
02828 ) const;
02829
02832 INT32 CompareFieldOrdered (
02833 INT32 FieldNum,
02834 const RECORD& record,
02835 double threshhold = 0.0
02836 ) const;
02837
02841 INT32 ComputeHash (
02842 ) const;
02843
02849 ERRVALUE CopyMatchingFieldsTo (
02850 RECORD& DestRecord
02851 ) const;
02852
02860 ERRVALUE CopyTo (
02861 RECORD& DestRecord
02862 ) const;
02863
02865 ERRVALUE Initialize (
02866 );
02867
02869 void GetData (
02870 SIMPLE_ARRAY<UINT8>& Data
02871 ) const;
02872
02875 const FIELDINFO& GetFieldInfo (
02876 INT32 FieldNum
02877 ) const;
02878
02881 INT32 GetRecordNumber (
02882 ) const;
02883
02884 inline const DBTABLE *GetTable (
02885 ) const { return (m_Table); }
02886
02889 INT32 GetTableNumber (
02890 ) const;
02891
02893 ERRVALUE GetValue (
02894 INT32 FieldNum,
02895 RECORD::VALUE& value,
02896 FIELDFLAG FieldFlag = FIELDFLAG_None
02897 ) const;
02898
02900 ERRVALUE GetValue (
02901 INT32 FieldNum,
02902 MISTRING& string,
02903 FIELDFLAG FieldFlag = FIELDFLAG_None,
02904 int DecimalPlaces = -1,
02905 const UNITCONV* UnitConv = 0
02906 ) const;
02907
02910 double GetValue (
02911 INT32 FieldNum,
02912 FIELDFLAG FieldFlag = FIELDFLAG_None
02913 ) const;
02914
02916 ERRVALUE GetValue (
02917 INT32 FieldNum,
02918 COLOR& color
02919 ) const;
02920
02922 ERRVALUE GetValue (
02923 INT32 FieldNum,
02924 DATETIME& datetime
02925 ) const;
02926
02929 ERRVALUE GetValueBinary (
02930 INT32 FieldNum,
02931 SIMPLE_ARRAY<UINT8>& binary
02932 ) const;
02933
02950 ERRVALUE GetValueImage (
02951 INT32 FieldNum,
02952 SPATMOD::IMAGE::STAGE*& pImage,
02953 bool bForThumbnail = false,
02954 INT32 MaxThumbnailSize = 100
02955 ) const;
02956
02959 bool IsAssigned (
02960 ) const;
02961
02964 ERRVALUE SetKeyValues (
02965 INT32 StartFieldNum,
02966 const RECORD& SourceRecord
02967 );
02968
02970 void SetData (
02971 const SIMPLE_ARRAY<UINT8>& Data
02972 );
02973
02974 #ifndef NO_DEPRECATED
02977 DEPRECATED void SetData (
02978 const void* buf
02979 );
02980 #endif
02981
02983 ERRVALUE SetValue (
02984 INT32 FieldNum,
02985 const RECORD::VALUE& value,
02986 FIELDFLAG FieldFlag = FIELDFLAG_None
02987 );
02988
02990 ERRVALUE SetValue (
02991 INT32 FieldNum,
02992 const COLOR& color
02993 );
02994
02996 ERRVALUE SetValue (
02997 INT32 FieldNum,
02998 const DATETIME& datetime
02999 ) ;
03000
03002 ERRVALUE SetValue (
03003 INT32 FieldNum,
03004 const MISTRING& string,
03005 FIELDFLAG FieldFlag = FIELDFLAG_None,
03006 const UNITCONV* conv = 0
03007 );
03008
03010 void SetValue (
03011 INT32 FieldNum,
03012 double value,
03013 bool NoUnitConv = false
03014 );
03015
03017 ERRVALUE SetValue (
03018 INT32 FieldNum,
03019 const RECORD& SourceRecord,
03020 INT32 SourceFieldNum
03021 );
03022
03024 ERRVALUE SetValueBinary (
03025 INT32 FieldNum,
03026 const SIMPLE_ARRAY<UINT8>& binary
03027 ) const;
03028
03029 protected:
03030
03031 virtual bool IsValidTable (const RVC::DBTABLE& ) {return (true);}
03032
03033 const void *const GetFieldPtr (
03034 INT32 FieldNum
03035 ) const;
03036
03037 void *GetFieldPtr (
03038 INT32 FieldNum
03039 );
03040
03041 private:
03042 #ifndef GENERATING_DOXYGEN_OUTPUT
03043 struct BINARY {
03044 SIMPLE_ARRAY<UINT8> m_Binary;
03045 INT32 m_FieldNum;
03046 bool m_HasChanged;
03047
03048 BINARY () : m_FieldNum(-1), m_HasChanged(false) {}
03049 };
03050
03051 struct MEMO {
03052 MISTRING m_Memo;
03053 INT32 m_FieldNum;
03054 bool m_HasChanged;
03055
03056 MEMO () : m_FieldNum(-1), m_HasChanged(false) {}
03057 };
03058
03059 mutable void *m_Buffer;
03060 const DBTABLE* m_Table;
03061 RVC::DBTABLE::FIELDINFOARRAY m_DBFields;
03062 INT32 m_RecordNum;
03063 CURSOR* m_Cursor;
03064 BOOKMARK m_Bookmark;
03065 UINT32 m_Flags;
03066 int m_BufSize;
03067 mutable BITSET m_CompFieldRead;
03068 mutable MILIST<MEMO> m_MemoList;
03069 class TABLEOBSERVER;
03070 friend class TABLEOBSERVER;
03071 TABLEOBSERVER* m_TableObserver;
03072 mutable MILIST<BINARY> m_BinaryList;
03073 CHAR_ENCODING m_TableEncoding;
03074
03075 INT32 CompareBinaryField (INT32 FieldNum, const RECORD& record) const;
03076 INT32 CompareMemoField (INT32 FieldNum, const RECORD& record) const;
03077 ERRVALUE ReadComputed (INT32 FieldNum) const;
03078 ERRVALUE ReadMemo (MEMO& Memo, INT32 FieldNum) const;
03079 ERRVALUE ReadBinary (BINARY& Binary, INT32 FieldNum) const;
03080 friend class DBTABLE;
03081 #endif // GENERATING_DOXYGEN_OUTPUT
03082 };
03083
03084
03085
03086
03088 class DBTABLE::RECORD_ID_ELEMENT : public RVC::DBTABLE::RECORD {
03089 public:
03090
03092 RECORD_ID_ELEMENT (
03093 ) : RECORD() {}
03094
03096 RECORD_ID_ELEMENT (
03097 const RECORD_ID_ELEMENT& rhs
03098 ) : RECORD(rhs) {}
03099
03101 RECORD_ID_ELEMENT (
03102 const RECORD& rhs
03103 ) : RECORD(rhs) {}
03104
03106 RECORD_ID_ELEMENT (
03107 const RVC::DBTABLE& table
03108 ) : RECORD(table) {}
03109
03111 virtual ~RECORD_ID_ELEMENT (
03112 ) {}
03113
03115 RECORD_ID_ELEMENT& operator= (
03116 const RECORD_ID_ELEMENT& rhs
03117 ) {
03118 RECORD::operator=(rhs);
03119 return (*this);
03120 }
03121
03124 INT32 GetCurrent (
03125 ) const {return (*static_cast<const INT32*>(GetFieldPtr(0)));}
03126
03129 INT32 GetOriginal (
03130 ) const {return (*static_cast<const INT32*>(GetFieldPtr(1)));}
03131
03133 void SetCurrent (
03134 INT32 current
03135 ) {*static_cast<INT32*>(GetFieldPtr(0)) = current;}
03136
03138 void SetOriginal (
03139 INT32 original
03140 ) {*static_cast<INT32*>(GetFieldPtr(1)) = original;}
03141
03142 private:
03143 #ifndef GENERATING_DOXYGEN_OUTPUT
03144 virtual bool IsValidTable (const RVC::DBTABLE& table) {return (table.GetUsage() == DBTABLE::USAGE_ElementID);}
03145 #endif // GENERATING_DOXYGEN_OUTPUT
03146 };
03147
03148
03149
03151 class DBTABLE::RECORD_ID_POINT : public RVC::DBTABLE::RECORD {
03152 public:
03153
03155 RECORD_ID_POINT (
03156 ) : RECORD() {}
03157
03159 RECORD_ID_POINT (
03160 const RECORD_ID_POINT& rhs
03161 ) : RECORD(rhs) {}
03162
03164 RECORD_ID_POINT (
03165 const RVC::DBTABLE& table
03166 ) : RECORD(table) {}
03167
03169 virtual ~RECORD_ID_POINT (
03170 ) {}
03171
03173 RECORD_ID_POINT& operator= (
03174 const RECORD_ID_POINT& rhs
03175 ) {
03176 RECORD::operator=(rhs);
03177 return (*this);
03178 }
03179
03182 INT32 GetCurrent (
03183 ) const {return (*static_cast<const INT32*>(GetFieldPtr(0)));}
03184
03186 void SetCurrent (
03187 INT32 current
03188 ) {*static_cast<INT32*>(GetFieldPtr(0)) = current;}
03189
03190 private:
03191 #ifndef GENERATING_DOXYGEN_OUTPUT
03192 virtual bool IsValidTable (const RVC::DBTABLE& table) {return (table.GetUsage() == DBTABLE::USAGE_ElementID);}
03193 #endif // GENERATING_DOXYGEN_OUTPUT
03194 };
03195
03196
03197
03199 class DBTABLE::RECORD_STYLE_ELEMENT : public RVC::DBTABLE::RECORD {
03200 public:
03202 RECORD_STYLE_ELEMENT (
03203 ) : RECORD() {}
03204
03206 RECORD_STYLE_ELEMENT (
03207 const RECORD_STYLE_ELEMENT& rhs
03208 ) : RECORD(rhs) {}
03209
03211 RECORD_STYLE_ELEMENT (
03212 const RVC::DBTABLE& table
03213 ) : RECORD(table) {}
03214
03216 virtual ~RECORD_STYLE_ELEMENT (
03217 ) {}
03218
03220 RECORD_STYLE_ELEMENT& operator= (
03221 const RECORD_STYLE_ELEMENT& rhs
03222 ) {
03223 RECORD::operator=(rhs);
03224 return (*this);
03225 }
03226
03227 static INT32 GetRelationFieldNum (
03228 ) {return (SAFIELD_SINGLE_RelField);}
03229
03230 static INT32 GetSelectionFieldNum (
03231 ) {return (SAFIELD_SINGLE_DrawFlag);}
03232
03233 INT32 GetStyleIndex (
03234 ) const {return (*static_cast<const INT32*>(GetFieldPtr(SAFIELD_SINGLE_StyleIndex)));}
03235
03236 const RVC::OBJECTNAME& GetStyleName (
03237 ) const {return (*static_cast<const OBJECTNAME*>(GetFieldPtr(SAFIELD_SINGLE_StyleName)));}
03238
03239 bool IsSelected (
03240 ) const {return (*static_cast<const INT8*>(GetFieldPtr(SAFIELD_SINGLE_DrawFlag)) != 0);}
03241
03242 ERRVALUE SetRelationValues (
03243 const RECORD& record
03244 ) {return (SetKeyValues(SAFIELD_SINGLE_RelField, record));}
03245
03246 void SetSelected (
03247 bool Selected
03248 ) {*static_cast<INT8*>(GetFieldPtr(SAFIELD_SINGLE_DrawFlag)) = Selected;}
03249
03250 void SetStyleIndex (
03251 INT32 index
03252 ) {*static_cast<INT32*>(GetFieldPtr(SAFIELD_SINGLE_StyleIndex)) = index;}
03253
03254 void SetStyleName (
03255 const RVC::OBJECTNAME& name
03256 ) {*static_cast<OBJECTNAME*>(GetFieldPtr(SAFIELD_SINGLE_StyleName)) = name;}
03257
03258 private:
03259 #ifndef GENERATING_DOXYGEN_OUTPUT
03260 virtual bool IsValidTable (
03261 const RVC::DBTABLE& table
03262 ) {
03263 DBTABLE::USAGE usage = table.GetUsage();
03264 return (usage == DBTABLE::USAGE_PointStyle || usage == DBTABLE::USAGE_LineStyle || usage == DBTABLE::USAGE_PolyStyle);
03265 }
03266 #endif // GENERATING_DOXYGEN_OUTPUT
03267 };
03268
03269
03270
03272 class DBTABLE::RECORD_STYLE_CAD : public RVC::DBTABLE::RECORD {
03273 public:
03275 RECORD_STYLE_CAD (
03276 ) : RECORD() {}
03277
03279 RECORD_STYLE_CAD (
03280 const RECORD_STYLE_CAD& rhs
03281 ) : RECORD(rhs) {}
03282
03284 RECORD_STYLE_CAD (
03285 const RVC::DBTABLE& table
03286 ) : RECORD(table) {}
03287
03289 virtual ~RECORD_STYLE_CAD (
03290 ) {}
03291
03293 RECORD_STYLE_CAD& operator= (
03294 const RECORD_STYLE_CAD& rhs
03295 ) {
03296 RECORD::operator=(rhs);
03297 return (*this);
03298 }
03299
03300 INT32 GetLineStyleIndex (
03301 ) const {return (*static_cast<const INT32*>(GetFieldPtr(SAFIELD_CAD_LineStyleIndex)));}
03302
03303 const RVC::OBJECTNAME& GetLineStyleName (
03304 ) const {return (*static_cast<const OBJECTNAME*>(GetFieldPtr(SAFIELD_CAD_LineStyleName)));}
03305
03306 INT32 GetPointStyleIndex (
03307 ) const {return (*static_cast<const INT32*>(GetFieldPtr(SAFIELD_CAD_PointStyleIndex)));}
03308
03309 const RVC::OBJECTNAME& GetPointStyleName (
03310 ) const {return (*static_cast<const OBJECTNAME*>(GetFieldPtr(SAFIELD_CAD_PointStyleName)));}
03311
03312 INT32 GetPolyStyleIndex (
03313 ) const {return (*static_cast<const INT32*>(GetFieldPtr(SAFIELD_CAD_PolyStyleIndex)));}
03314
03315 const RVC::OBJECTNAME& GetPolyStyleName (
03316 ) const {return (*static_cast<const OBJECTNAME*>(GetFieldPtr(SAFIELD_CAD_PolyStyleName)));}
03317
03318 static INT32 GetRelationFieldNum (
03319 ) {return (SAFIELD_CAD_RelField);}
03320
03321 static INT32 GetSelectionFieldNum (
03322 ) {return (SAFIELD_CAD_DrawFlag);}
03323
03324 INT32 GetStyleIndex (
03325 RVC::STYLETYPE StyleType
03326 ) const {
03327 switch (StyleType) {
03328 case STYLETYPE_Point: return (GetPointStyleIndex());
03329 case STYLETYPE_Line: return (GetLineStyleIndex());
03330 case STYLETYPE_Polygon: return (GetPolyStyleIndex());
03331 case STYLETYPE_Text: return (GetTextStyleIndex());
03332 }
03333 return (-1);
03334 }
03335
03336 const RVC::OBJECTNAME& GetStyleName (
03337 RVC::STYLETYPE StyleType
03338 ) const {
03339 switch (StyleType) {
03340 case STYLETYPE_Point: return (GetPointStyleName());
03341 case STYLETYPE_Line: return (GetLineStyleName());
03342 case STYLETYPE_Polygon: return (GetPolyStyleName());
03343 }
03344 return (GetTextStyleName());
03345 }
03346
03347 INT32 GetTextStyleIndex (
03348 ) const {return (*static_cast<const INT32*>(GetFieldPtr(SAFIELD_CAD_TextStyleIndex)));}
03349
03350 const RVC::OBJECTNAME& GetTextStyleName (
03351 ) const {return (*static_cast<const OBJECTNAME*>(GetFieldPtr(SAFIELD_CAD_TextStyleName)));}
03352
03353 bool IsSelected (
03354 ) const {return (*static_cast<const INT8*>(GetFieldPtr(SAFIELD_CAD_DrawFlag)) != 0);}
03355
03356 void SetLineStyleIndex (
03357 INT32 index
03358 ) {*static_cast<INT32*>(GetFieldPtr(SAFIELD_CAD_LineStyleIndex)) = index;}
03359
03360 void SetLineStyleName (
03361 const RVC::OBJECTNAME& name
03362 ) {*static_cast<OBJECTNAME*>(GetFieldPtr(SAFIELD_CAD_LineStyleName)) = name;}
03363
03364 void SetPointStyleIndex (
03365 INT32 index
03366 ) {*static_cast<INT32*>(GetFieldPtr(SAFIELD_CAD_PointStyleIndex)) = index;}
03367
03368 void SetPointStyleName (
03369 const RVC::OBJECTNAME& name
03370 ) {*static_cast<OBJECTNAME*>(GetFieldPtr(SAFIELD_CAD_PointStyleName)) = name;}
03371
03372 void SetPolyStyleIndex (
03373 INT32 index
03374 ) {*static_cast<INT32*>(GetFieldPtr(SAFIELD_CAD_PolyStyleIndex)) = index;}
03375
03376 void SetPolyStyleName (
03377 const RVC::OBJECTNAME& name
03378 ) {*static_cast<OBJECTNAME*>(GetFieldPtr(SAFIELD_CAD_PolyStyleName)) = name;}
03379
03380 ERRVALUE SetRelationValues (
03381 const RECORD& record
03382 ) {return (SetKeyValues(SAFIELD_CAD_RelField, record));}
03383
03384 void SetSelected (
03385 bool Selected
03386 ) {*static_cast<INT8*>(GetFieldPtr(SAFIELD_CAD_DrawFlag)) = Selected;}
03387
03388 void SetStyleIndex (
03389 RVC::STYLETYPE StyleType,
03390 INT32 index
03391 ) {
03392 switch (StyleType) {
03393 case STYLETYPE_Point: SetPointStyleIndex(index); break;
03394 case STYLETYPE_Line: SetLineStyleIndex(index); break;
03395 case STYLETYPE_Polygon: SetPolyStyleIndex(index); break;
03396 case STYLETYPE_Text: SetTextStyleIndex(index); break;
03397 }
03398 return;
03399 }
03400
03401 void SetStyleName (
03402 RVC::STYLETYPE StyleType,
03403 const RVC::OBJECTNAME& name
03404 ) {
03405 switch (StyleType) {
03406 case STYLETYPE_Point: SetPointStyleName(name); break;
03407 case STYLETYPE_Line: SetLineStyleName(name); break;
03408 case STYLETYPE_Polygon: SetPolyStyleName(name); break;
03409 case STYLETYPE_Text: SetTextStyleName(name); break;
03410 }
03411 return;
03412 }
03413
03414 void SetTextStyleIndex (
03415 INT32 index
03416 ) {*static_cast<INT32*>(GetFieldPtr(SAFIELD_CAD_TextStyleIndex)) = index;}
03417
03418 void SetTextStyleName (
03419 const RVC::OBJECTNAME& name
03420 ) {*static_cast<OBJECTNAME*>(GetFieldPtr(SAFIELD_CAD_TextStyleName)) = name;}
03421
03422 private:
03423 #ifndef GENERATING_DOXYGEN_OUTPUT
03424 virtual bool IsValidTable (const RVC::DBTABLE& table) {return (table.GetUsage() == DBTABLE::USAGE_MultiStyle);}
03425 #endif // GENERATING_DOXYGEN_OUTPUT
03426 };
03427
03428
03429
03430 class DBTABLE::RECORD_SCALESELECT : public RVC::DBTABLE::RECORD {
03431 public:
03433 RECORD_SCALESELECT (
03434 ) : RECORD() {}
03435
03437 RECORD_SCALESELECT (
03438 const RECORD_SCALESELECT& rhs
03439 ) : RECORD(rhs) {}
03440
03442 RECORD_SCALESELECT (
03443 const RVC::DBTABLE& table
03444 ) : RECORD(table) {}
03445
03447 virtual ~RECORD_SCALESELECT (
03448 ) {}
03449
03451 RECORD_SCALESELECT& operator= (
03452 const RECORD_SCALESELECT& rhs
03453 ) {
03454 RECORD::operator=(rhs);
03455 return (*this);
03456 }
03457
03458 double GetMaxScale (
03459 ) const {return (*static_cast<const double*>(GetFieldPtr(SCALESELFIELD_MaxScale)));}
03460
03461 double GetMinScale (
03462 ) const {return (*static_cast<const double*>(GetFieldPtr(SCALESELFIELD_MinScale)));}
03463
03464 static INT32 GetRelationFieldNum (
03465 ) {return (SCALESELFIELD_RelField);}
03466
03467 void SetMaxScale (
03468 double scale
03469 ) {*static_cast<double*>(GetFieldPtr(SCALESELFIELD_MaxScale)) = scale;}
03470
03471 void SetMinScale (
03472 double scale
03473 ) {*static_cast<double*>(GetFieldPtr(SCALESELFIELD_MinScale)) = scale;}
03474
03475 ERRVALUE SetRelationValues (
03476 const RECORD& record
03477 ) {return (SetKeyValues(SCALESELFIELD_RelField, record));}
03478
03479 private:
03480 #ifndef GENERATING_DOXYGEN_OUTPUT
03481 virtual bool IsValidTable (const RVC::DBTABLE& table) {return (table.GetUsage() == DBTABLE::USAGE_ScaleSelect);}
03482 #endif // GENERATING_DOXYGEN_OUTPUT
03483 };
03484
03485
03486
03487 class DBTABLE::RECORD_SELECTION : public RVC::DBTABLE::RECORD {
03488 public:
03490 RECORD_SELECTION (
03491 ) : RECORD() {}
03492
03494 RECORD_SELECTION (
03495 const RECORD_SELECTION& rhs
03496 ) : RECORD(rhs) {}
03497
03499 RECORD_SELECTION (
03500 const RVC::DBTABLE& table
03501 ) : RECORD(table) {}
03502
03504 virtual ~RECORD_SELECTION (
03505 ) {}
03506
03508 RECORD_SELECTION& operator= (
03509 const RECORD_SELECTION& rhs
03510 ) {
03511 RECORD::operator=(rhs);
03512 return (*this);
03513 }
03514
03515 bool IsSelected (
03516 ) const {return (*static_cast<const UINT8*>(GetFieldPtr(GetSelectionFieldNum())) != 0);}
03517
03518 static INT32 GetRelationFieldNum (
03519 ) {return (1);}
03520
03521 static INT32 GetSelectionFieldNum (
03522 ) {return (0);}
03523
03524 void SetSelected (
03525 bool Selected
03526 ) {*static_cast<UINT8*>(GetFieldPtr(GetSelectionFieldNum())) = Selected;}
03527
03528 ERRVALUE SetRelationValues (
03529 const RECORD& record
03530 ) {return (SetKeyValues(GetRelationFieldNum(), record));}
03531
03532 private:
03533 #ifndef GENERATING_DOXYGEN_OUTPUT
03534 virtual bool IsValidTable (const RVC::DBTABLE& table) {return (table.GetUsage() == DBTABLE::USAGE_Selection);}
03535 #endif // GENERATING_DOXYGEN_OUTPUT
03536 };
03537
03538
03539
03540 class DBTABLE::RECORD_LEGENDELEMENT : public RVC::DBTABLE::RECORD {
03541 public:
03542
03543 enum FIELDNUM {
03544 FIELDNUM_ID = 0,
03545 FIELDNUM_PriLabel = 1,
03546 FIELDNUM_SecLabel = 2
03547 };
03548
03550 RECORD_LEGENDELEMENT (
03551 ) : RECORD() {}
03552
03554 RECORD_LEGENDELEMENT (
03555 const RECORD_LEGENDELEMENT& rhs
03556 ) : RECORD(rhs) {}
03557
03559 RECORD_LEGENDELEMENT (
03560 const RVC::DBTABLE& table
03561 ) : RECORD(table) {}
03562
03564 virtual ~RECORD_LEGENDELEMENT (
03565 ) {}
03566
03568 RECORD_LEGENDELEMENT& operator= (
03569 const RECORD_LEGENDELEMENT& rhs
03570 ) {
03571 RECORD::operator=(rhs);
03572 return (*this);
03573 }
03574
03576 static INT32 GetFieldNumID (
03577 ) { return (FIELDNUM_ID); }
03578
03580 static INT32 GetFieldNumPrimaryLabel (
03581 ) { return (FIELDNUM_PriLabel); }
03582
03584 static INT32 GetFieldNumSecondaryLabel (
03585 ) { return (FIELDNUM_SecLabel); }
03586
03588 UINT32 GetID (
03589 ) const { return (*static_cast<const UINT32*>(GetFieldPtr(FIELDNUM_ID))); }
03590
03592 ERRVALUE GetPrimaryLabel (
03593 MISTRING& str
03594 ) const { return (GetValue(FIELDNUM_PriLabel,str)); }
03595
03597 ERRVALUE GetSecondaryLabel (
03598 MISTRING& str
03599 ) const { return (GetValue(FIELDNUM_SecLabel,str)); }
03600
03602 ERRVALUE SetPrimaryLabel (
03603 const MISTRING& str
03604 ) { return (SetValue(FIELDNUM_PriLabel,str)); }
03605
03607 ERRVALUE SetSecondaryLabel (
03608 const MISTRING& str
03609 ) { return (SetValue(FIELDNUM_SecLabel,str)); }
03610
03611 private:
03612 #ifndef GENERATING_DOXYGEN_OUTPUT
03613 virtual bool IsValidTable (const RVC::DBTABLE& table) { return (table.GetUsage() == DBTABLE::USAGE_LegendElement); }
03614 #endif // GENERATING_DOXYGEN_OUTPUT
03615 };
03616
03617
03618
03620 class DBTABLE::RECORD_NODETURN : public RVC::DBTABLE::RECORD {
03621 public:
03622
03624 RECORD_NODETURN (
03625 ) : RECORD() {}
03626
03628 RECORD_NODETURN (
03629 const RECORD_NODETURN& rhs
03630 ) : RECORD(rhs) {}
03631
03633 RECORD_NODETURN (
03634 const RECORD& rhs
03635 ) : RECORD(rhs) {}
03636
03638 RECORD_NODETURN (
03639 const RVC::DBTABLE& table
03640 ) : RECORD(table) {}
03641
03643 virtual ~RECORD_NODETURN (
03644 ) {}
03645
03647 RECORD_NODETURN& operator= (
03648 const RECORD_NODETURN& rhs
03649 ) {
03650 RECORD::operator=(rhs);
03651 return (*this);
03652 }
03653
03655 void DisableTurn (
03656 ) {*static_cast<double*>(GetFieldPtr(2)) = -1.0;}
03657
03660 INT32 GetLineIn (
03661 ) const {return (*static_cast<const INT32*>(GetFieldPtr(0)));}
03662
03665 INT32 GetLineOut (
03666 ) const {return (*static_cast<const INT32*>(GetFieldPtr(1)));}
03667
03670 double GetImpedance (
03671 ) const {return (*static_cast<const double*>(GetFieldPtr(2)));}
03672
03674 void SetLineIn (
03675 INT32 LineIn
03676 ) {*static_cast<INT32*>(GetFieldPtr(0)) = LineIn;}
03677
03679 void SetLineOut (
03680 INT32 LineOut
03681 ) {*static_cast<INT32*>(GetFieldPtr(1)) = LineOut;}
03682
03684 void SetImpedance (
03685 double Impedance
03686 ) {*static_cast<double*>(GetFieldPtr(2)) = Impedance;}
03687
03688 private:
03689 #ifndef GENERATING_DOXYGEN_OUTPUT
03690 virtual bool IsValidTable (const RVC::DBTABLE& table) {return (table.GetUsage() == DBTABLE::USAGE_NodeTurn);}
03691 #endif // GENERATING_DOXYGEN_OUTPUT
03692 };
03693
03694
03695
03700 class DBTABLE::CONST_RECORDITERATOR {
03701 public:
03703 CONST_RECORDITERATOR (
03704 ) :
03705 m_TableObj(0),
03706 m_Record(0),
03707 m_NeedRecord(true),
03708 m_CheckSingle(false),
03709 m_FieldNum(0),
03710 m_Cursor(0)
03711 {}
03712
03714 virtual ~CONST_RECORDITERATOR (
03715 ) {
03716 delete m_Cursor;
03717 delete m_Record;
03718 }
03719
03721 const RECORD& operator* (
03722 ) const;
03723
03725 const RECORD* operator-> (
03726 ) const {return (&**this);}
03727
03729 CONST_RECORDITERATOR& operator++ (
03730 );
03731
03732 bool Done (
03733 ) const {return (m_Cursor == 0 || !m_Cursor->IsValid());}
03734
03735 ERRVALUE GetBookmark (
03736 DBTABLE::BOOKMARK& bookmark
03737 ) const {return (m_Cursor->GetBookmark(bookmark));}
03738
03739 protected:
03740 mutable RECORD* m_Record;
03741 INT32 m_FieldNum;
03742 CURSOR* m_Cursor;
03743 mutable bool m_NeedRecord;
03744 bool m_CheckSingle;
03745 const DBTABLE* m_TableObj;
03746
03747 void SetupIterator (const RVC::DBTABLE* table, ITERATERECORD IterateRecord, INT32 FieldNum);
03748
03749 private:
03750 #ifndef GENERATING_DOXYGEN_OUTPUT
03751 CONST_RECORDITERATOR (const CONST_RECORDITERATOR& rhs);
03752 CONST_RECORDITERATOR& operator= (const CONST_RECORDITERATOR& rhs);
03753
03754 friend class DBTABLE;
03755 #endif // GENERATING_DOXYGEN_OUTPUT
03756 };
03757
03758
03763 class DBTABLE::RECORDITERATOR : public RVC::DBTABLE::CONST_RECORDITERATOR {
03764 public:
03765
03767 RECORDITERATOR (
03768 ) : CONST_RECORDITERATOR() {}
03769
03771 RECORD& operator* (
03772 ) {return (*const_cast<RECORD*>(&CONST_RECORDITERATOR::operator*()));}
03773
03775 RECORD* operator-> (
03776 ) {return (&**this);}
03777
03779 RECORDITERATOR& operator++ (
03780 ) {
03781 CONST_RECORDITERATOR::operator++();
03782 return (*this);
03783 }
03784
03785 private:
03786 #ifndef GENERATING_DOXYGEN_OUTPUT
03787 RECORDITERATOR (CONST_RECORDITERATOR& rhs);
03788 #endif // GENERATING_DOXYGEN_OUTPUT
03789 };
03790
03791
03792
03794 class DBTABLE::OBSERVER : public RVC::OBJECTOBSERVER {
03795 public:
03796
03798 enum STRUCTCHANGE {
03799 STRUCTCHANGE_None = 0x00000000,
03800 STRUCTCHANGE_Name = 0x00000001,
03801 STRUCTCHANGE_Desc = 0x00000002,
03802 STRUCTCHANGE_ViewMode = 0x00000004,
03803 STRUCTCHANGE_Field = 0x00000008,
03804 STRUCTCHANGE_FieldsAdded = 0x00000010,
03805 STRUCTCHANGE_Flags = 0x00000020,
03806 STRUCTCHANGE_AttachmentType = 0x00000040,
03807 STRUCTCHANGE_Encoding = 0x00000080,
03808 STRUCTCHANGE_DBEditorUpdate = 0x00000100,
03809 STRUCTCHANGE_DBEditorRebuild = 0x00000200
03810 };
03811
03812 explicit OBSERVER (
03813 RVC::DBTABLE& dbtable
03814 ) : OBJECTOBSERVER(dbtable) {}
03815
03816 virtual ~OBSERVER (
03817 ) {}
03818
03820 virtual void OnBulkModifyBegin (
03821 ) {return;}
03822
03824 virtual void OnBulkModifyEnd (
03825 ) {return;}
03826
03828 virtual void OnRecordAdd (
03829 INT32
03830 ) {return;}
03831
03833 virtual void OnRecordChangeBegin (
03834 INT32
03835 ) {return;}
03836
03838 virtual void OnRecordChangeEnd (
03839 INT32
03840 ) {return;}
03841
03843 virtual void OnRecordDeleteBegin (
03844 INT32
03845 ) {return;}
03846
03848 virtual void OnRecordDeleteEnd (
03849 INT32
03850 ) {return;}
03851
03853 virtual void OnStructChanged (
03854 STRUCTCHANGE
03855 ) {return;}
03856
03858 virtual void OnTableValid (
03859 bool
03860 ) {return;}
03861
03862 private:
03863 #ifndef GENERATING_DOXYGEN_OUTPUT
03864 virtual void OnNotifyRaw (UINT32 reason, void *data);
03865 #endif // GENERATING_DOXYGEN_OUTPUT
03866 };
03867
03868
03869
03870 #ifndef GENERATING_DOXYGEN_OUTPUT
03871 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::INDEXSEARCH);
03872 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::ITERATERECORD);
03873 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::FINDFLAG);
03874 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::KEYFLAGS);
03875 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::REFELEM);
03876 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::RECORD::FIELDFLAG);
03877 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::FIELDINFO::FLAGS);
03878 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::CONSTRAINT::RANGEFLAG);
03879 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::CONSTRAINT::PKTABLE);
03880 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::CURSOR::FUNCTION);
03881 DEFINE_ENUM_OP_BITWISE(RVC::DBTABLE::CURSOR::INDEXFLAG);
03882 DEFINE_ENUM_OP_INCREMENT(RVC::DBTABLE::FIELDINFO::TYPE);
03883 #endif
03884
03885 }
03886
03887 #endif // INC_RVC_DBTABLE_H