home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / owlinc.pak / STGDOC.H < prev    next >
C/C++ Source or Header  |  1997-07-23  |  3KB  |  96 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // (C) Copyright 1993, 1994 by Borland International, All Rights Reserved
  4. //
  5. //----------------------------------------------------------------------------
  6. #if !defined(OWL_STGDOC_H)
  7. #define OWL_STGDOC_H
  8.  
  9. #if !defined(OWL_DOCVIEW_H)
  10. # include <owl/docview.h>
  11. #endif
  12. #if !defined(__IOSTREAM_H)
  13. # include <iostream.h>
  14. #endif
  15.  
  16. //
  17. // forward reference OLE interface without including headers
  18. //
  19. #if defined(BI_PLAT_WIN16)
  20.   class __huge IStorage;
  21.   class __huge IStream;
  22. #else
  23.   class IStorage;
  24.   class IStream;
  25. #endif
  26.  
  27. //
  28. //  class TStorageDocument
  29. //  ----- ----------------
  30. //
  31. class _USERCLASS TStorageDocument : public TDocument {
  32.   public:
  33.     enum TStgDocProp {
  34.       PrevProperty = TDocument::NextProperty-1,
  35.       CreateTime,        // FILETIME
  36.       ModifyTime,        // FILETIME
  37.       AccessTime,        // FILETIME
  38.       StorageSize,       // unsigned long
  39.       IStorageInstance,  // IStorage*
  40.       NextProperty,
  41.     };
  42.     TStorageDocument(TDocument* parent = 0)
  43.                      : TDocument(parent), StorageI(0), OpenCount(0),
  44.                        CanRelease(false), OrgStorageI(0), LockBytes(0) {}
  45.    ~TStorageDocument();
  46.     virtual bool ReleaseDoc();
  47.  
  48.     // implement virtual methods of TDocument
  49.     //
  50.     TInStream*  InStream(int omode, const char far* strmId=0);
  51.     TOutStream* OutStream(int omode, const char far* strmId=0);
  52.     bool        Open(int omode, const char far* stgId);
  53.     bool        Close();
  54.     bool        Commit(bool force = false);
  55.     bool        CommitTransactedStorage();
  56.     bool        Revert(bool clear = false);
  57.     bool        SetDocPath(const char far* path);
  58.     bool        IsOpen()  {return (StorageI != 0);}
  59.  
  60.     int         FindProperty(const char far* name);  // return index
  61.     int         PropertyFlags(int index);
  62.     const char* PropertyName(int index);
  63.     int         PropertyCount() {return NextProperty - 1;}
  64.     int         GetProperty(int index, void far* dest, int textlen=0);
  65.     bool        SetProperty(int index, const void far* src);
  66.  
  67.     // additional methods for obtaining IStorage
  68.     //
  69.     virtual bool  SetStorage(IStorage* stg, bool remember = true);  // Set a new IStorage
  70.     virtual bool  RestoreStorage();
  71.     virtual bool  OpenHandle(int omode, HANDLE hGlobal); // open on global memory
  72.     virtual bool  SetHandle(int omode, HANDLE hGlobal, bool create = false, bool remember = false);
  73.     virtual bool  GetHandle(HGLOBAL* handle);
  74.  
  75.     IStorage*     GetStorage() {return StorageI;}
  76.  
  77.   protected:
  78.     int         ThisOpen;        // actual mode bits used for opening storage
  79.     IStorage*   StorageI;        // current IStorage instance, 0 if not open
  80.     IStorage*   OrgStorageI;     // original IStorage
  81.     ILockBytes* LockBytes;       // ILockBytes used, if any
  82.  
  83.   private:
  84.     bool        CanRelease;      // can we release the IStorage?
  85.  
  86.   private:
  87.     int         OpenCount;
  88.     void        DetachStream(TStream& strm);  // override TDocument virtual
  89.  
  90.   DECLARE_STREAMABLE(_OWLCLASS, TStorageDocument,1);
  91.   friend class _OWLCLASS_RTL TStorageInStream;
  92.   friend class _OWLCLASS_RTL TStorageOutStream;
  93. };
  94.  
  95. #endif  // OWL_STGDOC_H
  96.