home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-08-16 | 9.3 KB | 302 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWSView.h
- // Release Version: $ ODF 1 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #ifndef FWSVIEW_H
- #define FWSVIEW_H
-
- // ----- OpenDoc -----
-
- #ifndef FWODTYPS_H
- #include "FWODTyps.h"
- #endif
-
- // ----- Foundation Layer -----
-
- #ifndef FWEXCLIB_H
- #include "FWExcLib.h"
- #endif
-
- #ifndef FWCLAINF_H
- #include "FWClaInf.h"
- #endif
-
- // ----- OS Layer -----
-
- #ifndef FWPOINT_H
- #include "FWPoint.h"
- #endif
-
- #ifndef FWRECT_H
- #include "FWRect.h"
- #endif
-
- #ifndef FWGC_H
- #include "FWGc.h"
- #endif
-
- // ----- ODUtil -----
-
- #ifndef FWORDCOL_H
- #include "FWOrdCol.h"
- #endif
-
- // ----- Framework Layer -----
-
- #ifndef FWVIEW_H
- #include "FWView.h"
- #endif
-
- //========================================================================================
- // Forward declarations
- //========================================================================================
-
- class FW_CFrame;
- class FW_CViewIterator;
- class FW_CPrivOrderedCollection;
- class FW_CScroller;
- class FW_CScrollBar;
-
- struct Environment;
-
-
-
- //========================================================================================
- // CLASS FW_CSuperView
- //========================================================================================
-
- class FW_CSuperView : public FW_CView
- {
- friend FW_CViewIterator;
-
- public:
- FW_DECLARE_CLASS
-
- //----------------------------------------------------------------------------------------
- // Initialization/destruction
- //
- public:
- FW_CSuperView(Environment* ev,
- FW_CSuperView* container,
- const FW_CRect& bounds,
- ODID viewId,
- const FW_CPoint& extent = FW_kZeroPoint,
- FW_EScrollingDirection scrollDir = FW_kNoScrolling);
-
- virtual ~FW_CSuperView();
-
- protected:
- FW_CSuperView(Environment* ev); // used only by FW_CFrame
-
- //----------------------------------------------------------------------------------------
- // Inherited API
- //
- public:
- virtual FW_Boolean HandleMouseDown(Environment* ev,
- const FW_CMouseEvent& theMouseEvent);
- virtual void HandleActivateEvent(Environment* ev, const FW_CActivateEvent& theActivateEvent);
-
- virtual FW_CView* FindViewById(Environment* ev, ODID id);
- virtual FW_Boolean HasSubViews(Environment* ev) const;
-
- // ----- Geometry -----
- virtual void SetSize(Environment* ev, const FW_CPoint& size, FW_Boolean refresh);
- virtual void SetLocation(Environment* ev, const FW_CPoint& location,
- FW_Boolean refresh = TRUE);
- virtual void SizeChanged(Environment* ev, const FW_CPoint& oldSize);
- virtual FW_CPoint GetExtent(Environment* ev) const;
- virtual FW_CRect GetBoundsInContent(Environment *ev) const;
-
- // ----- Visible -----
- virtual void SetVisible(Environment* ev, FW_Boolean visible,
- FW_Boolean propagate = TRUE);
-
- // ----- Hit Testing -----
- virtual FW_CView* GetViewContaining(Environment* ev, ODFacet* odFacet,
- const FW_CPoint& theMousePoint);
-
- // ----- Archiving -----
- virtual void Flatten(Environment* ev, FW_CWritableStream& stream) const;
- virtual void InitializeFromStream(Environment* ev, FW_CReadableStream& stream);
-
- //----------------------------------------------------------------------------------------
- // New API
- //
- public:
- // ----- Content View -----
- void MakeContentView(Environment* ev);
- FW_Boolean IsContentView(Environment* ev) const;
- FW_Boolean IsInContentView(Environment* ev) const;
-
- // ----- Extent -----
- virtual void SetExtent(Environment* ev, const FW_CPoint& extent);
-
- // ----- Coordinates Conversion -----
- virtual ODTransform* AcquireViewContentToFrameTransform(Environment* ev) const;
-
- // ----- Methods on sub views -----
- virtual void CreateSubViews(Environment* ev);
- void CreateSubViewsFromStream(Environment* ev, FW_CReadableStream& stream);
- void CreateSubViewsFromResource(Environment* ev, FW_ResourceId id);
-
- void AddSubView(Environment* ev, FW_CView* subview);
- virtual void SubViewAdded(Environment* ev, FW_CView* subview);
-
- void RemoveSubView(Environment* ev, FW_CView* subview);
- virtual void SubViewRemoved(Environment* ev, FW_CView* subview);
-
- void DeleteSubViews(Environment* ev);
-
- unsigned long CountSubViews(Environment* ev) const;
-
- // ----- Drawing -----
- virtual FW_Boolean HandleDraw(Environment *ev, ODFacet* odFacet, ODShape* invalidShape);
- virtual void Draw(Environment *ev, ODFacet* facet, ODShape* invalidShape);
-
- // ----- Scrolling -----
- FW_Boolean IsScrolling(Environment *ev) const;
- FW_Boolean IsScrollingInX(Environment *ev) const;
- FW_Boolean IsScrollingInY(Environment *ev) const;
- void SetScrollingInX(Environment *ev, FW_Boolean state);
- void SetScrollingInY(Environment *ev, FW_Boolean state);
-
- // ----- Cursor Adjustment -----
- virtual FW_Boolean AdjustCursor(Environment *ev, ODFacet* odFacet, const FW_CPoint& theMousePoint);
-
- //----------------------------------------------------------------------------------------
- // Internal API
- //
- public:
- virtual void PrivInvalidateCachedTransforms(Environment* ev);
-
- ODTransform* PrivAcquireViewInternalTransform(Environment* ev) const;
- virtual void PrivInvalidateViewIternalTransform(Environment* ev);
-
- virtual void PrivAcquireContentScrollShape(Environment* ev,
- FW_Boolean horizontalScroll,
- FW_Boolean verticalScroll,
- ODShape* scrollShape) const;
-
- protected:
- // Private methods for FW_CFrame
- void PrivSetExtent(Environment *ev, const FW_CPoint& extent);
- void PrivSetIsContentView(Environment *ev, FW_Boolean state);
- virtual void PrivCreateSubViewsFromStream(Environment* ev, FW_CReadableStream& stream);
-
- private:
- void PrivReadSubviewsFromStream(Environment* ev, FW_CReadableStream& stream);
- void PrivPostCreateViewFromStream(Environment *ev);
- void PrivSetContentExtent(Environment* ev, const FW_CPoint& extent);
-
- //----------------------------------------------------------------------------------------
- // Data Members
- //
- private:
- FW_CViewCollection* fSubViews; // list of subviews
- FW_CPoint fExtent; // size of view's content
- FW_Boolean fIsContentView;
- FW_EScrollingDirection fScrollingDirection;
-
- ODTransform* fViewContentToFrameTransform;
- ODTransform* fInternalTransform;
- };
-
-
- //========================================================================================
- // class FW_CSuperViewCollection
- //========================================================================================
-
- class FW_CSuperViewCollection : public FW_TOrderedCollection<FW_CSuperView>
- {
- public:
- FW_DECLARE_AUTO(FW_CSuperViewCollection)
-
- FW_CSuperViewCollection() :
- FW_TOrderedCollection<FW_CSuperView>(){}
- ~FW_CSuperViewCollection() {}
- };
-
-
-
- //========================================================================================
- // class FW_CSuperViewCollectionIterator
- //========================================================================================
-
- class FW_CSuperViewCollectionIterator : public FW_TOrderedCollectionIterator<FW_CSuperView>
- {
- public:
- FW_DECLARE_AUTO(FW_CSuperViewCollectionIterator)
-
- FW_CSuperViewCollectionIterator(FW_CSuperViewCollection* collection) :
- FW_TOrderedCollectionIterator<FW_CSuperView>(collection){}
- ~FW_CSuperViewCollectionIterator() {}
- };
-
-
- //========================================================================================
- // Inlines
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CSuperView inline Getters/Setters
- //----------------------------------------------------------------------------------------
-
- inline FW_Boolean FW_CSuperView::IsContentView(Environment*) const
- {
- return fIsContentView;
- }
-
- inline FW_Boolean FW_CSuperView::IsScrollingInX(Environment*) const
- {
- return (fScrollingDirection & FW_kXScrolling) != 0;
- }
-
- inline FW_Boolean FW_CSuperView::IsScrollingInY(Environment*) const
- {
- return (fScrollingDirection & FW_kYScrolling) != 0;
- }
-
- inline void FW_CSuperView::PrivSetExtent(Environment*, const FW_CPoint& extent)
- {
- fExtent = extent;
- }
-
- inline void FW_CSuperView::PrivSetIsContentView(Environment*, FW_Boolean state)
- {
- fIsContentView = state;
- }
-
- inline void FW_CSuperView::SetScrollingInX(Environment*, FW_Boolean state)
- {
- // need explicit cast to the enum
- state ? (fScrollingDirection = FW_EScrollingDirection(fScrollingDirection | FW_kXScrolling)) :
- (fScrollingDirection = FW_EScrollingDirection(fScrollingDirection & ~FW_kXScrolling));
- }
-
- inline void FW_CSuperView::SetScrollingInY(Environment*, FW_Boolean state)
- {
- // need explicit cast to the enum
- state ? (fScrollingDirection = FW_EScrollingDirection(fScrollingDirection | FW_kYScrolling)) :
- (fScrollingDirection = FW_EScrollingDirection(fScrollingDirection & ~FW_kYScrolling));
- }
-
-
- //========================================================================================
- // CLASS FW_CViewIterator
- //========================================================================================
-
- class FW_CViewIterator : public FW_CViewCollectionIterator
- {
- public:
- FW_CViewIterator(const FW_CSuperView *container) :
- FW_CViewCollectionIterator(container->fSubViews) {}
- ~FW_CViewIterator() {}
- };
-
- #endif
-