00001
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404 #ifndef INC_RVC_OBJECT_H
00405 #define INC_RVC_OBJECT_H
00406
00407 #ifndef INC_RVC_OTYPESET_H
00408 #include <rvc/otypeset.h>
00409 #endif
00410
00411 #ifndef INC_RVC_OBJECTNAME_H
00412 #include <rvc/objectname.h>
00413 #endif
00414
00415 #ifndef INC_MI32_RVCDATETIME_H
00416 #include <mi32/rvcdatetime.h>
00417 #endif
00418
00419 #ifndef INC_MI32_OBSERVER_H
00420 #include <mi32/observer.h>
00421 #endif
00422
00423 #ifndef INC_MI32_SIMPLEAR_H
00424 #include <mi32/simplear.h>
00425 #endif
00426
00427 #ifndef INC_RVC_CREDENTIALS_H
00428 #include <rvc/credentials.h>
00429 #endif
00430
00431 #ifndef INC_RVC_OBJITEM_H
00432 #include <rvc/objitem.h>
00433 #endif
00434
00435
00436 #ifndef GENERATING_DOXYGEN_OUTPUT
00437 enum BYTESWAP {
00438 BYTESWAP_LoHi,
00439 BYTESWAP_HiLo
00440 };
00441 class MISTRING;
00442 class DATETIME;
00443 #endif // GENERATING_DOXYGEN_OUTPUT
00444
00445 namespace RVC {
00446
00447 #ifndef GENERATING_DOXYGEN_OUTPUT
00448 struct ANYCALLBACKSTRUCT;
00449 struct GENINFO;
00450 class OBJITEM;
00451 class OBJITEMLIST;
00452 class FILEHANDLE;
00453 class OBJECTOBSERVER;
00454 class DESCRIPTOR;
00455 class OBJMAKEPARMS;
00456 class OBJOPENPARMS;
00457 #endif // GENERATING_DOXYGEN_OUTPUT
00458
00459 #ifdef RVC_CREDENTIALS_MANDATORY
00460 #define RVC_DEFAULT_CREDENTIALS
00461 #else
00462 #define RVC_DEFAULT_CREDENTIALS = 0
00463 #endif
00464
00465 class OBJECT : public SUBJECT<OBJECTOBSERVER> {
00466 public:
00467
00468 enum COPYFLAGS {
00469 COPYFLAG_None = 0x00000000,
00470 COPYFLAG_DontCopyChildren = 0x00000001,
00471 COPYFLAG_CopySpatialFromLink = 0x00000002,
00472 COPYFLAG_CopyDBTableFromLink = 0x00000004,
00473 COPYFLAG_CopyRVCObjectFromLink = 0x00000008,
00474 COPYFLAG_CopyTextFromLink = 0x00000010,
00475 COPYFLAG_DontCopyStdAttTables = 0x00000020,
00476 COPYFLAG_ReportInvalidParent = 0x00000040,
00477 COPYFLAG_ForceOneObjectCopy = 0x00000080,
00478 COPYFLAG_CopyIfNotModifiable = 0x00000100,
00479 COPYFLAG_CopyToEditFormat = 0x00000200,
00480 COPYFLAG_NoUpdateEmbeddedNames = 0x00000400,
00481 };
00482
00483 enum DUMPINFOFLAGS {
00484 DUMPINFOFLAG_Minimal = 0x00000000,
00485 DUMPINFOFLAG_Subobjects = 0x00000001,
00486 DUMPINFOFLAG_FullHeader = 0x00000002,
00487 DUMPINFOFLAG_ObjectData = 0x00000004,
00488
00489 DUMPINFOFLAG_Standard = (DUMPINFOFLAG_Subobjects | DUMPINFOFLAG_FullHeader),
00490 DUMPINFOFLAG_Maximal = (DUMPINFOFLAG_Subobjects | DUMPINFOFLAG_FullHeader | DUMPINFOFLAG_ObjectData)
00491 };
00492
00493 enum LINKFILEFLAGS {
00494 LINKFILEFLAG_None = 0x00000000,
00495 LINKFILEFLAG_SearchChildren = 0x00000001
00496 };
00497
00498 enum LOCKSTATE {
00499 LOCKSTATE_Unlocked,
00500 LOCKSTATE_CurrentOpenReadIsWritable,
00501 LOCKSTATE_CurrentOpenReadNotWritable,
00502 LOCKSTATE_CurrentOpenWrite,
00503 LOCKSTATE_ExternalOpenRead,
00504 LOCKSTATE_ExternalOpenWrite,
00505 LOCKSTATE_ExternalReadLockFile,
00506 LOCKSTATE_ExternalWriteLockFile
00507 };
00508
00509 enum OPENMODE {
00510 OPENMODE_NotOpen = 0,
00511 OPENMODE_Read,
00512 OPENMODE_Write,
00513 OPENMODE_WriteAttempt,
00514 OPENMODE_ReadNoLock,
00515 OPENMODE_WriteAbsolute,
00516 OPENMODE_ReadAbsolute,
00517 OPENMODE_WriteNoLock,
00518 OPENMODE_ReadNoDialog,
00519 OPENMODE_ReadNoScanAutoLink,
00520 OPENMODE_WriteNoDialog
00521 };
00522
00523 enum TEMPFILE {
00524 TEMPFILE_DeleteOnClose = 0x00000100,
00525 TEMPFILE_DeleteOnExit = 0x00000200
00526 };
00527
00528
00529
00530 #ifndef GENERATING_DOXYGEN_OUTPUT
00531 class CONST_ITERATOR;
00532 friend class CONST_ITERATOR;
00533 class ITERATOR;
00534 friend class ITERATOR;
00535 class FILTER;
00536 class FILTER_OBJTYPESET;
00537 class FILTER_NEWERTHANPARENT;
00538 class TOPLEVELNAMECHANGE;
00539 friend class TOPLEVELNAMECHANGE;
00540 class UNIQUENAMEFILTER;
00541 class UNIQUECHILDNAMEFILTER;
00542 #endif // GENERATING_DOXYGEN_OUTPUT
00543
00547 class AUTOFILECACHE {
00548 public:
00550 AUTOFILECACHE ()
00551 { OBJECT::CacheEnable(); }
00553 ~AUTOFILECACHE ()
00554 { OBJECT::CacheDisable(); }
00555 private:
00556 #ifndef GENERATING_DOXYGEN_OUTPUT
00557
00558 AUTOFILECACHE (const AUTOFILECACHE&);
00559 AUTOFILECACHE& operator= (const AUTOFILECACHE&);
00560 #endif
00561 };
00562
00565 class LINKITEM {
00566 public:
00568 const FILEPATH& GetFilename (
00569 ) const { return (m_Filename); }
00570
00574 const MISTRING& GetObjName (
00575 ) const { return (m_ObjName); }
00576
00578 const OBJITEM& GetSrcObjItem (
00579 ) const { return (m_SrcObjItem); }
00580
00581 private:
00582 #ifndef GENERATING_DOXYGEN_OUTPUT
00583 FILEPATH m_Filename;
00584 MISTRING m_ObjName;
00585 OBJITEM m_SrcObjItem;
00586
00587 friend class OBJECT;
00588 #endif // GENERATING_DOXYGEN_OUTPUT
00589 };
00590 typedef MILIST<LINKITEM> LINKITEMLIST;
00591
00593 OBJECT (
00594 );
00595
00597 OBJECT (
00598 const RVC::OBJECT& obj
00599 );
00600
00602 virtual ~OBJECT (
00603 );
00604
00606 RVC::OBJECT& operator= (
00607 const RVC::OBJECT& rhs
00608 );
00609
00611 operator RVC::OBJITEM (
00612 ) const;
00613
00618 ERRVALUE Attach (
00619 const FILEPATH& FilePath,
00620 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00621 );
00622
00627 ERRVALUE Attach (
00628 const RVC::OBJITEM& ObjItem,
00629 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00630 );
00631
00636 ERRVALUE Attach (
00637 const FILEPATH& FilePath,
00638 const MISTRING& ObjectPath,
00639 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00640 );
00641
00646 ERRVALUE Attach (
00647 const RVC::OBJECT& parent,
00648 const RVC::OBJTYPE ObjType,
00649 const RVC::OBJECTNAME& ShortName,
00650 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00651 );
00652
00657 ERRVALUE Attach (
00658 const RVC::OBJECT& parent,
00659 const RVC::OBJTYPE ObjType,
00660 const RVC::DESCRIPTOR& Descriptor,
00661 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00662 );
00663
00668 ERRVALUE Attach (
00669 const RVC::OBJECT& source,
00670 const MIUNICODE *filename,
00671 const MISTRING& ObjectPath,
00672 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00673 );
00674
00679 ERRVALUE Attach (
00680 const RVC::OBJECT& twin,
00681 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00682 );
00683
00688 ERRVALUE AttachToParent (
00689 const RVC::OBJITEM& ObjItem,
00690 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00691 );
00692
00699 bool CanOpenForWrite (
00700 ) const;
00701
00704 ERRVALUE ChangeDescriptor (
00705 const DESCRIPTOR& NewDescriptor,
00706 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00707 );
00708
00711 ERRVALUE ChangeObjectLink (
00712 const FILEPATH& Filename,
00713 const MISTRING& ObjName,
00714 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00715 );
00716
00719 ERRVALUE ChangeSource (
00720 const RVC::OBJECTSOURCE& NewSource,
00721 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00722 );
00723
00725 ERRVALUE ChangeTempFileMode (
00726 TEMPFILE flags
00727 );
00728
00732 CONST_ITERATOR ChildListBegin (
00733 RVC::OBJTYPE m_ObjType
00734 ) const;
00735
00739 ITERATOR ChildListBegin (
00740 RVC::OBJTYPE m_ObjType
00741 );
00742
00745 CONST_ITERATOR ChildListEnd (
00746 ) const;
00747
00750 ITERATOR ChildListEnd (
00751 );
00752
00756 ERRVALUE Close (
00757 );
00758
00761 INT64 ComputeProjectFileFreeSpace (
00762 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00763 ) const;
00764
00767 ERRVALUE CopyTo (
00768 RVC::OBJECT& DestParentObj,
00769 RVC::OBJECT& DestObj,
00770 #ifdef RVC_CREDENTIALS_MANDATORY
00771 COPYFLAGS CopyFlags,
00772 #else
00773 COPYFLAGS CopyFlags = COPYFLAG_None,
00774 #endif
00775 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00776 ) const;
00777
00780 ERRVALUE CopyTo (
00781 RVC::OBJECT& DestParentObj,
00782 RVC::OBJECT& DestObj,
00783 const DESCRIPTOR& Descriptor,
00784 #ifdef RVC_CREDENTIALS_MANDATORY
00785 COPYFLAGS CopyFlags,
00786 #else
00787 COPYFLAGS CopyFlags = COPYFLAG_None,
00788 #endif
00789 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00790 ) const;
00791
00794 ERRVALUE CopyTo (
00795 RVC::OBJECT& DestParentObj,
00796 RVC::OBJECT& DestObj,
00797 FILTER& filter,
00798 #ifdef RVC_CREDENTIALS_MANDATORY
00799 COPYFLAGS CopyFlags,
00800 #else
00801 COPYFLAGS CopyFlags = COPYFLAG_None,
00802 #endif
00803 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00804 ) const;
00805
00808 ERRVALUE CopyTo (
00809 RVC::OBJECT& DestParentObj,
00810 RVC::OBJECT& DestObj,
00811 FILTER& filter,
00812 const DESCRIPTOR& Descriptor,
00813 #ifdef RVC_CREDENTIALS_MANDATORY
00814 COPYFLAGS CopyFlags,
00815 #else
00816 COPYFLAGS CopyFlags = COPYFLAG_None,
00817 #endif
00818 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00819 ) const;
00820
00822 ERRVALUE CopyChildrenTo (
00823 RVC::OBJECT& DestParentObj,
00824 #ifdef RVC_CREDENTIALS_MANDATORY
00825 COPYFLAGS CopyFlags,
00826 #else
00827 COPYFLAGS CopyFlags = COPYFLAG_None,
00828 #endif
00829 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00830 ) const;
00831
00833 ERRVALUE CopyChildrenTo (
00834 RVC::OBJECT& DestParentObj,
00835 FILTER& filter,
00836 #ifdef RVC_CREDENTIALS_MANDATORY
00837 COPYFLAGS CopyFlags,
00838 #else
00839 COPYFLAGS CopyFlags = COPYFLAG_None,
00840 #endif
00841 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00842 ) const;
00843
00848 ERRVALUE Delete (
00849 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00850 );
00851
00854 void Detach (
00855 );
00856
00858 ERRVALUE DumpObjectInfo (
00859 MISTRING& LogString,
00860 #ifdef RVC_CREDENTIALS_MANDATORY
00861 DUMPINFOFLAGS DumpInfoFlags,
00862 #else
00863 DUMPINFOFLAGS DumpInfoFlags = DUMPINFOFLAG_Minimal,
00864 #endif
00865 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00866 );
00867
00869 static void DumpOpenFileList (
00870 MISTRING& result,
00871 bool IncludeOpenObjects = true
00872 );
00873
00879 bool FindChild (
00880 RVC::OBJECT& Child,
00881 const RVC::OBJECTNAME& name
00882 ) const;
00883
00889 bool FindChild (
00890 RVC::OBJECT& Child,
00891 const RVC::OBJECTNAME& name,
00892 FILTER& filter
00893 ) const;
00894
00900 bool FindChild (
00901 RVC::OBJECT& Child,
00902 const MISTRING& ObjectPath
00903 ) const;
00904
00911 bool FindChild (
00912 RVC::OBJECT& Child,
00913 const RVC::DESCRIPTOR& Descriptor
00914 ) const;
00915
00922 bool FindChild (
00923 RVC::OBJECT& Child,
00924 const RVC::DESCRIPTOR& Descriptor,
00925 FILTER& filter
00926 ) const;
00927
00932 bool FindChildLastUsed (
00933 RVC::OBJECT& Child
00934 ) const;
00935
00940 bool FindChildLastUsed (
00941 RVC::OBJECT& Child,
00942 FILTER& filter
00943 ) const;
00944
00946 ERRVALUE FlushFile (
00947 );
00948
00954 static ERRVALUE GenerateLockNames (
00955 const FILEPATH& SourceFile,
00956 FILEPATH& lokfilepath,
00957 FILEPATH* kolfilepath = 0
00958 );
00959
00961 static ERRVALUE GenerateUniqueDescriptor (
00962 RVC::DESCRIPTOR& Descriptor,
00963 UNIQUENAMEFILTER& filter
00964 );
00965
00967 static ERRVALUE GenerateUniqueName (
00968 RVC::OBJECTNAME& name,
00969 UNIQUENAMEFILTER& filter
00970 );
00971
00973 static ERRVALUE GetAutoLinkCachePath (
00974 FILEPATH& rvcfilepath,
00975 const FILEPATH& extfilepath
00976 );
00977
00979 static void GetAutoLinkLocalPath (
00980 FILEPATH& rvcfilepath,
00981 const FILEPATH& extfilepath
00982 );
00983
00985 static void GetAutoLinkPatternList (
00986 const OBJTYPESET& objtypeset,
00987 MISTRINGLIST& patternlist
00988 );
00989
00994 INT32 GetChildCount (
00995 RVC::OBJTYPE otype = RVC::OBJTYPE_All
00996 ) const;
00997
01002 INT32 GetChildCount (
01003 RVC::OBJTYPE otype,
01004 FILTER& filter
01005 ) const;
01006
01011 INT32 GetChildList (
01012 RVC::OBJTYPE ObjType,
01013 RVC::OBJITEMLIST& ObjItemList,
01014 FILTER* filter = 0
01015 ) const;
01016
01019 static char GetChildSeparator (
01020 ) { return (' '); }
01021
01024 const CREDENTIALS& GetCredentials (
01025 ) const { return (m_Credentials); }
01026
01029 ERRVALUE GetDescriptor (
01030 RVC::DESCRIPTOR& Descriptor,
01031 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01032 ) const;
01033
01036 RVC::OBJTYPE GetDftObjectType (
01037 ) const;
01038
01041 static ERRVALUE GetExternalFileDescription (
01042 const FILEPATH& extfilepath,
01043 MISTRING& description
01044 );
01045
01047 static ERRVALUE GetExternalProjectFileLink (
01048 const FILEPATH& extfilepath,
01049 FILEPATH& ProjectFileLink
01050 );
01051
01056 static ERRVALUE GetFileObjItem (
01057 const FILEPATH& Filename,
01058 RVC::OBJITEM& ObjItem,
01059 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01060 );
01061
01064 const FILEPATH& GetFilePath (
01065 ) const;
01066
01069 const FILEPATH& GetFilePathLink (
01070 ) const;
01071
01074 #ifndef NO_DEPRECATED
01075 DEPRECATED RVCINODENUM GetInodeNum (
01076 ) const { return (GetInodeNumPro()); }
01077 #endif
01078
01080 ERRVALUE GetLinkedFiles (
01081 LINKITEMLIST& LinkFileList,
01082 #ifdef RVC_CREDENTIALS_MANDATORY
01083 LINKFILEFLAGS LinkFileFlags,
01084 #else
01085 LINKFILEFLAGS LinkFileFlags = LINKFILEFLAG_None,
01086 #endif
01087 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01088 ) const;
01089
01090
01091 ERRVALUE GetMetadata (
01092 SIMPLE_ARRAY<UINT8>& buffer,
01093 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01094 ) const;
01095
01098 static const char* GetObjectIconName (
01099 OBJTYPE ObjType
01100 );
01101
01105 DEPRECATED ERRVALUE GetObjectItem (
01106 RVC::OBJITEM& ObjectItem
01107 ) const;
01108
01114 ERRVALUE GetObjectPath (
01115 MISTRING& ObjectPath
01116 ) const;
01117
01120 static const char* GetObjectTagFromObjectType (
01121 RVC::OBJTYPE ObjType
01122 );
01123
01126 RVC::OBJTYPE GetObjectType (
01127 ) const;
01128
01131 static RVC::OBJTYPE GetObjectTypeFromTag (
01132 const char* tag
01133 );
01134
01137 static RVC::OBJTYPE GetObjectTypeFromTag (
01138 const MIUNICODE* tag
01139 );
01140
01144 ERRVALUE GetObjItem (
01145 RVC::OBJITEM& ObjectItem
01146 ) const;
01147
01150 ERRVALUE GetParent (
01151 RVC::OBJECT& ObjParent
01152 ) const { return (v_GetParent(ObjParent)); }
01153
01156 ERRVALUE GetParentStack (
01157 RVC::OBJITEMLIST& ParentStack
01158 ) const;
01159
01161 ERRVALUE GetProductVersion (
01162 UINT16& ProductVersion
01163 ) const;
01164
01167 static LOCKSTATE GetProjectFileLockState (
01168 const FILEPATH& ProjectFile,
01169 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01170 );
01171
01173 ERRVALUE GetSize (
01174 UINT64& size
01175 ) const;
01176
01178 ERRVALUE GetSource (
01179 RVC::OBJECTSOURCE& Source
01180 ) const;
01181
01184 static TEXTID GetTextIDFromObjectType (
01185 OBJTYPE ObjType
01186 );
01187
01191 void GetTimeCreate (
01192 DATETIME& Create
01193 ) const;
01194
01198 ERRVALUE GetTimeLastMod (
01199 DATETIME& LastMod
01200 ) const;
01201
01205 ERRVALUE GetTimeLastUsed (
01206 DATETIME& LastUsed
01207 ) const;
01208
01211 static char GetTypeSeparator (
01212 ) { return ('.'); }
01213
01216 INT32 GetUndoNumLevels (
01217 ) const;
01218
01220 bool IsAttached (
01221 ) const;
01222
01224 bool IsChildOf (
01225 const RVC::OBJECT& parent
01226 ) const;
01227
01229 static bool IsCopyable (
01230 RVC::OBJTYPE ObjType
01231 );
01232
01235 bool IsEqual (
01236 const RVC::OBJECT& rhs
01237 ) const;
01238
01241 bool IsFileLinked (
01242 ) const;
01243
01245 bool IsFileObject (
01246 ) const;
01247
01250 bool IsLiteCreated (
01251 ) const;
01252
01255 bool IsObjectLinked (
01256 ) const;
01257
01260 bool IsOlderThan (
01261 const RVC::OBJECT& Object
01262 ) const;
01263
01266 bool IsOpen (
01267 ) const;
01268
01271 static bool IsSystemInitialized (
01272 );
01273
01276 bool IsTempFile (
01277 ) const;
01278
01280 bool IsTopObject (
01281 ) const;
01282
01286 ERRVALUE IsValidParent (
01287 const RVC::OBJECT& DestParentObj
01288 ) const;
01289
01292 static bool IsValidProjectFile (
01293 const FILEPATH& filename
01294 );
01295
01297 bool IsWritable (
01298 ) const;
01299
01303 ERRVALUE MakeFile (
01304 const FILEPATH& FilePath,
01305 const MISTRING& desc
01306 );
01307
01311 ERRVALUE MakeLink (
01312 const RVC::OBJECT& LinkToObject,
01313 RVC::OBJECT& NewLinkObject,
01314 #ifdef RVC_CREDENTIALS_MANDATORY
01315 bool LinkToSubobjects,
01316 #else
01317 bool LinkToSubobjects = false,
01318 #endif
01319 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01320 );
01321
01325 ERRVALUE MakeLink (
01326 const RVC::OBJECT& LinkToObject,
01327 RVC::OBJECT& NewLinkObject,
01328 const DESCRIPTOR& Descriptor,
01329 #ifdef RVC_CREDENTIALS_MANDATORY
01330 bool LinkToSubobjects,
01331 #else
01332 bool LinkToSubobjects = false,
01333 #endif
01334 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01335 );
01336
01341 ERRVALUE MakeTempFile (
01342 TEMPFILE flags = TEMPFILE_DeleteOnClose
01343 );
01344
01348 ERRVALUE MoveTo (
01349 RVC::OBJECT& DestParentObj,
01350 #ifdef RVC_CREDENTIALS_MANDATORY
01351 COPYFLAGS CopyFlags,
01352 #else
01353 COPYFLAGS CopyFlags = COPYFLAG_None,
01354 #endif
01355 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01356 );
01357
01362 ERRVALUE MoveTo (
01363 RVC::OBJECT& DestParentObj,
01364 FILTER& filter,
01365 #ifdef RVC_CREDENTIALS_MANDATORY
01366 COPYFLAGS CopyFlags,
01367 #else
01368 COPYFLAGS CopyFlags = COPYFLAG_None,
01369 #endif
01370 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01371 );
01372
01376 bool NeedNewerThanParent (
01377 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01378 );
01379
01387 ERRVALUE Open (
01388 #ifdef RVC_CREDENTIALS_MANDATORY
01389 OPENMODE OpenMode,
01390 MDLGPARENT widget,
01391 const CREDENTIALS* Credentials
01392 #else
01393 OPENMODE OpenMode = OPENMODE_Read,
01394 MDLGPARENT widget = 0,
01395 const CREDENTIALS* Credentials = 0
01396 #endif
01397 );
01398
01403 ERRVALUE Open (
01404 const RVC::OBJECT& twin,
01405 #ifdef RVC_CREDENTIALS_MANDATORY
01406 OPENMODE OpenMode,
01407 MDLGPARENT widget,
01408 const CREDENTIALS* Credentials
01409 #else
01410 OPENMODE OpenMode = OPENMODE_Read,
01411 MDLGPARENT widget = 0,
01412 const CREDENTIALS* Credentials = 0
01413 #endif
01414 );
01415
01419 ERRVALUE Open (
01420 const RVC::OBJECT& parent,
01421 const RVC::OBJTYPE ObjType,
01422 const RVC::DESCRIPTOR& Descriptor,
01423 #ifdef RVC_CREDENTIALS_MANDATORY
01424 OPENMODE OpenMode,
01425 MDLGPARENT widget,
01426 const CREDENTIALS* Credentials
01427 #else
01428 OPENMODE OpenMode = OPENMODE_Read,
01429 MDLGPARENT widget = 0,
01430 const CREDENTIALS* Credentials = 0
01431 #endif
01432 );
01433
01438 ERRVALUE Open (
01439 const FILEPATH& FilePath,
01440 #ifdef RVC_CREDENTIALS_MANDATORY
01441 OPENMODE OpenMode,
01442 MDLGPARENT widget,
01443 const CREDENTIALS* Credentials
01444 #else
01445 OPENMODE OpenMode = OPENMODE_Read,
01446 MDLGPARENT widget = 0,
01447 const CREDENTIALS* Credentials = 0
01448 #endif
01449 );
01450
01454 ERRVALUE Open (
01455 const RVC::OBJITEM& ObjItem,
01456 #ifdef RVC_CREDENTIALS_MANDATORY
01457 OPENMODE OpenMode,
01458 MDLGPARENT widget,
01459 const CREDENTIALS* Credentials
01460 #else
01461 OPENMODE OpenMode = OPENMODE_Read,
01462 MDLGPARENT widget = 0,
01463 const CREDENTIALS* Credentials = 0
01464 #endif
01465 );
01466
01470 ERRVALUE Open (
01471 const FILEPATH& FilePath,
01472 const MISTRING& ObjectPath,
01473 #ifdef RVC_CREDENTIALS_MANDATORY
01474 OPENMODE OpenMode,
01475 MDLGPARENT widget,
01476 const CREDENTIALS* Credentials
01477 #else
01478 OPENMODE OpenMode = OPENMODE_Read,
01479 MDLGPARENT widget = 0,
01480 const CREDENTIALS* Credentials = 0
01481 #endif
01482 );
01483
01487 ERRVALUE Open (
01488 const RVC::OBJECT& source,
01489 const MIUNICODE *filename,
01490 const MISTRING& ObjectPath,
01491 #ifdef RVC_CREDENTIALS_MANDATORY
01492 OPENMODE OpenMode,
01493 MDLGPARENT widget,
01494 const CREDENTIALS* Credentials
01495 #else
01496 OPENMODE OpenMode = OPENMODE_Read,
01497 MDLGPARENT widget = 0,
01498 const CREDENTIALS* Credentials = 0
01499 #endif
01500 );
01501
01504 ERRVALUE OpenParent (
01505 const RVC::OBJITEM& ObjItem,
01506 #ifdef RVC_CREDENTIALS_MANDATORY
01507 OPENMODE OpenMode,
01508 MDLGPARENT widget,
01509 const CREDENTIALS* Credentials
01510 #else
01511 OPENMODE OpenMode = OPENMODE_Read,
01512 MDLGPARENT widget = 0,
01513 const CREDENTIALS* Credentials = 0
01514 #endif
01515 );
01516
01519 static ERRVALUE PackProjectFile (
01520 const FILEPATH& ProjectFile,
01521 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01522 );
01523
01525 ERRVALUE RecoverProjectFileTo (
01526 RVC::OBJECT& OutputObject,
01527 MISTRING& LogString,
01528 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01529 );
01530
01532 ERRVALUE RedoChanges (
01533 );
01534
01539 ERRVALUE SaveObjectTo (
01540 RVC::OBJITEM& DestObjItem,
01541 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01542 ) const;
01543
01547 ERRVALUE SearchForInvalidChildObjects (
01548 bool SearchAllSubLevels,
01549 OBJITEMLIST& InvalidChildList,
01550 OBJITEMLIST& SingletonChildList,
01551 OBJITEMLIST& OutOfDateChildList,
01552 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01553 ) const;
01554
01556 static void SetDisableCredentialQuery (
01557 bool value
01558 );
01559
01560
01561 ERRVALUE SetMetadata (
01562 const SIMPLE_ARRAY<UINT8>& buffer,
01563 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01564 );
01565
01568 ERRVALUE SetMinimumTNTVersion (
01569 #ifdef RVC_CREDENTIALS_MANDATORY
01570 UINT16 Version,
01571 #else
01572 UINT16 Version = 0,
01573 #endif
01574 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01575 );
01576
01581 static void SetMultiThreadMode (
01582 bool value
01583 );
01584
01588 ERRVALUE SetTimeLastUsed (
01589 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01590 );
01591
01595 ERRVALUE SetTimeLastUsed (
01596 const DATETIME& NewTime,
01597 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01598 );
01599
01603 ERRVALUE SetTimeLastMod (
01604 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01605 );
01606
01610 ERRVALUE SetTimeLastMod (
01611 const DATETIME& NewTime,
01612 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01613 );
01614
01616 ERRVALUE SetUndoMaxLevel (
01617 INT32 NewLevel
01618 );
01619
01623 static int TestUsableForLimit (
01624 const RVC::OBJITEM& objitem,
01625 UINT32 limitmode
01626 );
01627
01631 static ERRVALUE TestUsableInLite (
01632 const RVC::OBJITEM& objitem
01633 );
01634
01639 ERRVALUE TraverseLink (
01640 RVC::OBJECT& TraversedObject
01641 );
01642
01644 ERRVALUE UndoChanges (
01645 bool SetRedo = false
01646 );
01647
01649 ERRVALUE UndoClear (
01650 );
01651
01654 ERRVALUE UndoMark (
01655 );
01656
01658 ERRVALUE UpdateFile (
01659 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01660 );
01661
01664 ERRVALUE UpdateTimeLastUsed (
01665 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
01666 );
01667
01669 ERRVALUE ValidateFileMapping (
01670 MISTRING& LogString
01671 );
01672
01673 protected:
01674
01676 virtual ERRVALUE v_CopyObject (
01677 RVC::OBJECT& DestParentObj,
01678 RVC::OBJECT& DestObj,
01679 FILTER* filter,
01680 COPYFLAGS CopyFlags,
01681 const CREDENTIALS* Credentials
01682 ) const;
01683
01684 virtual ERRVALUE v_GetDescriptor (DESCRIPTOR& Descriptor, const CREDENTIALS* Credentials) const;
01685
01686 void AssignInfo (const GENINFO& info);
01687 void AssignInode (RVCINODENUM inode);
01688 ERRVALUE AttachLow (const FILEPATH& FilePath, RVCINODENUM InodeNum, OPENMODE OpenMode, MDLGPARENT parent, const RVC::CREDENTIALS* Credentials);
01689
01690 #ifndef GENERATING_DOXYGEN_OUTPUT
01691 void CallOnACLChanged ();
01692 void CallOnAttach ();
01693 void CallOnChildClosing (const OBJECT& object);
01694 void CallOnChildCreate (const OBJECT& object);
01695 void CallOnChildDestroying (const OBJECT& object);
01696 void CallOnChildOpen (const OBJECT& object);
01697 void CallOnClose ();
01698 void CallOnDecendentDescriptorChanged (const OBJECT& object);
01699 void CallOnDescriptorChanged ();
01700 void CallOnDestroy ();
01701 void CallOnDetach ();
01702 void CallOnNotifyRaw (UINT32 reason, void *data = 0);
01703 void CallOnUndoBegin ();
01704 void CallOnUndoEnd ();
01705 void CallOnUndoPossible ();
01706 #endif // GENERATING_DOXYGEN_OUTPUT
01707
01708 ERRVALUE CloseFile (
01709 );
01710
01711 void CopyObject (
01712 const RVC::OBJECT& rhs
01713 );
01714
01717 RVC::FILEHANDLE* GetFileInstance (
01718 ) const;
01719
01722 static RVCINODENUM GetInodeNum (
01723 const RVC::OBJITEM& ObjItem
01724 );
01725
01728 RVCINODENUM GetInodeNumPro (
01729 ) const;
01730
01734 ERRVALUE GetObjItem (
01735 RVCINODENUM InodeNum,
01736 OBJITEM& ObjectItem
01737 ) const;
01738
01740 static ERRVALUE GetObjItem (
01741 const FILEPATH& FilePath,
01742 RVCINODENUM InodeNum,
01743 OBJITEM& ObjectItem
01744 );
01745
01751 OPENMODE GetOpenMode (
01752 ) const;
01753
01754 bool IsFileOpen (
01755 ) const;
01756
01757 bool IsObjectOpen (
01758 const OBJECT& Object
01759 ) const;
01760
01761 ERRVALUE OpenFile (
01762 OPENMODE OpenMode,
01763 MDLGPARENT parent,
01764 const CREDENTIALS* Credentials
01765 );
01766
01767 ERRVALUE OpenRVCFile (const FILEPATH& filepath, OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS* Credentials);
01768 ERRVALUE ReadObjectHeader (GENINFO* ginfo, int HeaderSize, int HeaderType, const CREDENTIALS* Credentials) const;
01769
01770 void SetInodeNum (
01771 RVCINODENUM inode
01772 ) { m_InodeNum = inode; }
01773
01774 void SetMakeObject (const RVC::OBJECT& rhs);
01775
01776 void SetMakeParms (
01777 OBJMAKEPARMS& ObjMakeParms,
01778 const RVC::OBJECT& parent,
01779 const RVC::DESCRIPTOR& Descriptor,
01780 GENINFO* newinfo,
01781 int HeaderSize,
01782 int HeaderType,
01783 const CREDENTIALS* Credentials
01784 );
01785
01786 void SetOpenParms (
01787 OBJOPENPARMS& ObjOpenParms,
01788 const RVC::OBJECT& object,
01789 OPENMODE OpenMode,
01790 const CREDENTIALS* Credentials
01791 );
01792
01793 ERRVALUE SetParent (const OBJITEM& ObjItem);
01794
01795 UINT32 TranslateOpenFlags (
01796 OPENMODE flags
01797 ) const;
01798
01799 private:
01800 #ifndef GENERATING_DOXYGEN_OUTPUT
01801
01802 FILEPATH m_FilePath;
01803 FILEHANDLE *m_FileHandle;
01804 bool m_Attached;
01805 bool m_IsWritable;
01806 bool m_CanWrite;
01807 CREDENTIALS m_Credentials;
01808
01809
01810 RVCDATETIME m_Create;
01811 OBJTYPE m_ObjectType;
01812 RVCINODENUM m_InodeNum;
01813
01814 class TEMPOPENOBJECT;
01815 friend class TEMPOPENOBJECT;
01816 class FILTERTYPE;
01817 friend class FILTERTYPE;
01818 class FILTERFUNC;
01819 friend class FILTERFUNC;
01820
01821 OBJECT (
01822 const FILEHANDLE* FileHandle,
01823 RVCINODENUM InodeNum
01824 );
01825
01826 bool operator== (const OBJECT& rhs) const;
01827
01828 ERRVALUE AttachLow (const OBJITEM& ObjItem, OPENMODE OpenMode, MDLGPARENT parent, const RVC::CREDENTIALS* Credentials);
01829 ERRVALUE AttachLow (const FILEPATH& FilePath, const MISTRING& ObjectPath, OPENMODE OpenMode, MDLGPARENT parent, const RVC::CREDENTIALS* Credentials);
01830 ERRVALUE AttachLow (const OBJECT& parent, const OBJTYPE ObjType, const DESCRIPTOR& Descriptor, OPENMODE OpenMode, MDLGPARENT widget, const RVC::CREDENTIALS* Credentials);
01831 ERRVALUE AttachLow (const OBJECT& parent, const OBJTYPE ObjType, const OBJECTNAME& Name, OPENMODE OpenMode, MDLGPARENT widget, const RVC::CREDENTIALS* Credentials);
01832 ERRVALUE AttachLow (const OBJECT& source, const MIUNICODE *filename, const MISTRING& ObjectPath, OPENMODE OpenMode, MDLGPARENT parent, const RVC::CREDENTIALS* Credentials);
01833
01834 static void CacheAdd (const FILEPATH& filepath, const CREDENTIALS *pCredentials);
01835 static void CacheDisable ();
01836 static void CacheEnable ();
01837
01838 static void CallbackFunc (ANYCALLBACKSTRUCT* cb, void *data);
01839
01840 #endif // GENERATING_DOXYGEN_OUTPUT
01841
01848 virtual ERRVALUE v_CloseObject (
01849 );
01850
01855 virtual RVC::OBJTYPE v_GetDftObjectType (
01856 ) const;
01857
01860 virtual FILTER* v_GetObjectFilter (
01861 ) const;
01862
01864 virtual ERRVALUE v_GetParent (
01865 RVC::OBJECT& ObjParent
01866 ) const;
01867
01871 virtual bool v_IsMultiObject (
01872 ) const;
01873
01880 virtual bool v_IsObjectOpen (
01881 ) const;
01882
01889 virtual ERRVALUE v_OpenObject (
01890 OPENMODE OpenMode,
01891 MDLGPARENT parent,
01892 const CREDENTIALS* Credentials
01893 );
01894
01899 virtual bool v_ValidateObjectType (
01900 const RVC::OBJTYPE otype
01901 ) const;
01902
01903 };
01904 #ifndef GENERATING_DOXYGEN_OUTPUT
01905 DEFINE_ENUM_OP_BITWISE(OBJECT::COPYFLAGS)
01906 #endif
01907
01908
01913 class OBJECT::CONST_ITERATOR {
01914 public:
01915
01917 CONST_ITERATOR (
01918 ) :
01919 m_Iterator(0),
01920 m_CurrentObj(0),
01921 m_ObjType(OBJTYPE_All)
01922 {}
01923
01925 explicit CONST_ITERATOR (
01926 int
01927 ) :
01928 m_Iterator(0),
01929 m_CurrentObj(0),
01930 m_ObjType(OBJTYPE_All)
01931 {}
01932
01934 CONST_ITERATOR (
01935 const CONST_ITERATOR& rhs
01936 );
01937
01939 CONST_ITERATOR (
01940 const RVC::OBJECT* parent,
01941 RVC::OBJTYPE m_ObjType
01942 );
01943
01945 virtual ~CONST_ITERATOR (
01946 );
01947
01949 CONST_ITERATOR& operator= (
01950 const CONST_ITERATOR& rhs
01951 );
01952
01954 const RVC::OBJECT& operator* (
01955 ) const {return (*m_CurrentObj);}
01956
01958 const RVC::OBJECT* operator-> (
01959 ) const {return (&**this);}
01960
01962 CONST_ITERATOR& operator++ (
01963 );
01964
01966 bool operator== (
01967 const CONST_ITERATOR& rhs
01968 ) const {return (m_Iterator == rhs.m_Iterator);}
01969
01971 bool operator!= (
01972 const CONST_ITERATOR& rhs
01973 ) const {return (!(*this == rhs));}
01974
01975 protected:
01976 void *m_Iterator;
01977 OBJECT *m_CurrentObj;
01978 OBJTYPE m_ObjType;
01979 };
01980
01981
01986 class OBJECT::ITERATOR : public OBJECT::CONST_ITERATOR {
01987 public:
01989 ITERATOR (
01990 ) : CONST_ITERATOR() {}
01991
01993 explicit ITERATOR (
01994 int
01995 ) : CONST_ITERATOR() {}
01996
01998 ITERATOR (
01999 CONST_ITERATOR& rhs
02000 ) : CONST_ITERATOR(rhs) {}
02001
02003 ITERATOR (
02004 const RVC::OBJECT* parent,
02005 RVC::OBJTYPE ObjType
02006 ) : CONST_ITERATOR(parent, ObjType) {}
02007
02009 RVC::OBJECT& operator* (
02010 ) const {return (*m_CurrentObj);}
02011
02013 RVC::OBJECT* operator-> (
02014 ) const {return (&**this);}
02015
02017 ITERATOR& operator++ (
02018 ) {
02019 CONST_ITERATOR::operator++();
02020 return (*this);
02021 }
02022
02024 bool operator== (
02025 const ITERATOR& rhs
02026 ) const {return (m_Iterator == rhs.m_Iterator);}
02027
02029 bool operator!= (
02030 const ITERATOR& obj
02031 ) const {return (!(*this == obj));}
02032
02033 };
02034
02035
02042 class OBJECTOBSERVER : public OBSERVER_BASE {
02043 public:
02044
02046 explicit OBJECTOBSERVER (
02047 OBJECT& object
02048 ) :
02049 OBSERVER_BASE(object)
02050 {}
02051
02053 virtual ~OBJECTOBSERVER (
02054 ) {}
02055
02057 virtual void OnACLChanged (
02058 ) {return;}
02059
02061 virtual void OnAttach (
02062 ) { return;}
02063
02065 virtual void OnChildClosing (
02066 const OBJECT&
02067 ) {return;}
02068
02072 virtual void OnChildCreate (
02073 const OBJECT&
02074 ) {return;}
02075
02078 virtual void OnChildDestroying (
02079 const OBJECT&
02080 ) {return;}
02081
02085 virtual void OnChildOpen (
02086 const OBJECT&
02087 ) {return;}
02088
02090 virtual void OnClose (
02091 ) {return;}
02092
02094 virtual void OnDecendentDescriptorChanged (
02095 const OBJECT&
02096 ) {return;}
02097
02099 virtual void OnDescriptorChanged (
02100 ) {return;}
02101
02103 virtual void OnDestroy (
02104 ) { return;}
02105
02107 virtual void OnDetach (
02108 ) { return;}
02109
02111 virtual void OnUndoBegin (
02112 ) {return;}
02113
02115 virtual void OnUndoEnd (
02116 ) {return;}
02117
02119 virtual void OnUndoPossible (
02120 ) {return;}
02121
02122 protected:
02123
02124 virtual void OnNotifyRaw (
02125 UINT32,
02126 void *
02127 ) {return;}
02128
02129 private:
02130 #ifndef GENERATING_DOXYGEN_OUTPUT
02131
02132 OBJECTOBSERVER (const OBJECTOBSERVER& rhs);
02133 OBJECTOBSERVER& operator= (const OBJECTOBSERVER& rhs);
02134
02135 friend class OBJECT;
02136 #endif // GENERATING_DOXYGEN_OUTPUT
02137
02138 };
02139
02140
02147
02148 class OBJECT::FILTER {
02149 public:
02151 FILTER () {};
02152
02154 virtual ~FILTER () {};
02155
02158 virtual bool Filter (
02159 const RVC::OBJECT& obj
02160 ) = 0;
02161 };
02162
02163
02165 class OBJECT::UNIQUENAMEFILTER {
02166 public:
02167
02170 virtual int Filter (
02171 const RVC::OBJECTNAME& name
02172 ) = 0;
02173 };
02174
02175
02176 class OBJECT::UNIQUECHILDNAMEFILTER : public OBJECT::UNIQUENAMEFILTER {
02177 public:
02178 UNIQUECHILDNAMEFILTER (
02179 const RVC::OBJECT& ParentObj,
02180 RVC::OBJTYPE ObjType
02181 );
02182
02183 private:
02184 #ifndef GENERATING_DOXYGEN_OUTPUT
02185 const RVC::OBJECT& m_ParentObj;
02186 RVC::OBJTYPE m_ObjType;
02187
02188 virtual int Filter (const RVC::OBJECTNAME& name);
02189
02190 UNIQUECHILDNAMEFILTER& operator= (const UNIQUECHILDNAMEFILTER&);
02191 #endif // GENERATING_DOXYGEN_OUTPUT
02192 };
02193
02194
02198 class OBJECT::TOPLEVELNAMECHANGE {
02199 public:
02200 TOPLEVELNAMECHANGE (
02201 const OBJECT& TopSrcObject,
02202 const OBJECT& TopDestObject
02203 );
02204
02205 ~TOPLEVELNAMECHANGE (
02206 );
02207
02208 private:
02209 #ifndef GENERATING_DOXYGEN_OUTPUT
02210 const OBJECT& m_TopSrcObject;
02211
02212 TOPLEVELNAMECHANGE& operator= (const TOPLEVELNAMECHANGE&);
02213 #endif // GENERATING_DOXYGEN_OUTPUT
02214 };
02215
02216
02218 class OBJECT::FILTER_NEWERTHANPARENT : public OBJECT::FILTER {
02219 public:
02220
02221 virtual bool Filter (
02222 const OBJECT& obj
02223 ) {
02224 OBJECT parent;
02225 return (obj.GetParent(parent) >= 0 && !obj.IsOlderThan(parent));
02226 }
02227 };
02228
02230 class OBJECT::FILTER_OBJTYPESET : public OBJECT::FILTER {
02231 public:
02233 FILTER_OBJTYPESET (
02234 const OBJTYPESET& ObjTypes
02235 ) : m_ObjTypes(ObjTypes) { }
02236
02238 virtual bool Filter (
02239 const OBJECT& obj
02240 ) { return (m_ObjTypes.Contains(obj.GetObjectType())); }
02241
02242 void SetTypes (
02243 const OBJTYPESET& ObjTypes
02244 ) { m_ObjTypes = ObjTypes; }
02245
02246 private:
02247 #ifndef GENERATING_DOXYGEN_OUTPUT
02248 OBJTYPESET m_ObjTypes;
02249 #endif // GENERATING_DOXYGEN_OUTPUT
02250 };
02251
02252 }
02253
02254 #endif // INC_RVC_OBJECT_H