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

  1. //
  2. //----------------------------------------------------------------------------
  3. // ObjectComponents
  4. // (C) Copyright 1994 by Borland International, All Rights Reserved
  5. //
  6. //   Definition of TOcPart class
  7. //----------------------------------------------------------------------------
  8. #if !defined(OCF_OCPART_H)
  9. #define OCF_OCPART_H
  10.  
  11. #if !defined(OCF_BOLEINTF_H)
  12. # include <ocf/boleintf.h>
  13. #endif
  14. #if !defined(OCF_OCOBJECT_H)
  15. # include <ocf/ocobject.h>
  16. #endif
  17. #if !defined(OCF_AUTODEFS_H)
  18. # include <ocf/autodefs.h>
  19. #endif
  20. #if !defined(CLASSLIB_VECTIMP_H)
  21. # include <classlib/vectimp.h>
  22. #endif
  23. #if !defined(OSL_GEOMETRY_H)
  24. # include <osl/geometry.h>
  25. #endif
  26.  
  27. // Classes referenced
  28. //
  29. class _ICLASS TOcStorage;
  30. class _ICLASS TOcDocument;
  31. class TOcVerb;
  32.  
  33. //
  34. // OC part class represents an embeded or linked part in a document
  35. //
  36. class _ICLASS TOcPart : public TUnknown, private IBSite {
  37.   public:
  38.     TOcPart(TOcDocument& document, TOcInitInfo far& initInfo, TRect pos,
  39.             int id = 0);
  40.     TOcPart(TOcDocument& document, const char far* name);
  41.  
  42.     void    Delete();
  43.  
  44.     bool    operator ==(const TOcPart& other) {return ToBool(&other == this);}
  45.  
  46.     // Delegated doc functions from TOcDocument
  47.     //
  48.     IBPart* GetBPartI() {return BPartI;}
  49.     bool    Save(bool SameAsLoad = true, bool remember = true);
  50.     bool    Load();
  51.     int     Detach();
  52.     void    FinishLoading();
  53.  
  54.     // Position & size information
  55.     //
  56.     TPoint  GetPos() const {return Pos;}
  57.     void    SetPos(const TPoint& pos);
  58.     TSize   GetSize() const;
  59.     void    SetSize(const TSize& size);
  60.     TRect   GetRect() const {return TRect(Pos, Size);}
  61.     void    UpdateRect();
  62.     bool    IsVisible(const TRect& logicalRect) const
  63.               {return ToBool(IsVisible() && logicalRect.Touches(GetRect()));}
  64.  
  65.     // Flag accessor functions
  66.     //
  67.     void    Select(bool select)
  68.               {if (select) Flags |= Selected; else Flags &= ~Selected;}
  69.     bool    IsSelected() const {return ToBool(Flags&Selected);}
  70.     void    SetVisible(bool visible)
  71.               {if (visible) Flags |= Visible; else Flags &= ~Visible;}
  72.     bool    IsVisible() const {return ToBool(Flags&Visible);}
  73.     bool    IsActive() const {return ToBool(Flags&Active);}
  74.     void    SetActive() {Flags |= Active;}
  75.     bool    IsLink() const {return ToBool(Flags&Link);}
  76.  
  77.     // Naming
  78.     //
  79.     TString    GetName() {return Name;}
  80.     void       Rename();
  81.  
  82.     // Pass thru functions to corresponding IBPart
  83.     //
  84.     bool    Save(IStorage* storage, bool sameAsLoad, bool remember);
  85.     bool    Draw(HDC dc, const TRect& pos, const TRect& clip, TOcAspect aspect = asDefault);
  86.     bool    Activate(bool activate);
  87.     bool    Show(bool show) {return HRSucceeded(BPartI->Show(show));}
  88.     bool    Open(bool open) {return HRSucceeded(BPartI->Open(open));}
  89.     HWND    OpenInPlace(HWND hwnd) {return BPartI->OpenInPlace(hwnd);}
  90.     bool    CanOpenInPlace() {return HRSucceeded(BPartI->CanOpenInPlace());}
  91.     bool    Close();
  92.     bool    SetHost(IBContainer far* container)
  93.               {return HRSucceeded(BPartI->SetHost(container));}
  94.  
  95.     bool    EnumVerbs(const TOcVerb&);
  96.     bool    DoVerb(uint);
  97.     LPCOLESTR    GetServerName(TOcPartName partName)
  98.         {return const_cast<LPOLESTR>(BPartI->GetName((TOcPartName)partName));}
  99.     HRESULT QueryServer(const IID far& iid, void far* far* iface);
  100.  
  101.     bool    SetFormatData(TOcFormatInfo far* fmt, HANDLE data, bool release);
  102.  
  103.     // Object reference & lifetime managment
  104.     // For internal OCF use only
  105.     //
  106.     ulong   _IFUNC AddRef() {return GetOuter()->AddRef();}
  107.     ulong   _IFUNC Release() {return GetOuter()->Release();}
  108.     HRESULT _IFUNC QueryInterface(const GUID far& iid, void far*far* iface)
  109.                      {return GetOuter()->QueryInterface(iid, iface);}
  110.  
  111.   protected:
  112.    ~TOcPart();
  113.  
  114.     void    Init(TOcInitInfo far& initInfo);  // ctor helper
  115.  
  116.     // TUnknown virtual overrides
  117.     //
  118.     HRESULT      QueryObject(const IID far& iid, void far* far* iface);
  119.  
  120.     // IBSite implementation for BOle to use
  121.     //
  122.     HRESULT   _IFUNC SiteShow(bool);
  123.     HRESULT   _IFUNC DiscardUndo();
  124.     HRESULT   _IFUNC GetSiteRect(TRect far*, TRect far*);
  125.     HRESULT   _IFUNC SetSiteRect(const TRect far*);
  126.     HRESULT   _IFUNC SetSiteExtent(const TSize far*);
  127.     HRESULT   _IFUNC GetZoom(TOcScaleInfo far* scale);
  128.     void      _IFUNC Invalidate(TOcInvalidate);
  129.     void      _IFUNC OnSetFocus(bool set);
  130.     HRESULT   _IFUNC Init(IBDataProvider far*, IBPart far*, LPCOLESTR, bool);
  131.     void      _IFUNC Disconnect();
  132.  
  133.   protected:
  134.     IUnknown*    BPart;      // Our corresponding helper object & interfaces
  135.     IBPart*      BPartI;
  136.     IBLinkable*  BLPartI;
  137.  
  138.     TOcDocument& OcDocument; // The OC document we are imbeded in
  139.     TOcStorage*  Storage;    // The storage we are in
  140.  
  141. #if defined(BI_DATA_NEAR)
  142.     string&      Name;       // Name of this part
  143.     TPoint&      Pos;        // position of this part in the document
  144.     TSize&       Size;       // Keep our idea of size independently
  145. #else
  146.     string       Name;
  147.     TPoint       Pos;
  148.     TSize        Size;
  149. #endif
  150.     enum TFlag { Visible=0x01, Selected=0x02, Active=0x04, Link=0x08, Closing=0x10 };
  151.     uint16       Flags;      // Is this part Selected/Visible/Active/ALink?
  152.  
  153.   friend class TOcPartCollection;
  154. };
  155.  
  156. //
  157. // Container of parts with iterator
  158. //
  159. class TOcPartCollection : private TCVectorImp<TOcPart*> {
  160.   private:
  161.     typedef TCVectorImp<TOcPart*> Base;
  162.     friend class TOcPartCollectionIter;
  163.   public:
  164.     TOcPartCollection();
  165.    ~TOcPartCollection();
  166.     void operator delete(void* ptr) {TStandardAllocator::operator delete(ptr);}
  167.  
  168.     void Clear();
  169.     int Add(TOcPart* const& part) {return Base::Add(part);}
  170.     int IsEmpty() const {return Base::IsEmpty();}
  171.     unsigned Find(TOcPart* const& part) const {return Base::Find(part);}
  172.     virtual unsigned Count() const {return Base::Count();}
  173.     int Detach(TOcPart* const& part, int del = 0);
  174.  
  175.     TOcPart*   Locate(TPoint& point);
  176.     bool       SelectAll(bool select = false);
  177. };
  178.  
  179. //
  180. //
  181. //
  182. class TOcPartCollectionIter : private TCVectorIteratorImp<TOcPart*> {
  183.   private:
  184.     typedef TCVectorIteratorImp<TOcPart*> Base;
  185.   public:
  186.     TOcPartCollectionIter(const TOcPartCollection& c) : Base(c) {}
  187.     operator int() const {return Base::operator int();}
  188.     TOcPart* Current() const {return Base::Current();}
  189.     TOcPart* operator ++(int) {return Base::operator ++(0);}
  190.     TOcPart* operator ++() {return Base::operator ++();}
  191.     void Restart() {Base::Restart();}
  192.     void Restart(unsigned start, unsigned stop) {Base::Restart(start, stop);}
  193. };
  194.  
  195. //
  196. //
  197. //
  198. class TOcVerb {
  199.   public:
  200.     TOcVerb();
  201.  
  202.   public:
  203.     LPCOLESTR   TypeName;
  204.     LPCOLESTR   VerbName;
  205.     uint        VerbIndex;
  206.     bool        CanDirty;
  207. };
  208.  
  209. //
  210. // View/Data change info
  211. //
  212. class TOcPartChangeInfo {
  213.   public:
  214.     TOcPartChangeInfo(TOcPart* part, TOcInvalidate type = invView)
  215.       : Part(part), Type(type) {}
  216.  
  217.     bool     IsDataChange() {return Type & invData;}
  218.     bool     IsViewChange() {return Type & invView;}
  219.  
  220.     void     SetDataChange() {Type |= invData;}
  221.     void     SetViewChange() {Type |= invView;}
  222.  
  223.     TOcPart* GetPart() {return Part;}
  224.     void     SetPart(TOcPart* part) {Part = part;}
  225.  
  226.     int      GetType() {return Type;}
  227.  
  228.   protected:
  229.     int         Type;  // what type of change
  230.     TOcPart*    Part;
  231. };
  232. #endif
  233.  
  234.