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 / FWSView.h < prev    next >
Encoding:
Text File  |  1996-08-16  |  9.3 KB  |  302 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWSView.h
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWSVIEW_H
  11. #define FWSVIEW_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. // ----- OS Layer -----
  30.  
  31. #ifndef FWPOINT_H
  32. #include "FWPoint.h"
  33. #endif
  34.  
  35. #ifndef FWRECT_H
  36. #include "FWRect.h"
  37. #endif
  38.  
  39. #ifndef FWGC_H
  40. #include "FWGc.h"
  41. #endif
  42.  
  43. // ----- ODUtil -----
  44.  
  45. #ifndef FWORDCOL_H
  46. #include "FWOrdCol.h"
  47. #endif
  48.  
  49. // ----- Framework Layer -----
  50.  
  51. #ifndef FWVIEW_H
  52. #include "FWView.h"
  53. #endif
  54.  
  55. //========================================================================================
  56. // Forward declarations
  57. //========================================================================================
  58.  
  59. class FW_CFrame;
  60. class FW_CViewIterator;
  61. class FW_CPrivOrderedCollection;
  62. class FW_CScroller;
  63. class FW_CScrollBar;
  64.  
  65. struct Environment;
  66.  
  67.  
  68.  
  69. //========================================================================================
  70. // CLASS FW_CSuperView
  71. //========================================================================================
  72.  
  73. class FW_CSuperView : public FW_CView
  74. {
  75.     friend FW_CViewIterator;
  76.  
  77. public:
  78.     FW_DECLARE_CLASS
  79.  
  80. //----------------------------------------------------------------------------------------
  81. //    Initialization/destruction
  82. //
  83. public:
  84.     FW_CSuperView(Environment* ev, 
  85.                 FW_CSuperView* container,
  86.                 const FW_CRect& bounds, 
  87.                 ODID viewId,
  88.                 const FW_CPoint& extent = FW_kZeroPoint, 
  89.                  FW_EScrollingDirection scrollDir = FW_kNoScrolling);
  90.  
  91.     virtual ~FW_CSuperView();
  92.     
  93. protected:
  94.     FW_CSuperView(Environment* ev);    // used only by FW_CFrame
  95.  
  96. //----------------------------------------------------------------------------------------
  97. //    Inherited API
  98. //
  99. public:
  100.     virtual FW_Boolean        HandleMouseDown(Environment* ev, 
  101.                                     const FW_CMouseEvent& theMouseEvent);    
  102.     virtual void             HandleActivateEvent(Environment* ev, const FW_CActivateEvent& theActivateEvent);
  103.  
  104.     virtual FW_CView*        FindViewById(Environment* ev, ODID id);
  105.     virtual FW_Boolean        HasSubViews(Environment* ev) const;
  106.     
  107.     // ----- Geometry -----
  108.     virtual void             SetSize(Environment* ev, const FW_CPoint& size, FW_Boolean refresh);
  109.     virtual void             SetLocation(Environment* ev, const FW_CPoint& location, 
  110.                                                                 FW_Boolean refresh = TRUE); 
  111.     virtual void            SizeChanged(Environment* ev, const FW_CPoint& oldSize);
  112.     virtual FW_CPoint         GetExtent(Environment* ev) const;
  113.     virtual FW_CRect         GetBoundsInContent(Environment *ev) const;
  114.     
  115.     // ----- Visible -----
  116.     virtual void            SetVisible(Environment* ev, FW_Boolean visible, 
  117.                                         FW_Boolean propagate = TRUE);
  118.  
  119.     // ----- Hit Testing -----
  120.     virtual FW_CView*        GetViewContaining(Environment* ev, ODFacet* odFacet, 
  121.                                                     const FW_CPoint& theMousePoint);
  122.  
  123.     // ----- Archiving -----
  124.     virtual void            Flatten(Environment* ev, FW_CWritableStream& stream) const;
  125.     virtual void            InitializeFromStream(Environment* ev, FW_CReadableStream& stream);
  126.     
  127. //----------------------------------------------------------------------------------------
  128. //    New API
  129. //
  130. public:
  131.     // ----- Content View -----    
  132.     void                     MakeContentView(Environment* ev);
  133.     FW_Boolean                IsContentView(Environment* ev) const;
  134.     FW_Boolean                IsInContentView(Environment* ev) const;
  135.     
  136.     // ----- Extent -----
  137.     virtual void             SetExtent(Environment* ev, const FW_CPoint& extent);
  138.     
  139.     // ----- Coordinates Conversion -----
  140.     virtual ODTransform*     AcquireViewContentToFrameTransform(Environment* ev) const;
  141.  
  142.     // ----- Methods on sub views -----
  143.     virtual void            CreateSubViews(Environment* ev);
  144.     void                    CreateSubViewsFromStream(Environment* ev, FW_CReadableStream& stream);
  145.     void                    CreateSubViewsFromResource(Environment* ev, FW_ResourceId id);
  146.  
  147.     void                    AddSubView(Environment* ev, FW_CView* subview);
  148.     virtual void            SubViewAdded(Environment* ev, FW_CView* subview);
  149.     
  150.     void                    RemoveSubView(Environment* ev, FW_CView* subview);
  151.     virtual void            SubViewRemoved(Environment* ev, FW_CView* subview);
  152.     
  153.     void                    DeleteSubViews(Environment* ev);
  154.     
  155.     unsigned long            CountSubViews(Environment* ev) const;
  156.     
  157.     // ----- Drawing -----
  158.     virtual FW_Boolean        HandleDraw(Environment *ev, ODFacet* odFacet, ODShape* invalidShape);
  159.     virtual void            Draw(Environment *ev, ODFacet* facet, ODShape* invalidShape);
  160.  
  161.     // ----- Scrolling -----
  162.     FW_Boolean                IsScrolling(Environment *ev) const;
  163.     FW_Boolean                IsScrollingInX(Environment *ev) const;
  164.     FW_Boolean                IsScrollingInY(Environment *ev) const;    
  165.     void                    SetScrollingInX(Environment *ev, FW_Boolean state);
  166.     void                    SetScrollingInY(Environment *ev, FW_Boolean state);
  167.     
  168.     // ----- Cursor Adjustment -----
  169.     virtual FW_Boolean        AdjustCursor(Environment *ev, ODFacet* odFacet, const FW_CPoint& theMousePoint);
  170.  
  171. //----------------------------------------------------------------------------------------
  172. //    Internal API
  173. //
  174. public:
  175.     virtual void             PrivInvalidateCachedTransforms(Environment* ev);
  176.  
  177.     ODTransform*            PrivAcquireViewInternalTransform(Environment* ev) const;
  178.     virtual void            PrivInvalidateViewIternalTransform(Environment* ev);
  179.     
  180.     virtual void            PrivAcquireContentScrollShape(Environment* ev,
  181.                                                             FW_Boolean horizontalScroll, 
  182.                                                             FW_Boolean verticalScroll,
  183.                                                             ODShape* scrollShape) const;
  184.     
  185. protected:
  186.     // Private methods for FW_CFrame
  187.     void                    PrivSetExtent(Environment *ev, const FW_CPoint& extent);
  188.     void                    PrivSetIsContentView(Environment *ev, FW_Boolean state);
  189.     virtual void            PrivCreateSubViewsFromStream(Environment* ev, FW_CReadableStream& stream);
  190.  
  191. private:
  192.     void                    PrivReadSubviewsFromStream(Environment* ev, FW_CReadableStream& stream);
  193.     void                    PrivPostCreateViewFromStream(Environment *ev);
  194.     void                     PrivSetContentExtent(Environment* ev, const FW_CPoint& extent);
  195.  
  196. //----------------------------------------------------------------------------------------
  197. //    Data Members
  198. //
  199. private:
  200.     FW_CViewCollection*        fSubViews;        // list of subviews
  201.     FW_CPoint                fExtent;        // size of view's content
  202.     FW_Boolean                fIsContentView;     
  203.     FW_EScrollingDirection    fScrollingDirection;
  204.  
  205.     ODTransform*            fViewContentToFrameTransform;
  206.     ODTransform*            fInternalTransform;
  207. };
  208.  
  209.  
  210. //========================================================================================
  211. // class FW_CSuperViewCollection
  212. //========================================================================================
  213.  
  214. class FW_CSuperViewCollection : public FW_TOrderedCollection<FW_CSuperView>
  215. {
  216. public:
  217.     FW_DECLARE_AUTO(FW_CSuperViewCollection)
  218.     
  219.     FW_CSuperViewCollection() :
  220.         FW_TOrderedCollection<FW_CSuperView>(){}
  221.     ~FW_CSuperViewCollection() {}
  222. };
  223.  
  224.  
  225.  
  226. //========================================================================================
  227. // class FW_CSuperViewCollectionIterator
  228. //========================================================================================
  229.  
  230. class FW_CSuperViewCollectionIterator : public FW_TOrderedCollectionIterator<FW_CSuperView>
  231. {
  232. public:
  233.     FW_DECLARE_AUTO(FW_CSuperViewCollectionIterator)
  234.     
  235.     FW_CSuperViewCollectionIterator(FW_CSuperViewCollection* collection) :
  236.         FW_TOrderedCollectionIterator<FW_CSuperView>(collection){}
  237.     ~FW_CSuperViewCollectionIterator() {}
  238. };
  239.  
  240.  
  241. //========================================================================================
  242. // Inlines
  243. //========================================================================================
  244.  
  245. //----------------------------------------------------------------------------------------
  246. // FW_CSuperView inline Getters/Setters
  247. //----------------------------------------------------------------------------------------
  248.  
  249. inline FW_Boolean FW_CSuperView::IsContentView(Environment*) const 
  250. {
  251.     return fIsContentView;
  252. }
  253.  
  254. inline    FW_Boolean    FW_CSuperView::IsScrollingInX(Environment*) const
  255. {
  256.     return (fScrollingDirection & FW_kXScrolling) != 0;
  257. }
  258.  
  259. inline    FW_Boolean    FW_CSuperView::IsScrollingInY(Environment*) const
  260. {
  261.     return (fScrollingDirection & FW_kYScrolling) != 0;
  262. }
  263.  
  264. inline void FW_CSuperView::PrivSetExtent(Environment*, const FW_CPoint& extent)  
  265. {
  266.     fExtent = extent;
  267. }
  268.  
  269. inline void FW_CSuperView::PrivSetIsContentView(Environment*, FW_Boolean state)  
  270. {
  271.     fIsContentView = state;
  272. }
  273.  
  274. inline void FW_CSuperView::SetScrollingInX(Environment*, FW_Boolean state)
  275. {
  276.     // need explicit cast to the enum
  277.     state ? (fScrollingDirection = FW_EScrollingDirection(fScrollingDirection | FW_kXScrolling)) : 
  278.             (fScrollingDirection = FW_EScrollingDirection(fScrollingDirection & ~FW_kXScrolling));
  279. }
  280.  
  281. inline void FW_CSuperView::SetScrollingInY(Environment*, FW_Boolean state)
  282. {
  283.     // need explicit cast to the enum
  284.     state ? (fScrollingDirection = FW_EScrollingDirection(fScrollingDirection | FW_kYScrolling)) : 
  285.             (fScrollingDirection = FW_EScrollingDirection(fScrollingDirection & ~FW_kYScrolling));
  286. }
  287.  
  288.  
  289. //========================================================================================
  290. // CLASS FW_CViewIterator
  291. //========================================================================================
  292.  
  293. class FW_CViewIterator : public FW_CViewCollectionIterator
  294. {
  295. public:    
  296.     FW_CViewIterator(const FW_CSuperView *container) :
  297.         FW_CViewCollectionIterator(container->fSubViews) {}
  298.     ~FW_CViewIterator() {}
  299. };
  300.  
  301. #endif
  302.