00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186 #ifndef INC_RVC_DBASE_H
00187 #define INC_RVC_DBASE_H
00188
00189 #ifndef INC_RVC_OBJECT_H
00190 #include <rvc/object.h>
00191 #endif
00192
00193 #ifndef INC_MI32_ELEMTYPE_H
00194 #include <mi32/elemtype.h>
00195 #endif
00196
00197 #ifndef INC_MI32_SIMPLEAR_H
00198 #include <mi32/simplear.h>
00199 #endif
00200
00201 #ifndef INC_MI32_RVCDBASE_H
00202 #include <mi32/rvcdbase.h>
00203 #endif
00204
00205 #ifndef INC_RVC_GETOBJF_H
00206 #include <rvc/getobjf.h>
00207 #endif
00208
00209 #ifndef GENERATING_DOXYGEN_OUTPUT
00210 struct DBCALLBACKSTRUCT;
00211 struct SMLCONTEXT;
00212 #endif // GENERATING_DOXYGEN_OUTPUT
00213
00214 namespace RVC {
00215
00216 #ifndef GENERATING_DOXYGEN_OUTPUT
00217 class DBTABLE;
00218 class DBTABLE_STYLE;
00219 #endif // GENERATING_DOXYGEN_OUTPUT
00220
00221 class DBASE : public RVC::OBJECT {
00222 public:
00223 enum COPYFLAG {
00224 COPYFLAG_None = 0x00000000,
00225 COPYFLAG_TableLinks = 0x00000004,
00226 COPYFLAG_DemoteIdentityTables = 0x00000008,
00227 COPYFLAG_MinimizeTableSize = 0x00000020,
00228 COPYFLAG_DontRemoveRecords = 0x00000200,
00229 COPYFLAG_RemoveStdAttribTables = 0x00000800,
00230 COPYFLAG_IgnoreStdAttribTables = 0x00040000,
00231 COPYFLAG_CopyThemeTable = 0x01000000
00232 };
00233
00234 enum COPYTABLE {
00235 COPYTABLE_None = 0x00000000,
00236 COPYTABLE_CopyLinks = 0x00000004,
00237 COPYTABLE_RemoveStdAttTables = 0x00000800,
00238 COPYTABLE_FreezeComputedFields = 0x00080000
00239 };
00240
00241
00242 enum FINDFLAG {
00243 FINDFLAG_AllAttached = 0,
00244 FINDFLAG_NoInternal = 1,
00245 FINDFLAG_OnlyDirect = 2,
00246 FINDFLAG_FirstMatch = 8
00247 };
00248
00249 enum JOINFLAGS {
00250 JOINFLAG_None = 0x00000000,
00251 JOINFLAG_CopyThemeTable = 0x01000000,
00252 JOINFLAG_OuterRight = 0x02000000,
00253 JOINFLAG_Union = 0x04000000,
00254 JOINFLAG_Natural = 0x08000000,
00255 JOINFLAG_SameStrc = 0x10000000,
00256 JOINFLAG_SameNmSt = 0x30000000,
00257 JOINFLAG_RemoveDups = 0x40000000,
00258 JOINFLAG_Outer = 0x80000000
00259 };
00260
00261 #ifndef GENERATING_DOXYGEN_OUTPUT
00262 class BULKMODIFY;
00263 friend class BULKMODIFY;
00264 class ELEMTRANSLIST;
00265 class GETOBJFILTER_ISCAPABLE;
00266 friend class GETOBJFILTER_ISCAPABLE;
00267 class GETOBJFILTER_ISNOTEMPTY;
00268 friend class GETOBJFILTER_ISNOTEMPTY;
00269 class GETOBJFILTER_ISSELECTABLE;
00270 friend class GETOBJFILTER_ISSELECTABLE;
00271 class INVERSEDBLISTSUSPEND;
00272 class OBSERVER;
00273 class TABLEITERATOR;
00274 friend class TABLEITERATOR;
00275 class CONST_TABLEITERATOR;
00276 friend class CONST_TABLEITERATOR;
00277 #endif // GENERATING_DOXYGEN_OUTPUT
00278
00279
00280
00281
00282
00283 class CONST_TABLEITERATOR {
00284 public:
00285
00286 CONST_TABLEITERATOR (
00287 ) :
00288 m_TableNum(TABLE_InternalNode),
00289 m_CurrentObj(0)
00290 {}
00291
00292
00293 CONST_TABLEITERATOR (
00294 const RVC::DBASE* dbase,
00295 INT32 TableNum
00296 ) :
00297 m_TableNum(TableNum),
00298 m_CurrentObj(dbase)
00299 {}
00300
00301
00302 CONST_TABLEITERATOR (
00303 const TABLEITERATOR& rhs
00304 ) :
00305 m_TableNum(rhs.m_TableNum),
00306 m_CurrentObj(rhs.m_CurrentObj)
00307 {}
00308
00309
00310 CONST_TABLEITERATOR (
00311 const RVC::DBASE* dbase
00312 );
00313
00314
00315 virtual ~CONST_TABLEITERATOR (
00316 ) {}
00317
00318
00319 CONST_TABLEITERATOR& operator= (
00320 const CONST_TABLEITERATOR& rhs
00321 ) {
00322 if (this != &rhs) {
00323 m_TableNum = rhs.m_TableNum;
00324 m_CurrentObj = rhs.m_CurrentObj;
00325 }
00326 return (*this);
00327 }
00328
00329
00330 const INT32& operator* (
00331 ) const { return (m_TableNum); }
00332
00333
00334 const INT32* operator-> (
00335 ) const { return (&**this); }
00336
00337
00338 CONST_TABLEITERATOR& operator++ (
00339 );
00340
00341
00342 bool operator== (
00343 const CONST_TABLEITERATOR& rhs
00344 ) const { return (m_TableNum == rhs.m_TableNum && m_CurrentObj == rhs.m_CurrentObj); }
00345
00346
00347 bool operator!= (
00348 const CONST_TABLEITERATOR& rhs
00349 ) const { return (!(*this == rhs)); }
00350
00351 protected:
00352 INT32 m_TableNum;
00353 const DBASE *m_CurrentObj;
00354 };
00355
00356
00357
00358
00359
00360
00361 class TABLEITERATOR : public CONST_TABLEITERATOR {
00362 public:
00363
00364
00365 TABLEITERATOR (
00366 ) : CONST_TABLEITERATOR() {}
00367
00368
00369 TABLEITERATOR (
00370 CONST_TABLEITERATOR& rhs
00371 ) : CONST_TABLEITERATOR(rhs) {}
00372
00373
00374 TABLEITERATOR (
00375 const RVC::DBASE* dbase
00376 ) : CONST_TABLEITERATOR(dbase) {}
00377
00378
00379 TABLEITERATOR (
00380 const RVC::DBASE* dbase,
00381 INT32 TableNum
00382 ) : CONST_TABLEITERATOR(dbase, TableNum) {}
00383
00384
00385 const INT32& operator* (
00386 ) const { return (m_TableNum); }
00387
00388
00389 const INT32* operator-> (
00390 ) const { return (&**this); }
00391
00392
00393 TABLEITERATOR& operator++ (
00394 ) {
00395 CONST_TABLEITERATOR::operator++();
00396 return (*this);
00397 }
00398
00399
00400 bool operator== (
00401 const TABLEITERATOR& rhs
00402 ) const { return (m_TableNum == rhs.m_TableNum && m_CurrentObj == rhs.m_CurrentObj); }
00403
00404
00405 bool operator!= (
00406 const TABLEITERATOR& obj
00407 ) const { return (!(*this == obj)); }
00408 };
00409
00410
00411 DBASE (
00412 );
00413
00414
00415 DBASE (
00416 const RVC::DBASE& rhs
00417 );
00418
00419
00420 virtual ~DBASE (
00421 );
00422
00423
00424 RVC::DBASE& operator= (
00425 const RVC::DBASE& rhs
00426 );
00427
00428
00429 ERRVALUE CopyDatabaseTo (
00430 RVC::OBJECT& DestParentObj,
00431 const SIMPLE_ARRAY<INT32>& TransList,
00432 COPYFLAG flags
00433 );
00434
00435
00436 ERRVALUE CopyDatabaseTo (
00437 RVC::OBJECT& DestParentObj,
00438 RVC::DBASE& DestDBaseObj,
00439 const ELEMTRANSLIST& TransList,
00440 COPYFLAG flags
00441 );
00442
00443
00444
00445 INT32 CopyTableTo (
00446 INT32 SrcTableNum,
00447 RVC::DBASE& DestDBase,
00448 COPYTABLE flags
00449 ) const;
00450
00451
00452 ERRVALUE CreateSMLContext (
00453 SMLCONTEXT **pcontext
00454 );
00455
00456
00457
00458 ERRVALUE FindTableMatches (
00459 const RVC::DBASE& rhs,
00460 SIMPLE_ARRAY<INT32>& TableMatch
00461 ) const;
00462
00463
00464 ERRVALUE Flush (
00465 );
00466
00467
00468
00469 ERRVALUE GetKeyFieldNames (
00470 SIMPLE_ARRAY<RVC::OBJECTNAME>& FieldNames
00471 ) const;
00472
00473
00474
00475 INT32 GetNumTables (
00476 ) const;
00477
00478
00479
00480 static RVC::OBJTYPESET GetObjTypeSet (
00481 );
00482
00483
00484 ERRVALUE InverseDBListBuild (
00485 );
00486
00487
00488 void InverseDBListResume (
00489 );
00490
00491
00492 void InverseDBListSuspend (
00493 );
00494
00495
00496
00497 bool IsTableValid (
00498 INT32 TableNum
00499 ) const;
00500
00501
00502
00503 bool IsTableValid (
00504 const RVC::OBJECTNAME& name
00505 ) const;
00506
00507
00508 ERRVALUE JoinDatabaseTo (
00509 RVC::DBASE& DestDBaseObj,
00510 const SIMPLE_ARRAY<INT32>& TransList,
00511 COPYFLAG CopyFlags,
00512 JOINFLAGS JoinFlags
00513 );
00514
00515
00516 ERRVALUE JoinDatabaseTo (
00517 RVC::DBASE& DestDBaseObj,
00518 const ELEMTRANSLIST& TransList,
00519 COPYFLAG CopyFlags,
00520 JOINFLAGS JoinFlags
00521 );
00522
00523
00524 ERRVALUE Make (
00525 const RVC::OBJECT& parent,
00526 const RVC::DESCRIPTOR& Descriptor
00527 );
00528
00529
00530
00531 DEPRECATED ERRVALUE Make (
00532 const RVC::OBJECT& parent,
00533 const RVC::OBJECTNAME& name,
00534 const RVC::OBJECTDESC& desc,
00535 const char* Source = 0
00536 );
00537
00538
00539 ERRVALUE Make (
00540 const RVC::OBJITEM& ObjItem,
00541 const char* Source = 0
00542 );
00543
00544
00545 ERRVALUE RemoveDuplicateRecords (
00546 );
00547
00548
00549 ERRVALUE RemoveUnattachedRecords (
00550 );
00551
00552
00553 CONST_TABLEITERATOR TableBegin (
00554 ) const {
00555 m_NumTables = (IsOpen()) ? GetNumTables() : 0;
00556 return (CONST_TABLEITERATOR(this));
00557 }
00558
00559
00560 TABLEITERATOR TableBegin (
00561 ) {
00562 m_NumTables = (IsOpen()) ? GetNumTables() : 0;
00563 return (TABLEITERATOR(this));
00564 }
00565
00566
00567 CONST_TABLEITERATOR TableEnd (
00568 ) const { return (CONST_TABLEITERATOR(this, m_NumTables)); }
00569
00570
00571 TABLEITERATOR TableEnd (
00572 ) { return (TABLEITERATOR(this, m_NumTables)); }
00573
00574
00575 ERRVALUE Validate (
00576 MISTRING& LogString
00577 );
00578
00579
00580 ERRVALUE ValidateTableName (
00581 RVC::OBJECTNAME& name,
00582 SIMPLE_ARRAY<RVC::OBJECTNAME>& finfo
00583 ) const;
00584
00585 protected:
00586
00587 #ifndef GENERATING_DOXYGEN_OUTPUT
00588 INT32 AppendDBList (
00589 ELEMTYPE ElemType,
00590 INT32 ElemNum,
00591 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00592 );
00593
00594 INT32 AppendDBList (
00595 ELEMTYPE ElemType,
00596 INT32 ElemNum,
00597 const DBLISTELMT& item
00598 );
00599
00600 ERRVALUE CleanDBList (
00601 ELEMTYPE ElemType
00602 );
00603
00604
00605 ERRVALUE GetAttachedRecordList (
00606 ELEMTYPE ElemType,
00607 INT32 ElemNum,
00608 SIMPLE_ARRAY<DBLISTELMT>& dblist,
00609 FINDFLAG FindFlag = FINDFLAG_AllAttached,
00610 INT32 BaseTableNum = -1
00611 ) const;
00612
00613 INT32 GetDBListItemSize (
00614 ELEMTYPE ElemType,
00615 INT32 ElemNum,
00616 bool ExcludeInternal = false
00617 ) const;
00618
00619 INT32 GetDBListMaxItemSize (
00620 ELEMTYPE ElemType
00621 ) const;
00622
00623 INT32 GetDBListNumElements (
00624 ELEMTYPE ElemType
00625 ) const;
00626
00627 bool IsNodeAPoint (
00628 INT32 NodeNum,
00629 SIMPLE_ARRAY<DBLISTELMT>& DBList
00630 ) const;
00631
00632
00633 ERRVALUE OpenAsSubobject (
00634 const OBJECT& parent,
00635 OPENMODE mode = OPENMODE_Read,
00636 MDLGPARENT widget = 0
00637 );
00638
00639 INT32 ReadDBList (
00640 ELEMTYPE ElemType,
00641 INT32 ElemNum,
00642 SIMPLE_ARRAY<DBLISTELMT>& DBList
00643 ) const;
00644
00645 ERRVALUE ResizeDBList (
00646 ELEMTYPE ElemType,
00647 INT32 NumItems
00648 );
00649
00650 ERRVALUE ResizeDBListItem (
00651 ELEMTYPE ElemType,
00652 INT32 ElemNum,
00653 INT32 NumItems
00654 );
00655
00656 ERRVALUE SwapDBList (
00657 ELEMTYPE ElemType,
00658 INT32 Item1,
00659 INT32 Item2
00660 );
00661
00662 INT32 WriteDBList (
00663 ELEMTYPE ElemType,
00664 INT32 ElemNum,
00665 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00666 );
00667
00668 INT32 UnattachDBList (
00669 ELEMTYPE ElemType,
00670 INT32 ElemNum,
00671 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00672 );
00673
00674 ERRVALUE UpdateDBListNumElements (
00675 ELEMTYPE ElemType,
00676 INT32 NumElements
00677 );
00678
00679 int m_DBaseID;
00680
00681 #endif // GENERATING_DOXYGEN_OUTPUT
00682 private:
00683 #ifndef GENERATING_DOXYGEN_OUTPUT
00684
00685 mutable INT32 m_NumTables;
00686
00687
00688 virtual ERRVALUE v_CloseObject ();
00689 virtual OBJTYPE v_GetDftObjectType () const;
00690 virtual bool v_IsMultiObject () const;
00691 virtual bool v_IsObjectOpen () const;
00692 virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent);
00693 virtual bool v_ValidateObjectType (const OBJTYPE otype) const;
00694
00695 INT32 FindTable (const OBJECTNAME& name) const;
00696
00697 static void DatabaseCallbackFunc (DBCALLBACKSTRUCT *cb, void *data);
00698
00699 friend class DBTABLE;
00700 friend class DBTABLE_STYLE;
00701 #endif
00702 };
00703
00704 DEFINE_ENUM_OPERATORS(DBASE::COPYFLAG);
00705 DEFINE_ENUM_OPERATORS(DBASE::COPYTABLE);
00706 DEFINE_ENUM_OPERATORS(DBASE::FINDFLAG);
00707 DEFINE_ENUM_OPERATORS(DBASE::JOINFLAGS);
00708
00709 class DBASE::BULKMODIFY {
00710 public:
00711 BULKMODIFY (
00712 RVC::DBASE& dbase
00713 ) : m_dbase(dbase) {
00714 MfDatabaseBulkModifyBegin(dbase.m_DBaseID);
00715 }
00716
00717 ~BULKMODIFY (
00718 ) {
00719 MfDatabaseBulkModifyEnd(m_dbase.m_DBaseID);
00720 }
00721
00722 private:
00723 #ifndef GENERATING_DOXYGEN_OUTPUT
00724 RVC::DBASE& m_dbase;
00725 #endif // GENERATING_DOXYGEN_OUTPUT
00726 };
00727
00728
00729
00730 class DBASE::ELEMTRANSLIST {
00731 public:
00732
00733 ELEMTRANSLIST (
00734 );
00735
00736
00737 ELEMTRANSLIST (
00738 const ELEMTRANSLIST& rhs
00739 ) {Copy(rhs);}
00740
00741
00742 ~ELEMTRANSLIST (
00743 );
00744
00745
00746 ELEMTRANSLIST& operator= (
00747 const ELEMTRANSLIST& rhs
00748 ) {
00749 if (this != &rhs) Copy(rhs);
00750 return (*this);
00751 }
00752
00753
00754 operator const DBELEMTRANSLIST* (
00755 ) const {return (m_TransList);}
00756
00757
00758 ERRVALUE AddElement (
00759 INT32 SourceNum,
00760 INT32 DestNum
00761 );
00762
00763
00764
00765 INT32 GetNumItems (
00766 ) const {return (m_TransList.GetNumItems());}
00767
00768
00769 ERRVALUE Initialize (
00770 INT32 NumItems
00771 );
00772
00773
00774 ERRVALUE Resize (
00775 INT32 NumItems
00776 );
00777
00778 private:
00779 #ifndef GENERATING_DOXYGEN_OUTPUT
00780 SIMPLE_ARRAY<DBELEMTRANSLIST> m_TransList;
00781
00782 void Copy (const ELEMTRANSLIST& rhs);
00783 #endif // GENERATING_DOXYGEN_OUTPUT
00784 };
00785
00786
00787
00788 class DBASE::GETOBJFILTER_ISCAPABLE : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00789 public:
00790 GETOBJFILTER_ISCAPABLE () {}
00791 private:
00792 #ifndef GENERATING_DOXYGEN_OUTPUT
00793 virtual bool Filter (const RVC::OBJECT& Object);
00794 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00795 #endif // GENERATING_DOXYGEN_OUTPUT
00796 };
00797
00798
00799
00800 class DBASE::GETOBJFILTER_ISNOTEMPTY : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00801 public:
00802 GETOBJFILTER_ISNOTEMPTY () {}
00803 private:
00804 #ifndef GENERATING_DOXYGEN_OUTPUT
00805 virtual bool Filter (const RVC::OBJECT& Object);
00806 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
00807 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00808 #endif // GENERATING_DOXYGEN_OUTPUT
00809 };
00810
00811
00812
00813 class DBASE::GETOBJFILTER_ISSELECTABLE : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00814 public:
00815 GETOBJFILTER_ISSELECTABLE () {}
00816 private:
00817 #ifndef GENERATING_DOXYGEN_OUTPUT
00818 virtual bool Filter (const RVC::OBJECT& Object);
00819 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
00820 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00821 #endif // GENERATING_DOXYGEN_OUTPUT
00822 };
00823
00824
00825
00826 class DBASE::INVERSEDBLISTSUSPEND {
00827 public:
00828
00829 INVERSEDBLISTSUSPEND (
00830 RVC::DBASE& DBase,
00831 bool Rebuild = false,
00832 bool Condition = true
00833 ) :
00834 m_DBase(DBase),
00835 m_Rebuild(Rebuild),
00836 m_Condition(Condition)
00837 {
00838 if (m_DBase.IsOpen() && Condition) m_DBase.InverseDBListSuspend();
00839 }
00840
00841 ~INVERSEDBLISTSUSPEND (
00842 ) {
00843 if (m_DBase.IsOpen() && m_Condition) {
00844 m_DBase.InverseDBListResume();
00845 if (m_Rebuild) m_DBase.InverseDBListBuild();
00846 }
00847 }
00848
00849 private:
00850 #ifndef GENERATING_DOXYGEN_OUTPUT
00851 DBASE& m_DBase;
00852 bool m_Rebuild;
00853 bool m_Condition;
00854 #endif // GENERATING_DOXYGEN_OUTPUT
00855 };
00856
00857
00858
00859 class DBASE::OBSERVER : public OBJECTOBSERVER {
00860 public:
00861
00862
00863 enum STRUCTCHANGE {
00864 STRUCTCHANGE_Name = 0x00000001,
00865 STRUCTCHANGE_Desc = 0x00000002,
00866 STRUCTCHANGE_ViewMode = 0x00000004,
00867 STRUCTCHANGE_Field = 0x00000008,
00868 STRUCTCHANGE_FieldsAdded = 0x00000010,
00869 STRUCTCHANGE_Flags = 0x00000020,
00870 STRUCTCHANGE_AttachmentType = 0x00000040,
00871 STRUCTCHANGE_Encoding = 0x00000080,
00872 STRUCTCHANGE_DBEditorUpdate = 0x00000100,
00873 STRUCTCHANGE_DBEditorRebuild = 0x00000200
00874 };
00875
00876
00877 explicit OBSERVER (
00878 RVC::DBASE& dbase
00879 ) : OBJECTOBSERVER(dbase) {}
00880
00881
00882 virtual ~OBSERVER (
00883 ) {}
00884
00885
00886 virtual void OnAnyChange (
00887 ) { return; }
00888
00889
00890 virtual void OnDBListAdd (
00891 ELEMTYPE ElemType,
00892 INT32 ElemNum
00893 ) { return; }
00894
00895
00896 virtual void OnDBListChanged (
00897 ELEMTYPE ElemType,
00898 INT32 ElemNum
00899 ) { return; }
00900
00901
00902 virtual void OnStructChanged (
00903 INT32 TableNum,
00904 STRUCTCHANGE SubReason
00905 ) { return; }
00906
00907
00908 virtual void OnTableAdd (
00909 INT32 TableNum
00910 ) { return; }
00911
00912
00913 virtual void OnTableDropBegin (
00914 INT32 TableNum
00915 ) { return; }
00916
00917
00918 virtual void OnTableDropEnd (
00919 INT32 TableNum
00920 ) { return; }
00921
00922 private:
00923 #ifndef GENERATING_DOXYGEN_OUTPUT
00924 virtual void OnNotifyRaw (UINT32 reason, void *data);
00925 #endif // GENERATING_DOXYGEN_OUTPUT
00926 };
00927
00928
00929 class DBELEMTYPEFILTER : public OBJECT::FILTER {
00930 public:
00931
00932 DBELEMTYPEFILTER (
00933 ELEMTYPE ElemType
00934 ) :
00935 m_ObjType(RVC::OBJTYPE_Database)
00936 {
00937 switch (ElemType) {
00938 case ELEMTYPE_Node: m_ObjType = OBJTYPE_All; break;
00939 case ELEMTYPE_Line: m_ObjType = OBJTYPE_Database_VectorLine; break;
00940 case ELEMTYPE_Point: m_ObjType = OBJTYPE_Database_VectorPoint; break;
00941 case ELEMTYPE_Polygon: m_ObjType = OBJTYPE_Database_VectorPolygon; break;
00942 case ELEMTYPE_Edge:
00943 case ELEMTYPE_Triangle: m_ObjType = OBJTYPE_Database_TIN; break;
00944 case ELEMTYPE_CAD: m_ObjType = OBJTYPE_Database_CAD; break;
00945 case ELEMTYPE_RasterCellValue: m_ObjType = OBJTYPE_Database_Raster; break;
00946 case ELEMTYPE_All: m_ObjType = OBJTYPE_Database_Shape; break;
00947 case ELEMTYPE_Label: m_ObjType = OBJTYPE_LAST; break;
00948 }
00949 }
00950
00951 virtual bool Filter (
00952 const RVC::OBJECT& object
00953 ) {
00954 if (m_ObjType == OBJTYPE_All) {
00955 OBJECT parent;
00956 if (object.GetParent(parent) < 0) return (false);
00957 m_ObjType = (parent.GetObjectType() == OBJTYPE_Vector) ? OBJTYPE_Database_VectorPoint : OBJTYPE_Database_TIN;
00958 }
00959 return (object.GetObjectType() == m_ObjType);
00960 }
00961
00962 private:
00963 #ifndef GENERATING_DOXYGEN_OUTPUT
00964 OBJTYPE m_ObjType;
00965 #endif // GENERATING_DOXYGEN_OUTPUT
00966 };
00967
00968 }
00969
00970 #endif