00001
00182 #ifndef INC_RVC_DBASE_H
00183 #define INC_RVC_DBASE_H
00184
00185 #ifndef INC_RVC_OBJECT_H
00186 #include <rvc/object.h>
00187 #endif
00188
00189 #ifndef INC_MI32_ELEMTYPE_H
00190 #include <mi32/elemtype.h>
00191 #endif
00192
00193 #ifndef INC_MI32_RVCDBASE_H
00194 #include <mi32/rvcdbase.h>
00195 #endif
00196
00197 #ifndef INC_RVC_GETOBJFILTER_H
00198 #include <rvc/getobjfilter.h>
00199 #endif
00200
00201
00202 #ifndef GENERATING_DOXYGEN_OUTPUT
00203
00204 struct DBELEMTRANSLIST;
00205 namespace SML {
00206 class CONTEXT;
00207 }
00208 namespace RVC {
00209 struct DBCALLBACKSTRUCT;
00210 class DBASE_ELEMENT;
00211 class DBTABLE;
00212 class DBTABLE_STYLE;
00213 class DATABASEHANDLE;
00214 }
00215 #endif
00216
00217
00218 namespace RVC {
00219
00236 class DBASE : public RVC::OBJECT {
00237 public:
00238 enum COPYFLAG {
00239 COPYFLAG_None = 0x00000000,
00240 COPYFLAG_TableLinks = 0x00000004,
00241 COPYFLAG_DemoteIdentityTables = 0x00000008,
00242 COPYFLAG_MinimizeTableSize = 0x00000020,
00243 COPYFLAG_DontRemoveRecords = 0x00000200,
00244 COPYFLAG_RemoveStdAttribTables = 0x00000800,
00245 COPYFLAG_IgnoreStdAttribTables = 0x00040000,
00246 COPYFLAG_CopyThemeTable = 0x01000000,
00247 COPYFLAG_CopyElementIDTable = 0x02000000
00248 };
00249
00250 enum COPYTABLE {
00251 COPYTABLE_None = 0x00000000,
00252 COPYTABLE_CopyLinks = 0x00000004,
00253 COPYTABLE_RemoveStdAttTables = 0x00000800,
00254 COPYTABLE_FreezeComputedFields = 0x00080000
00255 };
00256
00258 enum FINDFLAG {
00259 FINDFLAG_AllAttached = 0,
00260 FINDFLAG_NoInternal = 1,
00261 FINDFLAG_OnlyDirect = 2,
00262 FINDFLAG_FirstMatch = 8
00263 };
00264
00265 enum JOINFLAGS {
00266 JOINFLAG_None = 0x00000000,
00267 JOINFLAG_CopyThemeTable = 0x01000000,
00268 JOINFLAG_OuterRight = 0x02000000,
00269 JOINFLAG_Union = 0x04000000,
00270 JOINFLAG_Natural = 0x08000000,
00271 JOINFLAG_SameStrc = 0x10000000,
00272 JOINFLAG_SameNmSt = 0x30000000,
00273 JOINFLAG_RemoveDups = 0x40000000,
00274 JOINFLAG_Outer = 0x80000000,
00275 JOINFLAG_AttachDestIfSrc1Attached = 0x00800000,
00276 JOINFLAG_AttachDestIfSrc2Attached = 0x00400000,
00277 JOINFLAG_AttachDestIfEitherSrcAttached = 0x00000000,
00278 JOINFLAG_AttachDestIfBothSrcAttached = 0x000C0000,
00279 JOINFLAG_NoAttachDest = 0x00020000,
00280 JOINFLAG_NoAttachDestMASK = 0x000E0000
00281 };
00282
00283 #ifndef GENERATING_DOXYGEN_OUTPUT
00284 class BULKMODIFY;
00285 friend class BULKMODIFY;
00286 class ELEMTRANSLIST;
00287 class GETOBJFILTER_ISCAPABLE;
00288 friend class GETOBJFILTER_ISCAPABLE;
00289 class GETOBJFILTER_ISNOTEMPTY;
00290 friend class GETOBJFILTER_ISNOTEMPTY;
00291 class GETOBJFILTER_ISSELECTABLE;
00292 friend class GETOBJFILTER_ISSELECTABLE;
00293 class INVERSEDBLISTSUSPEND;
00294 class OBSERVER;
00295 class TABLEITERATOR;
00296 friend class TABLEITERATOR;
00297 class CONST_TABLEITERATOR;
00298 friend class CONST_TABLEITERATOR;
00299 #endif // GENERATING_DOXYGEN_OUTPUT
00300
00305 class CONST_TABLEITERATOR {
00306 public:
00308 CONST_TABLEITERATOR (
00309 ) :
00310 m_TableNum(TABLE_InternalNode),
00311 m_CurrentObj(0)
00312 {}
00313
00315 CONST_TABLEITERATOR (
00316 const RVC::DBASE* dbase,
00317 INT32 TableNum
00318 ) :
00319 m_TableNum(TableNum),
00320 m_CurrentObj(dbase)
00321 {}
00322
00324 CONST_TABLEITERATOR (
00325 const TABLEITERATOR& rhs
00326 ) :
00327 m_TableNum(rhs.m_TableNum),
00328 m_CurrentObj(rhs.m_CurrentObj)
00329 {}
00330
00332 CONST_TABLEITERATOR (
00333 const RVC::DBASE* dbase
00334 );
00335
00337 virtual ~CONST_TABLEITERATOR (
00338 ) {}
00339
00341 CONST_TABLEITERATOR& operator= (
00342 const CONST_TABLEITERATOR& rhs
00343 ) {
00344 if (this != &rhs) {
00345 m_TableNum = rhs.m_TableNum;
00346 m_CurrentObj = rhs.m_CurrentObj;
00347 }
00348 return (*this);
00349 }
00350
00352 const INT32& operator* (
00353 ) const { return (m_TableNum); }
00354
00356 const INT32* operator-> (
00357 ) const { return (&**this); }
00358
00360 CONST_TABLEITERATOR& operator++ (
00361 );
00362
00364 bool operator== (
00365 const CONST_TABLEITERATOR& rhs
00366 ) const { return (m_TableNum == rhs.m_TableNum && m_CurrentObj == rhs.m_CurrentObj); }
00367
00369 bool operator!= (
00370 const CONST_TABLEITERATOR& rhs
00371 ) const { return (!(*this == rhs)); }
00372
00373 protected:
00374 INT32 m_TableNum;
00375 const DBASE *m_CurrentObj;
00376 };
00377
00382 class TABLEITERATOR : public CONST_TABLEITERATOR {
00383 public:
00384
00386 TABLEITERATOR (
00387 ) : CONST_TABLEITERATOR() {}
00388
00390 TABLEITERATOR (
00391 CONST_TABLEITERATOR& rhs
00392 ) : CONST_TABLEITERATOR(rhs) {}
00393
00395 TABLEITERATOR (
00396 const RVC::DBASE* dbase
00397 ) : CONST_TABLEITERATOR(dbase) {}
00398
00400 TABLEITERATOR (
00401 const RVC::DBASE* dbase,
00402 INT32 TableNum
00403 ) : CONST_TABLEITERATOR(dbase, TableNum) {}
00404
00406 const INT32& operator* (
00407 ) const { return (m_TableNum); }
00408
00410 const INT32* operator-> (
00411 ) const { return (&**this); }
00412
00414 TABLEITERATOR& operator++ (
00415 ) {
00416 CONST_TABLEITERATOR::operator++();
00417 return (*this);
00418 }
00419
00421 bool operator== (
00422 const TABLEITERATOR& rhs
00423 ) const { return (m_TableNum == rhs.m_TableNum && m_CurrentObj == rhs.m_CurrentObj); }
00424
00426 bool operator!= (
00427 const TABLEITERATOR& obj
00428 ) const { return (!(*this == obj)); }
00429 };
00430
00432 DBASE (
00433 );
00434
00436 DBASE (
00437 const RVC::DBASE& rhs
00438 );
00439
00441 virtual ~DBASE (
00442 );
00443
00445 RVC::DBASE& operator= (
00446 const RVC::DBASE& rhs
00447 );
00448
00453 ERRVALUE CanCreateTables (
00454 ) const;
00455
00457 ERRVALUE CopyDatabaseTo (
00458 RVC::DBASE& DestDBaseObj,
00459 RVC::DBASE::COPYFLAG CopyFlags = RVC::DBASE::COPYFLAG_None
00460 );
00461
00469 ERRVALUE CopyDatabaseTo (
00470 RVC::DBASE_ELEMENT& DestDBaseObj,
00471 const RVC::DBTABLE& SourceTable,
00472 const SIMPLE_ARRAY<INT32>& TransList,
00473 ELEMTYPE ElemType = ELEMTYPE_Empty,
00474 RVC::DBASE::COPYFLAG CopyFlags = RVC::DBASE::COPYFLAG_None
00475 );
00476
00481 ERRVALUE CopyDatabaseTo (
00482 RVC::DBASE_ELEMENT& DestDBaseObj,
00483 const RVC::DBTABLE& SourceTable,
00484 const RVC::DBASE::ELEMTRANSLIST& TransList,
00485 ELEMTYPE ElemType = ELEMTYPE_Empty,
00486 RVC::DBASE::COPYFLAG CopyFlags = RVC::DBASE::COPYFLAG_None
00487 );
00488
00491 INT32 CopyTableTo (
00492 INT32 SrcTableNum,
00493 RVC::DBASE& DestDBase,
00494 COPYTABLE flags = COPYTABLE_None
00495 ) const;
00496
00499 INT32 CopyTableTo (
00500 INT32 SrcTableNum,
00501 RVC::DBASE& DestDBase,
00502 RVC::DESCRIPTOR& DestTableDescriptor,
00503 SIMPLE_ARRAY<INT32>* RecordTrans = 0,
00504 COPYTABLE flags = COPYTABLE_None
00505 ) const;
00506
00508 ERRVALUE CreateSMLContext (
00509 SML::CONTEXT **pcontext
00510 );
00511
00515 ERRVALUE ExtractTablesFrom (
00516 const DBASE& SrcDbObj,
00517 const DESCRIPTOR& BaseTable,
00518 const MISTRING& ConnectString,
00519 bool IsGeometricExtract = false
00520 );
00521
00524 ERRVALUE FindTableMatches (
00525 const RVC::DBASE& rhs,
00526 SIMPLE_ARRAY<INT32>& TableMatch
00527 ) const;
00528
00530 ERRVALUE Flush (
00531 );
00532
00534 ERRVALUE GetAttachedRecordList (
00535 ELEMTYPE ElemType,
00536 INT32 ElemNum,
00537 SIMPLE_ARRAY<DBLISTELMT>& dblist,
00538 FINDFLAG FindFlag = FINDFLAG_AllAttached,
00539 INT32 BaseTableNum = -1
00540 ) const;
00541
00544 ERRVALUE GetKeyFieldNames (
00545 SIMPLE_ARRAY<RVC::OBJECTNAME>& FieldNames
00546 ) const;
00547
00550 INT32 GetNumTables (
00551 ) const;
00552
00555 static RVC::OBJTYPESET GetObjTypeSet (
00556 );
00557
00558
00559
00560 INT32 GetRelationshipDistance (
00561 const DBTABLE& SrcTable,
00562 const DBTABLE& DestTable
00563 );
00564
00566 ERRVALUE InverseDBListBuild (
00567 );
00568
00570 void InverseDBListResume (
00571 );
00572
00574 void InverseDBListSuspend (
00575 );
00576
00579 bool IsTableInternal (
00580 INT32 TableNum
00581 ) const;
00582
00585 bool IsTableValid (
00586 INT32 TableNum
00587 ) const;
00588
00591 bool IsTableValid (
00592 const RVC::OBJECTNAME& name
00593 ) const;
00594
00596 ERRVALUE Make (
00597 const RVC::OBJECT& parent,
00598 const RVC::DESCRIPTOR& Descriptor,
00599 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00600 );
00601
00603 ERRVALUE Make (
00604 RVC::OBJITEM& ObjItem,
00605 #ifdef RVC_CREDENTIALS_MANDATORY
00606 const char* Source,
00607 const CREDENTIALS* Credentials
00608 #else
00609 const char* Source = 0,
00610 const CREDENTIALS* Credentials = 0
00611 #endif
00612 );
00613
00615 ERRVALUE RemoveDuplicateRecords (
00616 );
00617
00619 ERRVALUE RemoveUnattachedRecords (
00620 );
00621
00623 CONST_TABLEITERATOR TableBegin (
00624 ) const {
00625 m_NumTables = (IsOpen()) ? GetNumTables() : 0;
00626 return (CONST_TABLEITERATOR(this));
00627 }
00628
00630 TABLEITERATOR TableBegin (
00631 ) {
00632 m_NumTables = (IsOpen()) ? GetNumTables() : 0;
00633 return (TABLEITERATOR(this));
00634 }
00635
00637 CONST_TABLEITERATOR TableEnd (
00638 ) const { return (CONST_TABLEITERATOR(this, m_NumTables)); }
00639
00641 TABLEITERATOR TableEnd (
00642 ) { return (TABLEITERATOR(this, m_NumTables)); }
00643
00645 ERRVALUE Validate (
00646 MISTRING& LogString
00647 );
00648
00650 ERRVALUE ValidateTableName (
00651 RVC::OBJECTNAME& name,
00652 SIMPLE_ARRAY<RVC::OBJECTNAME>& finfo
00653 ) const;
00654
00655 protected:
00656
00657 #ifndef GENERATING_DOXYGEN_OUTPUT
00658 INT32 AppendDBList (
00659 ELEMTYPE ElemType,
00660 INT32 ElemNum,
00661 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00662 );
00663
00664 INT32 AppendDBList (
00665 ELEMTYPE ElemType,
00666 INT32 ElemNum,
00667 const DBLISTELMT& item
00668 );
00669
00670 ERRVALUE CleanDBList (
00671 ELEMTYPE ElemType
00672 );
00673
00674 INT32 GetDBListItemSize (
00675 ELEMTYPE ElemType,
00676 INT32 ElemNum,
00677 bool ExcludeInternal = false
00678 ) const;
00679
00680 INT32 GetDBListMaxItemSize (
00681 ELEMTYPE ElemType
00682 ) const;
00683
00684 INT32 GetDBListNumElements (
00685 ELEMTYPE ElemType
00686 ) const;
00687
00688 bool IsNodeAPoint (
00689 INT32 NodeNum,
00690 SIMPLE_ARRAY<DBLISTELMT>& DBList
00691 ) const;
00692
00693 ERRVALUE JoinLow (
00694 const RVC::DBASE& SrcDBase,
00695 const SIMPLE_ARRAY<INT32>* PointTransList,
00696 const SIMPLE_ARRAY<INT32>* NodeTransList,
00697 const SIMPLE_ARRAY<DBELEMTRANSLIST>* ExtTransList,
00698 INT32& NextElemID,
00699 ELEMTYPE SrcElemType = ELEMTYPE_Empty,
00700 ELEMTYPE DestElemType = ELEMTYPE_Empty,
00701 RVC::DBASE::COPYFLAG CopyFlags = RVC::DBASE::COPYFLAG_None,
00702 RVC::DBASE::JOINFLAGS JoinFlags = RVC::DBASE::JOINFLAG_None,
00703 const RVC::DBTABLE* SourceTable = 0
00704 );
00705
00707 ERRVALUE OpenAsSubobject (
00708 const OBJECT& parent,
00709 #ifdef RVC_CREDENTIALS_MANDATORY
00710 OPENMODE mode,
00711 MDLGPARENT widget,
00712 const CREDENTIALS* Credentials
00713 #else
00714 OPENMODE mode = OPENMODE_Read,
00715 MDLGPARENT widget = 0,
00716 const CREDENTIALS* Credentials = 0
00717 #endif
00718 );
00719
00720 INT32 ReadDBList (
00721 ELEMTYPE ElemType,
00722 INT32 ElemNum,
00723 SIMPLE_ARRAY<DBLISTELMT>& DBList
00724 ) const;
00725
00726 ERRVALUE ResizeDBList (
00727 ELEMTYPE ElemType,
00728 INT32 NumItems
00729 );
00730
00731 ERRVALUE ResizeDBListItem (
00732 ELEMTYPE ElemType,
00733 INT32 ElemNum,
00734 INT32 NumItems
00735 );
00736
00737 ERRVALUE SwapDBList (
00738 ELEMTYPE ElemType,
00739 INT32 Item1,
00740 INT32 Item2
00741 );
00742
00743 INT32 WriteDBList (
00744 ELEMTYPE ElemType,
00745 INT32 ElemNum,
00746 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00747 );
00748
00749 INT32 UnattachDBList (
00750 ELEMTYPE ElemType,
00751 INT32 ElemNum,
00752 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00753 );
00754
00755 ERRVALUE UpdateDBListNumElements (
00756 ELEMTYPE ElemType,
00757 INT32 NumElements
00758 );
00759
00760 DATABASEHANDLE* GetDBHandle (
00761 ) const {
00762 return m_DBHandle;
00763 }
00764
00765 #endif // GENERATING_DOXYGEN_OUTPUT
00766 private:
00767 #ifndef GENERATING_DOXYGEN_OUTPUT
00768
00769 mutable INT32 m_NumTables;
00770 DATABASEHANDLE* m_DBHandle;
00771
00773 virtual ERRVALUE v_CloseObject ();
00774 virtual OBJTYPE v_GetDftObjectType () const;
00775 virtual bool v_IsMultiObject () const;
00776 virtual bool v_IsObjectOpen () const;
00777 virtual ERRVALUE v_OpenObject (OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS* Credentials);
00778 virtual bool v_ValidateObjectType (const OBJTYPE otype) const;
00779
00780 ERRVALUE DuplicateDatabaseRecords (
00781 INT32 ElemNum,
00782 SIMPLE_ARRAY<DBLISTELMT>& list
00783 );
00784
00785 INT32 FindTable (const MISTRING& name) const;
00786 INT32 FindTable (const RVC::DESCRIPTOR& name) const;
00787
00788 static void DatabaseCallbackFunc (DBCALLBACKSTRUCT *cb, void *data);
00789
00790 friend class DBTABLE;
00791 friend class DBTABLE_STYLE;
00792 #endif // GENERATING_DOXYGEN_OUTPUT
00793 };
00794
00795 #ifndef GENERATING_DOXYGEN_OUTPUT
00796 DEFINE_ENUM_OP_BITWISE(DBASE::COPYFLAG)
00797 DEFINE_ENUM_OP_BITWISE(DBASE::COPYTABLE)
00798 DEFINE_ENUM_OP_BITWISE(DBASE::FINDFLAG)
00799 DEFINE_ENUM_OP_BITWISE(DBASE::JOINFLAGS)
00800 #endif
00801
00802 class DBASE::BULKMODIFY {
00803 public:
00804
00805 BULKMODIFY (RVC::DBASE& dbase);
00806
00807
00808 ~BULKMODIFY();
00809
00810 private:
00811 #ifndef GENERATING_DOXYGEN_OUTPUT
00812 RVC::DBASE& m_dbase;
00813 #endif // GENERATING_DOXYGEN_OUTPUT
00814 };
00815
00816
00818 class DBASE::ELEMTRANSLIST {
00819 public:
00821 ELEMTRANSLIST (
00822 );
00823
00825 ELEMTRANSLIST (
00826 const ELEMTRANSLIST& rhs
00827 ) {Copy(rhs);}
00828
00830 ~ELEMTRANSLIST (
00831 );
00832
00834 ELEMTRANSLIST& operator= (
00835 const ELEMTRANSLIST& rhs
00836 ) {
00837 if (this != &rhs) Copy(rhs);
00838 return (*this);
00839 }
00840
00842 ERRVALUE AddElement (
00843 INT32 SourceNum,
00844 INT32 DestNum
00845 );
00846
00849 INT32 GetNumItems (
00850 ) const {return (m_TransList.GetNumItems());}
00851
00853 ERRVALUE Initialize (
00854 INT32 NumItems
00855 );
00856
00858 ERRVALUE Resize (
00859 INT32 NumItems
00860 );
00861
00862 private:
00863 #ifndef GENERATING_DOXYGEN_OUTPUT
00864 SIMPLE_ARRAY<DBELEMTRANSLIST> m_TransList;
00865
00866 void Copy (const ELEMTRANSLIST& rhs);
00867
00868 friend class DBASE_ELEMENT;
00869 friend class DBASE;
00870 #endif // GENERATING_DOXYGEN_OUTPUT
00871 };
00872
00874 class DBASE::GETOBJFILTER_ISCAPABLE : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00875 public:
00876 GETOBJFILTER_ISCAPABLE () {}
00877 private:
00878 #ifndef GENERATING_DOXYGEN_OUTPUT
00879 virtual bool Filter (const RVC::OBJECT& Object);
00880 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00881 #endif // GENERATING_DOXYGEN_OUTPUT
00882 };
00883
00884
00886 class DBASE::GETOBJFILTER_ISNOTEMPTY : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00887 public:
00888 GETOBJFILTER_ISNOTEMPTY () {}
00889 private:
00890 #ifndef GENERATING_DOXYGEN_OUTPUT
00891 virtual bool Filter (const RVC::OBJECT& Object);
00892 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
00893 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00894 #endif // GENERATING_DOXYGEN_OUTPUT
00895 };
00896
00897
00899 class DBASE::GETOBJFILTER_ISSELECTABLE : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00900 public:
00901 GETOBJFILTER_ISSELECTABLE () {}
00902 private:
00903 #ifndef GENERATING_DOXYGEN_OUTPUT
00904 virtual bool Filter (const RVC::OBJECT& Object);
00905 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
00906 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00907 #endif // GENERATING_DOXYGEN_OUTPUT
00908 };
00909
00910
00912 class DBASE::INVERSEDBLISTSUSPEND {
00913 public:
00915 INVERSEDBLISTSUSPEND (
00916 RVC::DBASE& DBase,
00917 bool Rebuild = false,
00918 bool Condition = true
00919 ) :
00920 m_DBase(DBase),
00921 m_Rebuild(Rebuild),
00922 m_Condition(Condition)
00923 {
00924 if (m_DBase.IsOpen() && Condition) m_DBase.InverseDBListSuspend();
00925 }
00926
00927 ~INVERSEDBLISTSUSPEND (
00928 ) {
00929 if (m_DBase.IsOpen() && m_Condition) {
00930 m_DBase.InverseDBListResume();
00931 if (m_Rebuild) m_DBase.InverseDBListBuild();
00932 }
00933 }
00934
00935 private:
00936 #ifndef GENERATING_DOXYGEN_OUTPUT
00937 DBASE& m_DBase;
00938 bool m_Rebuild;
00939 bool m_Condition;
00940 #endif // GENERATING_DOXYGEN_OUTPUT
00941 };
00942
00943
00945 class DBASE::OBSERVER : public OBJECTOBSERVER {
00946 public:
00947
00949 enum STRUCTCHANGE {
00950 STRUCTCHANGE_Name = 0x00000001,
00951 STRUCTCHANGE_Desc = 0x00000002,
00952 STRUCTCHANGE_ViewMode = 0x00000004,
00953 STRUCTCHANGE_Field = 0x00000008,
00954 STRUCTCHANGE_FieldsAdded = 0x00000010,
00955 STRUCTCHANGE_Flags = 0x00000020,
00956 STRUCTCHANGE_AttachmentType = 0x00000040,
00957 STRUCTCHANGE_Encoding = 0x00000080,
00958 STRUCTCHANGE_DBEditorUpdate = 0x00000100,
00959 STRUCTCHANGE_DBEditorRebuild = 0x00000200
00960 };
00961
00963 explicit OBSERVER (
00964 RVC::DBASE& dbase
00965 ) : OBJECTOBSERVER(dbase) {}
00966
00968 virtual ~OBSERVER (
00969 ) {}
00970
00972 virtual void OnBulkModifyBegin (
00973 );
00974
00976 virtual void OnBulkModifyEnd (
00977 );
00978
00980 virtual void OnAnyChange (
00981 );
00982
00984 virtual void OnDBListAdd (
00985 ELEMTYPE ElemType,
00986 INT32 ElemNum
00987 );
00988
00990 virtual void OnDBListChanged (
00991 ELEMTYPE ElemType,
00992 INT32 ElemNum
00993 );
00994
00996 virtual void OnStructChanged (
00997 INT32 TableNum,
00998 STRUCTCHANGE StructChange
00999 );
01000
01002 virtual void OnTableAdd (
01003 INT32 TableNum
01004 );
01005
01007 virtual void OnTableDropBegin (
01008 INT32 TableNum
01009 );
01010
01012 virtual void OnTableDropEnd (
01013 INT32 TableNum
01014 );
01015
01016 private:
01017 #ifndef GENERATING_DOXYGEN_OUTPUT
01018 virtual void OnNotifyRaw (UINT32 reason, void *data);
01019 #endif // GENERATING_DOXYGEN_OUTPUT
01020 };
01021
01022
01023 class DBELEMTYPEFILTER : public OBJECT::FILTER {
01024 public:
01025
01026 DBELEMTYPEFILTER (
01027 ELEMTYPE ElemType
01028 ) :
01029 m_ObjType(RVC::OBJTYPE_Database)
01030 {
01031 switch (ElemType) {
01032 case ELEMTYPE_Node: m_ObjType = OBJTYPE_All; break;
01033 case ELEMTYPE_Line: m_ObjType = OBJTYPE_Database_VectorLine; break;
01034 case ELEMTYPE_Point: m_ObjType = OBJTYPE_Database_VectorPoint; break;
01035 case ELEMTYPE_Polygon: m_ObjType = OBJTYPE_Database_VectorPolygon; break;
01036 case ELEMTYPE_Edge:
01037 case ELEMTYPE_Triangle: m_ObjType = OBJTYPE_Database_TIN; break;
01038 case ELEMTYPE_CAD: m_ObjType = OBJTYPE_Database_CAD; break;
01039 case ELEMTYPE_RasterCellValue: m_ObjType = OBJTYPE_Database_Raster; break;
01040 case ELEMTYPE_All: m_ObjType = OBJTYPE_Database_Shape; break;
01041 case ELEMTYPE_Label: m_ObjType = OBJTYPE_LAST; break;
01042 }
01043 }
01044
01045 virtual bool Filter (
01046 const RVC::OBJECT& object
01047 ) {
01048 if (m_ObjType == OBJTYPE_All) {
01049 OBJECT parent;
01050 if (object.GetParent(parent) < 0) return (false);
01051 m_ObjType = (parent.GetObjectType() == OBJTYPE_Vector) ? OBJTYPE_Database_VectorPoint : OBJTYPE_Database_TIN;
01052 }
01053 return (object.GetObjectType() == m_ObjType);
01054 }
01055
01056 private:
01057 #ifndef GENERATING_DOXYGEN_OUTPUT
01058 OBJTYPE m_ObjType;
01059 #endif // GENERATING_DOXYGEN_OUTPUT
01060 };
01061
01062 }
01063
01064 #endif //INC_RVC_DBASE_H