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

  1. //
  2. //----------------------------------------------------------------------------
  3. // ObjectComponents
  4. // (C) Copyright 1994 by Borland International, All Rights Reserved
  5. //
  6. //   Definition of Compound Document TOcView Class
  7. //----------------------------------------------------------------------------
  8. #if !defined(OCF_OCVIEW_H)
  9. #define OCF_OCVIEW_H
  10.  
  11. #if !defined(OCF_OCDOC_H)
  12. # include <ocf/ocdoc.h>      // Client related
  13. #endif
  14.  
  15. #if !defined(OCF_OCAPP_H)
  16. # include <ocf/ocapp.h>      // Client related
  17. #endif
  18.  
  19. // Classes referenced
  20. //
  21. class _ICLASS TOcStorage;
  22. class _ICLASS TOcDataProvider;
  23. class TRegList;
  24.  
  25. // View options flags, set with SetOption
  26. //
  27. enum TOcViewOptions {
  28.   voNoInPlace        = 0x0001, // If FALSE, allow inplace activate in container
  29.   voNoNestedInPlace  = 0x0002, // If FALSE, allow nested inplace activate " "
  30.   voNoInPlaceServer  = 0x0004, // If FALSE, allow server to activate inplace
  31. };
  32.  
  33. //
  34. // Clipboard format wrapper
  35. //
  36. class TOcFormat {
  37.   public:
  38.     TOcFormat();
  39.     TOcFormat(uint fmtId, char far* fmtName, char far* fmtResultName,
  40.               uint fmtMedium, bool fmtIsLinkable,
  41.               uint aspect = 1, uint direction = 1);
  42.  
  43.     void operator =(const TOcFormatInfo&);
  44.     bool operator ==(const TOcFormat& other) {return ToBool(&other == this);}
  45.     void SetFormatId(uint id) {Id = id;}
  46.     void SetFormatName(char far* name, TOcApp& ocApp);
  47.     void SetFormatName(uint id, TOcApp& ocApp);
  48.     void SetMedium(uint medium) {Medium = (ocrMedium)medium;}
  49.     void SetAspect(uint aspect) {Aspect = aspect;}
  50.     void SetDirection(uint direction) {Direction = direction;}
  51.     void SetLinkable(bool link = true) {IsLinkable = link;}
  52.     void Disable(bool disable = true) {Disabled = disable;}
  53.  
  54.     uint GetFormatId() const {return Id;}
  55.     char far* GetRegName() {return RegName;}
  56.     char far* GetFormatName() {return Name;}
  57.     uint GetMedium() const {return Medium;}
  58.     uint GetAspect() const {return Aspect;}
  59.     uint GetDirection() const {return Direction;}
  60.     bool IsDisabled() const {return Disabled;}
  61.  
  62.     void GetFormatInfo(TOcFormatInfo far& f);
  63.  
  64.   private:
  65.     uint      Id;
  66.     char      RegName[32];
  67.     char      Name[32];
  68.     char      ResultName[32];
  69.     ocrMedium Medium;
  70.     bool      IsLinkable;
  71.  
  72.     uint Aspect;      // last three data members added & maintained by ocf
  73.     uint Direction;
  74.     bool Disabled;    // Format not available
  75. };
  76.  
  77. //
  78. // Container of clipboard formats with iterator
  79. //
  80. class TOcFormatList : private TICVectorImp<TOcFormat> {
  81.   public:
  82.     TOcFormatList();
  83.    ~TOcFormatList();
  84.     void operator delete(void* ptr) {TStandardAllocator::operator delete(ptr);}
  85.  
  86.     TOcFormat*&  operator [](unsigned index) {return Base::operator[](index);}
  87.     void         Clear(int del = 1) {Base::Flush(del);}
  88.     int          Add(TOcFormat* format) {return Base::Add(format);}
  89.     int          IsEmpty() const {return Base::IsEmpty();}
  90.     unsigned     Find(const TOcFormat* format) const {return Base::Find(format);}
  91.     virtual uint Count() const {return Base::Count();}
  92.     int          Detach(const TOcFormat* format, int del = 0)
  93.                     {return Base::Detach(Find(format), del);}
  94.     TOcFormat* Find(uint const id) const;
  95.  
  96.   private:
  97.     typedef TICVectorImp<TOcFormat> Base;
  98.     friend class TOcFormatListIter;
  99. };
  100.  
  101. //
  102. //
  103. //
  104. class TOcFormatListIter : public TICVectorIteratorImp<TOcFormat> {
  105.   private:
  106.     typedef TICVectorIteratorImp<TOcFormat> Base;
  107.   public:
  108.     TOcFormatListIter(const TOcFormatList& c) : Base(c) {}
  109.     operator   int() const {return Base::operator int();}
  110.     TOcFormat* Current() const {return Base::Current();}
  111.     TOcFormat* operator ++(int) {return Base::operator ++(0);}
  112.     TOcFormat* operator ++() {return Base::operator ++();}
  113.     void       Restart() {Base::Restart();}
  114.     void       Restart(unsigned start, unsigned stop) {Base::Restart(start, stop);}
  115. };
  116.  
  117. //----------------------------------------------------------------------------
  118.  
  119. //
  120. // class TOcView
  121. // ----- -------
  122. // The TOcView partner is a container (viewer) of a given (server/client)
  123. // document.
  124. //
  125. class _ICLASS TOcView : public TUnknown,
  126.                         public IBContainer,
  127.                         public IBContains,
  128.                         public IBDropDest {
  129.   public:
  130.     TOcView(TOcDocument& doc, TRegList* regList=0, IUnknown* outer=0);
  131.  
  132.     virtual void   ReleaseObject();
  133.  
  134.     TOcDocument& GetOcDocument() {return OcDocument;}
  135.  
  136.     // Helper functions
  137.     //
  138.     IBRootLinkable* GetLinkable() {return BLDocumentI;}
  139.  
  140.     // Clipboard support
  141.     //
  142.     bool         RegisterClipFormats(TRegList& regList);
  143.     bool         BrowseClipboard(TOcInitInfo& initInfo);
  144.     bool         PasteNative(TOcInitInfo& init, TPoint far* where = 0);
  145.     bool         Paste(bool linking = false);
  146.     void         SetOcData(TOcDataProvider* ocData = 0) {OcData = ocData;}
  147.     TOcDataProvider* GetOcData() {return OcData;}
  148.  
  149.     // View related
  150.     //
  151.     void         SetupWindow(HWND hWin, bool embedded = false);
  152.     TPoint       GetOrigin() const {return Origin;}
  153.     TRect        GetWindowRect() const;
  154.     void         ScrollWindow(int dx, int dy);
  155.     void         InvalidatePart(TOcPartChangeInfo& changeInfo);
  156.     virtual void Rename();
  157.     TOcLinkView* GetDocLink();
  158.     bool         IsOptionSet(uint32 option) const;
  159.     void         SetOption(uint32 bit, bool state);
  160.  
  161.     // Get/Set active part
  162.     //
  163.     TOcPart*     GetActivePart() {return ActivePart;}
  164.     void         SetActivePart(TOcPart* part) {ActivePart = part;} // Internal use
  165.     bool         ActivatePart(TOcPart* part);
  166.  
  167.     // IBDocument pass-thrus
  168.     //
  169.     void         EvResize();
  170.     void         EvActivate(bool activate);
  171.     virtual void EvClose();
  172.     virtual bool EvSetFocus(bool set);
  173.     bool         EnumLinks(IBLinkInfo far* far*);
  174.     bool         BrowseLinks();
  175.     bool         UpdateLinks();
  176.  
  177.     // Object reference & lifetime managment
  178.     // For internal OCF use only
  179.     //
  180.     ulong   _IFUNC AddRef() {return GetOuter()->AddRef();}
  181.     ulong   _IFUNC Release() {return GetOuter()->Release();}
  182.     HRESULT _IFUNC QueryInterface(const GUID far& iid, void far*far* iface)
  183.                      {return GetOuter()->QueryInterface(iid, iface);}
  184.   protected:
  185.     // IBContains implementation for BOle to use
  186.     //
  187.     HRESULT _IFUNC Init(LPCOLESTR);
  188.     HRESULT _IFUNC GetPart(IBPart far* far*, LPCOLESTR);
  189.  
  190.     // IBDataNegotiator implementation
  191.     //
  192.     uint     _IFUNC CountFormats();
  193.     HRESULT  _IFUNC GetFormat(uint, TOcFormatInfo far*);
  194.  
  195.     // IBWindow implementation
  196.     //
  197.     HWND     _IFUNC GetWindow();
  198.     HRESULT  _IFUNC GetWindowRect(TRect far* r);
  199.     LPCOLESTR _IFUNC GetWindowTitle();
  200.     void     _IFUNC AppendWindowTitle(LPCOLESTR title);
  201.     HRESULT  _IFUNC SetStatusText(LPCOLESTR text);
  202.     HRESULT  _IFUNC RequestBorderSpace(const TRect far*);
  203.     HRESULT  _IFUNC SetBorderSpace(const TRect far*);
  204.     HRESULT  _IFUNC InsertContainerMenus(HMENU, TOcMenuWidths far*);
  205.     HRESULT  _IFUNC SetFrameMenu(HMENU);
  206.     void     _IFUNC RestoreUI();
  207.     HRESULT  _IFUNC Accelerator(MSG far*);
  208.     HRESULT  _IFUNC GetAccelerators(HACCEL far*, int far*);
  209.  
  210.     // IBDropDest implementation
  211.     //
  212.     HRESULT  _IFUNC Drop(TOcInitInfo far*, TPoint far*, const TRect far*);
  213.     void     _IFUNC DragFeedback(TPoint far*, const TRect far*, TOcMouseAction, uint, HRESULT& hr);
  214.     HRESULT  _IFUNC Scroll(TOcScrollDir scrollDir);
  215.     HRESULT  _IFUNC GetScrollRect(TRect far*);
  216.  
  217.     // IBContainer implementation
  218.     //
  219.     HRESULT  _IFUNC FindDropDest(TPoint far*, IBDropDest far* far*);
  220.     HRESULT  _IFUNC AllowInPlace();
  221.     HRESULT  _IFUNC BringToFront();
  222.  
  223.   protected:
  224.     uint32 ForwardEvent(int eventId, const void far* param);
  225.     uint32 ForwardEvent(int eventId, uint32 param = 0);
  226.  
  227.   protected:
  228.    ~TOcView();
  229.     void Shutdown();// called from derived class destructor to release helpers
  230.  
  231.     // TUnknown overrides
  232.     //
  233.     HRESULT      QueryObject(const IID far& iid, void far* far* iface);
  234.  
  235.     // BOle side support
  236.     //
  237.     IUnknown*       BDocument;   // Document helper object
  238.     IBDocument*     BDocumentI;  // Document interface on the document
  239.     IUnknown*       BContainer;  // Container helper object
  240.     IBRootLinkable* BLDocumentI; // RootLinkable interface on the container
  241.  
  242.     // OC wiring
  243.     //
  244.     TOcApp&         OcApp;        // Our OC application object
  245.     TOcDocument&    OcDocument;   // Our OC document object
  246.  
  247.     // App side support
  248.     //
  249.     HWND            Win;          // Actual app container window
  250.     TOcPart*        ActivePart;   // Currently active part, if any
  251.  
  252.     uint32          Options;
  253.  
  254. #if defined(BI_DATA_NEAR)
  255.     TPoint&          Origin;       // Origin of view topleft relative to the document
  256.     TSize&           Extent;       // Extent of view's perception of document?
  257.     string&          WinTitle;     // Merged window title string
  258.     TOcFormatList&   FormatList;   // list of clipboard formats supported
  259.     TString&         OrgTitle;     // Original window title string
  260. #else
  261.     TPoint           Origin;
  262.     TSize            Extent;
  263.     string           WinTitle;
  264.     TOcFormatList    FormatList;
  265.     TString          OrgTitle;     // Original window title string
  266. #endif
  267.     int              LinkFormat;   // adjustment for format count
  268.     TRegList*        RegList;
  269.     TOcDataProvider* OcData;       // Dataprovider representing this view
  270.  
  271.   friend class _ICLASS TOcPart;
  272.   friend class _ICLASS TOcDataProvider;
  273.   friend class _ICLASS TOcLinkView;
  274. };
  275.  
  276. //----------------------------------------------------------------------------
  277.  
  278. //
  279. // Subdispatch IDs for TOcApp clients
  280. //
  281. #define OC_VIEWTITLE          0x0200  // Get view window title
  282. #define OC_VIEWSETTITLE       0x0201  // Set view window title
  283. #define OC_VIEWBORDERSPACEREQ 0x0202  // Request/Set border space in view
  284. #define OC_VIEWBORDERSPACESET 0x0203  // Request/Set border space in view
  285. #define OC_VIEWDROP           0x0204  // Accept a drop
  286. #define OC_VIEWDRAG           0x0205  // Provide drag feedback (c&s)
  287. #define OC_VIEWSCROLL         0x0206  // scroll view
  288. #define OC_VIEWPARTINVALID    0x0207  // a part needs repainting
  289.  
  290. #define OC_VIEWPAINT          0x0300  // paint remote view. Like WM_PAINT + extra
  291. #define OC_VIEWLOADPART       0x0301  // ask server to load document
  292. #define OC_VIEWSAVEPART       0x0302  // ask server to save document
  293. #define OC_VIEWCLOSE          0x0303  // Tell server to close this remote view
  294. #define OC_VIEWINSMENUS       0x0304  // ask server to insert its menus in mbar
  295. #define OC_VIEWSHOWTOOLS      0x0305  // ask server to show its tools
  296. #define OC_VIEWGETPALETTE     0x0306  //
  297. #define OC_VIEWCLIPDATA       0x0307  // ask server for a clip data in a format
  298. #define OC_VIEWSETDATA        0x0308  // set format data into server
  299. #define OC_VIEWPARTSIZE       0x0309  // ask server for a its extent
  300. #define OC_VIEWOPENDOC        0x030A  // ask server for a its extent
  301. #define OC_VIEWATTACHWINDOW   0x030B  // ask server to attach to its owner window
  302. #define OC_VIEWSETSCALE       0x030C  // ask server to handle scaling
  303. #define OC_VIEWGETSCALE       0x030D  // ask container to give scaling info
  304. #define OC_VIEWGETSITERECT    0x030E  // ask container for the site rect
  305. #define OC_VIEWSETSITERECT    0x030F  // ask container to set the site rect
  306. #define OC_VIEWGETITEMNAME    0x0310  // ask server to name its content or selection
  307. #define OC_VIEWSETLINK        0x0311  // ask server to establish link to item
  308. #define OC_VIEWBREAKLINK      0x0312  // ask server to break link to item
  309. #define OC_VIEWPARTACTIVATE   0x0313  // let container know the part is activated
  310. #define OC_VIEWPASTEOBJECT    0x0314  // let container know a part is pasted
  311. #define OC_VIEWDOVERB         0x0315  // ask server to do a verb
  312.  
  313. #define OC_USEREVENT          0xF000  // User defined events
  314.  
  315.  
  316. struct TOcDragDrop {   // for viewdrop & viewdrag
  317.   TOcInitInfo far*  InitInfo;  // ViewDrop event only, else 0
  318.   TPoint*           Where;
  319.   TRect*            Pos;
  320. };
  321.  
  322. struct TOcViewPaint {   // for part adornment painting over part, & painting views
  323.   HDC        DC;
  324.   TRect*     Pos;
  325.   TRect*     Clip;
  326.   TOcAspect  Aspect;
  327.   bool       PaintSelection;  // paint the selection only
  328.   TString*   Moniker;         // moniker if any
  329.   void*      UserData;        // User data
  330.  
  331. };
  332.  
  333. //
  334. // Use when doing parts save and load
  335. //
  336. class TOcSaveLoad {
  337. public:
  338.   TOcSaveLoad()
  339.     : StorageI(0), SameAsLoad(false), Remember(true), SaveSelection(false),
  340.       UserData(0) {}
  341.   TOcSaveLoad(IStorage* storageI, bool sameAsLoad = true, bool remember = false,
  342.               bool saveSelection = false, void* userData = 0) {
  343.       StorageI      = storageI;
  344.       SameAsLoad    = sameAsLoad;
  345.       Remember      = remember;
  346.       SaveSelection = saveSelection;
  347.       UserData      = userData;
  348.     }
  349.  
  350. public:
  351.   IStorage far* StorageI;
  352.   bool          SameAsLoad;      // Same IStorage as one used for loading
  353.   bool          Remember;        // whether to keep the IStorage ptr after save/load
  354.   bool          SaveSelection;   // whether to save only the selection
  355.   void*         UserData;        // User data
  356. };
  357.  
  358. struct TOcToolBarInfo {
  359.   bool  Show;        // whether this is a show or a hide
  360.   HWND  HFrame;      // Container frame for show, Server frame for hide
  361.   HWND  HLeftTB;
  362.   HWND  HTopTB;
  363.   HWND  HRightTB;
  364.   HWND  HBottomTB;
  365. };
  366.  
  367. //
  368. // Used to obtain the size of the rectangle that encloses the selection
  369. //
  370. class TOcPartSize {
  371. public:
  372.   TOcPartSize() : PartRect(0, 0, 0, 0), Selection(false), Moniker(0), UserData(0) {};
  373.   TOcPartSize(TRect rect, bool selection = false, TString* moniker = 0, void* userData = 0) {
  374.     PartRect  = rect;
  375.     Selection = selection;
  376.     Moniker   = moniker;
  377.     UserData  = userData;
  378.   }
  379.   TOcPartSize(bool selection, TString* moniker = 0, void* userData = 0)
  380.     : PartRect(0, 0, 0, 0) {
  381.     Selection = selection;
  382.     Moniker   = moniker;
  383.     UserData  = userData;
  384.   }
  385.  
  386. public:
  387.   TRect    PartRect;     // rect enclosing the whole/part of the embedded object
  388.   bool     Selection;    // whether we want rect for the whole or part(selection)
  389.   TString* Moniker;      // we want the selection rect for moniker
  390.   void*    UserData;     // User data
  391. };
  392.  
  393. //
  394. // Used to obtain the item name for building monikers
  395. //
  396. class TOcItemName {
  397. public:
  398.   TOcItemName() : Selection(false) {};
  399.   TOcItemName(bool selection) {
  400.     Selection = selection;
  401.   }
  402.  
  403. public:
  404.   TString Name;        // item moniker
  405.   bool    Selection;   // whether we want name for the whole or part(selection)
  406. };
  407.  
  408. //
  409. // Used to obtain the native clipboard format data
  410. //
  411. class TOcFormatData {
  412. public:
  413.   TOcFormatData(TOcFormat& format, void* userData = 0, HANDLE handle = 0,
  414.                 bool paste = false, TPoint far* where = 0)
  415.     : Format(format), UserData(userData), Handle(handle),
  416.       Paste(paste), Where(where) {}
  417.  
  418. public:
  419.   TOcFormat&  Format;        // Clipboard format
  420.   void*       UserData;      // User data for mapping to a selection
  421.   HANDLE      Handle;        // clipboard data in handle
  422.   bool        Paste;         // are we doing a paste?
  423.   TPoint far* Where;         // Where to drop this data
  424. };
  425.  
  426. //
  427. // Used to obtain the item name for building monikers
  428. //
  429. class TOcItemLink {
  430. public:
  431.   TOcItemLink(const char far* moniker, TOcLinkView* view){
  432.     Moniker    = moniker;
  433.     OcLinkView = view;
  434.   };
  435.  
  436. public:
  437.  
  438.   const char far*  Moniker;      // item moniker
  439.   TOcLinkView*     OcLinkView;   // view associated with the link
  440. };
  441.  
  442. //----------------------------------------------------------------------------
  443.  
  444. //
  445. // class TOcScaleFactor
  446. // ----- --------------
  447. //
  448. class TOcScaleFactor {
  449.   public:
  450.     TOcScaleFactor();
  451.     TOcScaleFactor(const TRect& siteRect, const TSize& partSize);
  452.     TOcScaleFactor(const TOcScaleInfo far& scaleInfo);
  453.  
  454.     TOcScaleFactor& operator =(const TOcScaleInfo far& scaleInfo);
  455.     TOcScaleFactor& operator =(const TOcScaleFactor& scaleFactor);
  456.     void GetScaleFactor(TOcScaleInfo far& scaleInfo) const;
  457.  
  458.     bool IsZoomed();
  459.     void SetScale(uint16 percent);
  460.     uint16 GetScale();
  461.     void Reset();
  462.  
  463.   public:
  464.     TSize        SiteSize;
  465.     TSize        PartSize;
  466. };
  467.  
  468.  
  469. inline bool TOcView::IsOptionSet(uint32 option) const
  470.                {return ToBool(Options & option);}
  471. inline void TOcView::SetOption(uint32 bit, bool state)
  472.                {if (state) Options |= bit; else Options &= ~bit;}
  473.  
  474. #endif  // OCF_OCVIEW_H
  475.  
  476.