home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWViews / Include / FWView.h < prev    next >
Encoding:
Text File  |  1996-08-16  |  11.7 KB  |  369 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWView.h
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWVIEW_H
  11. #define FWVIEW_H
  12.  
  13. // ----- OpenDoc -----
  14.  
  15. #ifndef FWODTYPS_H
  16. #include "FWODTyps.h"
  17. #endif
  18.  
  19. // ----- Foundation Layer -----
  20.  
  21. #ifndef FWEXCLIB_H
  22. #include "FWExcLib.h"
  23. #endif
  24.  
  25. #ifndef FWCLAINF_H
  26. #include "FWClaInf.h"
  27. #endif
  28.  
  29. #ifndef FWARDYNA_H
  30. #include "FWArDyna.h"
  31. #endif
  32.  
  33. // ----- OS Layer -----
  34.  
  35. #ifndef FWPOINT_H
  36. #include "FWPoint.h"
  37. #endif
  38.  
  39. #ifndef FWRECT_H
  40. #include "FWRect.h"
  41. #endif
  42.  
  43. #ifndef FWGC_H
  44. #include "FWGc.h"
  45. #endif
  46.  
  47. // ----- ODUtil -----
  48.  
  49. #ifndef FWORDCOL_H
  50. #include "FWOrdCol.h"
  51. #endif
  52.  
  53. // ----- Framework Layer -----
  54.  
  55. #ifndef FWEVENTH_H
  56. #include "FWEventH.h"
  57. #endif
  58.  
  59. #ifndef FWVIEWS_K
  60. #include "FWViews.k"
  61. #endif
  62.  
  63. //========================================================================================
  64. // Forward declarations
  65. //========================================================================================
  66.  
  67. class FW_CFrame;
  68. class FW_CSuperView;
  69. class FW_CPrivOrderedCollection;
  70. class FW_CScroller;
  71. class FW_CScrollBar;
  72. class FW_CPrintHandler;
  73. struct Environment;
  74.  
  75. //========================================================================================
  76. //     View Types & Constants
  77. //========================================================================================
  78.  
  79. // Binding for simply layout management
  80. typedef long    FW_ViewBinding;
  81.  
  82. // Note: View Binding constants are defined in FWViews.k
  83.  
  84. // Default view id
  85. const ODID kNoIdentifier = 0xFFFFFFFFL;
  86.  
  87. //========================================================================================
  88. // CLASS FW_CView
  89. //========================================================================================
  90.  
  91. class FW_CView : public FW_MEventHandler
  92. {
  93. friend FW_CSuperView;
  94.  
  95. public:
  96.     FW_DECLARE_CLASS
  97.  
  98. //----------------------------------------------------------------------------------------
  99. //    Initialization/destruction
  100. //
  101. public:
  102.     virtual ~FW_CView();
  103.     
  104. protected:
  105.     // one-step initialization constructor
  106.     FW_CView(Environment* ev, 
  107.                 FW_CSuperView* container, 
  108.                 const FW_CRect& bounds, 
  109.                  ODID viewId);
  110.  
  111.     // two-step initialization constructor
  112.     FW_CView(Environment* ev);
  113.  
  114. //----------------------------------------------------------------------------------------
  115. //    Inherited API
  116. //
  117. public:
  118.     virtual FW_Boolean            HandleMouseUp(Environment* ev, 
  119.                                     const FW_CMouseEvent& theMouseEvent);
  120.     virtual FW_Boolean            HandleMouseDown(Environment* ev, 
  121.                                     const FW_CMouseEvent& theMouseEvent);    
  122.     virtual FW_Boolean            HandleBGMouseDown(Environment* ev, 
  123.                                     const FW_CMouseEvent& theMouseEvent);
  124.     
  125.     virtual FW_Boolean            DoBGMouseDown(Environment *ev, const FW_CMouseEvent& theMouseEvent);
  126.  
  127. //----------------------------------------------------------------------------------------
  128. //    New API
  129. //
  130. public:
  131.     // ----- Getters/Setters -----
  132.     ODID                        GetViewId(Environment* ev) const;
  133.     virtual void                SetViewId(Environment* ev, ODID id);
  134.     
  135.     FW_CSuperView*                GetSuperView(Environment* ev) const;
  136.     
  137.     // Bounds are in parent view coordinates (in content space)
  138.     FW_CRect                     GetBounds(Environment* ev) const;
  139.     
  140.     // in view content coordinates
  141.     virtual FW_CRect             GetBoundsInContent(Environment *ev) const;
  142.     
  143.     // Visible bounds are in frame coordinates
  144.     FW_CRect                    GetVisibleBounds(Environment* ev) const; 
  145.     
  146.     virtual FW_CPoint            GetExtent(Environment* ev) const;    // just return the bounds
  147.     
  148.     FW_Boolean                    IsVisible(Environment* ev) const;
  149.     virtual void                SetVisible(Environment* ev, FW_Boolean visible, 
  150.                                         FW_Boolean propagate = TRUE);
  151.     
  152.     FW_ViewBinding                GetBindings(Environment* ev) const;
  153.     void                        SetBindings(Environment* ev, FW_ViewBinding bindings);
  154.     
  155.     // ----- Invalidate/Validate -----
  156.     //    always in view content coordinate
  157.     void                        Invalidate(Environment* ev, const FW_CRect& rect, FW_Boolean allFrames = FALSE);
  158.     void                        Invalidate(Environment* ev, ODShape* shape = NULL, FW_Boolean allFrames = FALSE);
  159.     void                        Validate(Environment* ev, const FW_CRect& rect, FW_Boolean allFrames = FALSE);
  160.     void                        Validate(Environment* ev, ODShape* shape = NULL, FW_Boolean allFrames = FALSE);
  161.  
  162.     // ----- Geometry utilities -----
  163.     FW_CPoint                     GetLocation(Environment* ev) const;
  164.     FW_CPoint                     GetSize(Environment* ev) const;
  165.     
  166.     virtual void                 SetLocation(Environment* ev, const FW_CPoint& loc, FW_Boolean refresh = TRUE); 
  167.     virtual void                 SetSize(Environment* ev, const FW_CPoint& size, FW_Boolean refresh = TRUE); 
  168.     virtual void                LocationChanged(Environment* ev, const FW_CPoint& oldLoc);
  169.     virtual void                SizeChanged(Environment* ev, const FW_CPoint& oldSize);
  170.  
  171.     virtual void                AdjustToNewLayout(Environment *ev,  const FW_CPoint& oldExtent, 
  172.                                                 const FW_CPoint& newExtent, FW_Boolean refresh);
  173.     
  174.     FW_Boolean                    IsMouseWithin(Environment* ev, ODFacet* odFacet, 
  175.                                         const FW_CPoint& theMousePoint) const;
  176.     virtual FW_CView*            GetViewContaining(Environment* ev, ODFacet* odFacet, 
  177.                                         const FW_CPoint& theMousePoint);
  178.     void                        SetResizeForceRedraw(Environment* ev, FW_Boolean refresh);
  179.                                 
  180.     // ----- Coordinates Conversion -----
  181.     ODTransform*                 AcquireViewToFrameTransform(Environment* ev) const;
  182.     virtual ODTransform*         AcquireViewContentToFrameTransform(Environment* ev) const;
  183.  
  184.     void                        FrameToView(Environment *ev, FW_CPoint& point) const;
  185.     void                        FrameToView(Environment *ev, FW_CRect& rect) const;
  186.     void                        FrameToView(Environment *ev, ODShape* shape) const;
  187.     void                        ViewToFrame(Environment *ev, FW_CPoint& point) const;    
  188.     void                        ViewToFrame(Environment *ev, FW_CRect& rect) const;    
  189.     void                        ViewToFrame(Environment *ev, ODShape* shape) const;    
  190.  
  191.     void                        FrameToViewContent(Environment *ev, FW_CPoint& point) const;
  192.     void                        FrameToViewContent(Environment *ev, FW_CRect& rect) const;
  193.     void                        FrameToViewContent(Environment *ev, ODShape* shape) const;
  194.     void                        ViewContentToFrame(Environment *ev, FW_CPoint& point) const;    
  195.     void                        ViewContentToFrame(Environment *ev, FW_CRect& rect) const;    
  196.     void                        ViewContentToFrame(Environment *ev, ODShape* shape) const;    
  197.     
  198.     // ----- Methods on subviews -----
  199.     FW_Boolean                    IsSubViewOf(Environment* ev, const FW_CSuperView* parentView) const;
  200.     virtual FW_Boolean            HasSubViews(Environment* ev) const;
  201.     virtual FW_CView*            FindViewById(Environment* ev, ODID id);
  202.     
  203.     // ----- Methods on Frame -----
  204.     FW_CFrame*                    GetFrame(Environment* ev) const;
  205.     FW_Boolean                     IsFrame(Environment* ev) const;
  206.     
  207.     // ----- Drawing -----
  208.     virtual FW_Boolean            HandleDraw(Environment *ev, ODFacet* odFacet, ODShape* invalidShape);
  209.     virtual void                Draw(Environment *ev, ODFacet* facet, ODShape* invalidShape);
  210.  
  211.     // ----- Events -----
  212.     virtual FW_Boolean             DoMouseEnter(Environment* ev, ODFacet* odFacet, const FW_CPoint& theMousePoint);
  213.     virtual FW_Boolean             DoMouseWithin(Environment* ev, ODFacet* odFacet, const FW_CPoint& theMousePoint);
  214.     virtual FW_Boolean             DoMouseLeave(Environment* ev, ODFacet* odFacet);
  215.     virtual void                 HandleActivateEvent(Environment* ev, const FW_CActivateEvent& theActivateEvent);
  216.     virtual void                 DoActivateEvent(Environment* ev, const FW_CActivateEvent& theActivateEvent);
  217.  
  218.     // ----- Cursor Adjustment -----
  219.     virtual FW_Boolean            AdjustCursor(Environment *ev, ODFacet* odFacet, const FW_CPoint& theMousePoint);
  220.  
  221.     // ----- Archiving -----
  222.     // FW_CView is an abstract base class, so we never see a concrete
  223.     // instance of an FW_CView in a stream.  Nonetheless, it is convenient to
  224.     // define the following methods here, since they can be reused by the
  225.     // concrete view subclasses.
  226.     
  227.     static void                    Read(FW_CReadableStream& stream, FW_ClassTypeConstant type, void* object);
  228.     static void                 Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
  229.  
  230.     virtual void                Flatten(Environment*ev, FW_CWritableStream& stream) const;
  231.     virtual void                InitializeFromStream(Environment*ev, FW_CReadableStream& stream);
  232.     virtual void                PostCreateViewFromStream(Environment *ev);
  233.     
  234. //----------------------------------------------------------------------------------------
  235. //    Internal API
  236. //
  237. public:
  238.     virtual void                 PrivInvalidateCachedTransforms(Environment* ev);
  239.  
  240.     virtual void                PrivInvalidateViewIternalTransform(Environment* ev);
  241.  
  242.     FW_Boolean                    PrivIsTopPrintedView(Environment* ev) const;
  243.     void                        PrivSetTopPrintedView(Environment* ev, FW_Boolean topPrintedView);
  244.  
  245.     virtual void                PrivAcquireContentScrollShape(Environment* ev,
  246.                                                                 FW_Boolean horizontalScroll, 
  247.                                                                 FW_Boolean verticalScroll,
  248.                                                                 ODShape* scrollShape) const;
  249.  
  250. protected:
  251.     void                        PrivSetBounds(Environment *ev, const FW_CRect& bounds);
  252.  
  253. //----------------------------------------------------------------------------------------
  254. //    Data Members
  255. //
  256. private:
  257.     ODID                        fViewId;            // id set by user
  258.     FW_CSuperView*                fSuperView;            // container view (NULL for FW_CFrame)
  259.     FW_CRect                    fBounds;            // position inside SuperView's content
  260.     FW_CPrivOrderedCollection*    fAdorners;            // (not implemented yet)
  261.     FW_Boolean                    fVisible;            // visible state
  262.     FW_Boolean                    fResizeForceRedraw;    // invalidate whole view when resized
  263.     FW_ViewBinding                fBindings;            // for layout management 
  264.     ODTransform*                fViewToFrameTransform;    // internal use
  265.     FW_Boolean                    fTopPrintedView;        // internal use
  266. };
  267.  
  268.  
  269. //========================================================================================
  270. // class FW_CViewCollection
  271. //========================================================================================
  272.  
  273. class FW_CViewCollection : public FW_TOrderedCollection<FW_CView>
  274. {
  275. public:
  276.     FW_DECLARE_AUTO(FW_CViewCollection)
  277.     
  278.     FW_CViewCollection() :
  279.         FW_TOrderedCollection<FW_CView>(){}
  280.     ~FW_CViewCollection() {}
  281. };
  282.  
  283.  
  284.  
  285. //========================================================================================
  286. // class FW_CViewCollectionIterator
  287. //========================================================================================
  288.  
  289. class FW_CViewCollectionIterator : public FW_TOrderedCollectionIterator<FW_CView>
  290. {
  291. public:
  292.     FW_DECLARE_AUTO(FW_CViewCollectionIterator)
  293.     
  294.     FW_CViewCollectionIterator(FW_CViewCollection* collection) :
  295.         FW_TOrderedCollectionIterator<FW_CView>(collection){}
  296.     ~FW_CViewCollectionIterator() {}
  297. };
  298.  
  299.  
  300. //========================================================================================
  301. // Inlines
  302. //========================================================================================
  303.  
  304. //----------------------------------------------------------------------------------------
  305. // FW_CView inlines
  306. //----------------------------------------------------------------------------------------
  307.  
  308. inline FW_Boolean FW_CView::PrivIsTopPrintedView(Environment*) const
  309. {
  310.     return fTopPrintedView;
  311. }
  312.  
  313. inline void FW_CView::PrivSetTopPrintedView(Environment*, FW_Boolean topPrintedView)
  314. {
  315.     fTopPrintedView = topPrintedView;
  316. }
  317.  
  318. inline ODID FW_CView::GetViewId(Environment*) const
  319. {
  320.     return fViewId;
  321. }
  322.  
  323. inline FW_CSuperView* FW_CView::GetSuperView(Environment*) const 
  324. {
  325.     return fSuperView;
  326. }
  327.  
  328. inline FW_CRect FW_CView::GetBounds(Environment*) const 
  329. {
  330.     return fBounds;
  331. }
  332.  
  333. inline FW_CPoint FW_CView::GetLocation(Environment*) const 
  334. {
  335.     return fBounds.TopLeft();
  336. }
  337.  
  338. inline FW_CPoint FW_CView::GetSize(Environment*) const 
  339. {
  340.     return fBounds.Size();
  341. }
  342.  
  343. inline FW_Boolean FW_CView::IsFrame(Environment*) const 
  344. {
  345.     return (fSuperView == NULL);
  346. }
  347.  
  348. inline void FW_CView::PrivSetBounds(Environment*, const FW_CRect& bounds)  
  349. {
  350.     fBounds = bounds;
  351. }
  352.  
  353. inline FW_ViewBinding FW_CView::GetBindings(Environment*) const
  354. {
  355.     return fBindings;
  356. }
  357.  
  358. inline void FW_CView::SetBindings(Environment*, FW_ViewBinding bindings)
  359. {
  360.     fBindings = bindings;
  361. }
  362.  
  363. inline void FW_CView::SetResizeForceRedraw(Environment*, FW_Boolean refresh)
  364. {
  365.     fResizeForceRedraw = refresh;
  366. }
  367.  
  368. #endif
  369.