home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-17 | 23.5 KB | 714 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWIters.cpp
- // Release Version: $ ODF 2 $
- //
- // Copyright: (c) 1995 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "FWFrameW.hpp"
-
- #ifndef FWITERS_H
- #include "FWIters.h"
- #endif
-
- #ifndef FWFRAME_H
- #include "FWFrame.h"
- #endif
-
- #ifndef FWFRMING_H
- #include "FWFrming.h"
- #endif
-
- #ifndef FWPROXY_H
- #include "FWProxy.h"
- #endif
-
- #ifndef FWPXYFRM_H
- #include "FWPxyFrm.h"
- #endif
-
- #ifndef FWPRESEN_H
- #include "FWPresen.h"
- #endif
-
- #ifndef FWSOMENV_H
- #include "FWSOMEnv.h"
- #endif
-
- // ----- OpenDoc includes
-
- #ifndef SOM_ODFacet_xh
- #include <Facet.xh>
- #endif
-
- #ifndef SOM_ODFocusSet_xh
- #include <FocusSet.xh>
- #endif
-
- #ifndef SOM_ODTypeList_xh
- #include <TypeList.xh>
- #endif
-
- //========================================================================================
- // Runtime information
- //========================================================================================
-
- #ifdef FW_BUILD_MAC
- #pragma segment framework
- #endif
-
- FW_DEFINE_AUTO(FW_CPresentationFrameIterator)
- FW_DEFINE_AUTO(FW_CFrameFacetIterator)
- FW_DEFINE_AUTO(FW_CODFrameFacetIterator)
- FW_DEFINE_AUTO(FW_CFacetIterator)
- FW_DEFINE_AUTO(FW_CTypeListIterator)
- FW_DEFINE_AUTO(FW_CPresentationFacetIterator)
- FW_DEFINE_AUTO(FW_CFrameEmbeddedFrameIterator)
- FW_DEFINE_AUTO(FW_CEmbeddedODFacetsIterator)
- FW_DEFINE_AUTO(FW_CFrameProxyFrameIterator)
- FW_DEFINE_AUTO(FW_CFocusSetIterator)
-
-
- //========================================================================================
- // class FW_CPresentationFrameIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::FW_CPresentationFrameIterator
- //----------------------------------------------------------------------------------------
-
- FW_CPresentationFrameIterator::FW_CPresentationFrameIterator(Environment* ev, FW_CPresentation* presentation) :
- fIterator(presentation->fFrames),
- fCurrentFrame(NULL),
- fFrameGroup(0),
- fSequenceNumber(0)
- {
- FW_UNUSED(ev);
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::FW_CPresentationFrameIterator
- //----------------------------------------------------------------------------------------
-
- FW_CPresentationFrameIterator::FW_CPresentationFrameIterator(Environment* ev, FW_CPresentation* presentation, ODID frameGroup, ODID sequenceNumber) :
- fIterator(presentation->fFrames),
- fCurrentFrame(NULL),
- fFrameGroup(frameGroup),
- fSequenceNumber(sequenceNumber)
- {
- FW_UNUSED(ev);
- FW_ASSERT((frameGroup==0 && sequenceNumber==0) || (frameGroup!=0 && sequenceNumber!=0));
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::~FW_CPresentationFrameIterator
- //----------------------------------------------------------------------------------------
-
- FW_CPresentationFrameIterator::~FW_CPresentationFrameIterator()
- {
- FW_START_DESTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::First
- //----------------------------------------------------------------------------------------
-
- FW_CFrame* FW_CPresentationFrameIterator::First(Environment* ev)
- {
- return GetNext(ev, fIterator.First());
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::Next
- //----------------------------------------------------------------------------------------
-
- FW_CFrame* FW_CPresentationFrameIterator::Next(Environment* ev)
- {
- return GetNext(ev, fIterator.Next());
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::Last
- //----------------------------------------------------------------------------------------
-
- FW_CFrame* FW_CPresentationFrameIterator::Last(Environment* ev)
- {
- return GetPrevious(ev, fIterator.Last());
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::Previous
- //----------------------------------------------------------------------------------------
-
- FW_CFrame* FW_CPresentationFrameIterator::Previous(Environment* ev)
- {
- return GetPrevious(ev, fIterator.Previous());
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::GetNext
- //----------------------------------------------------------------------------------------
-
- FW_CFrame* FW_CPresentationFrameIterator::GetNext(Environment* ev, FW_CPrivDisplayFrame* displayFrame)
- {
- FW_Boolean useGroup = (fFrameGroup != 0) && (fSequenceNumber != 0);
- fCurrentFrame = NULL;
- while (displayFrame != NULL)
- {
- FW_CFrame* theFrame = displayFrame->fFrame;
- if (theFrame != NULL)
- {
- if ((!useGroup) || ((theFrame->GetFrameGroup(ev) == fFrameGroup) && (theFrame->GetSequenceNumber(ev) == fSequenceNumber)))
- {
- fCurrentFrame = theFrame;
- break;
- }
- }
-
- displayFrame = fIterator.Next();
- }
-
- return fCurrentFrame;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFrameIterator::GetPrevious
- //----------------------------------------------------------------------------------------
-
- FW_CFrame* FW_CPresentationFrameIterator::GetPrevious(Environment* ev, FW_CPrivDisplayFrame* displayFrame)
- {
- FW_Boolean useGroup = (fFrameGroup != 0) && (fSequenceNumber != 0);
- fCurrentFrame = NULL;
- while (displayFrame != NULL)
- {
- FW_CFrame* theFrame = displayFrame->fFrame;
- if (theFrame != NULL)
- {
- if ((!useGroup) || ((theFrame->GetFrameGroup(ev) == fFrameGroup) && (theFrame->GetSequenceNumber(ev) == fSequenceNumber)))
- {
- fCurrentFrame = theFrame;
- break;
- }
- }
-
- displayFrame = fIterator.Previous();
- }
-
- return fCurrentFrame;
- }
-
- //========================================================================================
- // class FW_CFrameFacetIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameFacetIterator::FW_CFrameFacetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CFrameFacetIterator::FW_CFrameFacetIterator(Environment* ev, const FW_CFrame* frame):
- FW_CODFrameFacetIterator(ev, frame->GetODFrame(ev))
- {
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameFacetIterator::~FW_CFrameFacetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CFrameFacetIterator::~FW_CFrameFacetIterator()
- {
- FW_START_DESTRUCTOR
- }
-
- //========================================================================================
- // class FW_CODFrameFacetIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CODFrameFacetIterator::FW_CODFrameFacetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CODFrameFacetIterator::FW_CODFrameFacetIterator(Environment* ev, ODFrame* odFrame):
- fODFrameFacetIte(NULL)
- {
- fODFrameFacetIte = odFrame->CreateFacetIterator(ev);
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CODFrameFacetIterator::~FW_CODFrameFacetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CODFrameFacetIterator::~FW_CODFrameFacetIterator()
- {
- FW_START_DESTRUCTOR
-
- delete fODFrameFacetIte;
- }
-
- //========================================================================================
- // FW_CFacetIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CFacetIterator::FW_CFacetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CFacetIterator::FW_CFacetIterator(Environment* ev,
- ODFacet* facet,
- ODTraversalType traversalType,
- ODSiblingOrder siblingOrder) :
- fODFacetIterator(NULL)
- {
- fODFacetIterator = facet->CreateFacetIterator(ev, traversalType, siblingOrder);
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFacetIterator::~FW_CFacetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CFacetIterator::~FW_CFacetIterator()
- {
- FW_START_DESTRUCTOR
-
- delete fODFacetIterator;
- fODFacetIterator = NULL;
- }
-
- //========================================================================================
- // FW_CTypeListIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CTypeListIterator::FW_CTypeListIterator
- //----------------------------------------------------------------------------------------
-
- FW_CTypeListIterator::FW_CTypeListIterator(Environment* ev, ODTypeList* typeList) :
- fODTypeListIterator(NULL)
- {
- fODTypeListIterator = typeList->CreateTypeListIterator(ev);
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CTypeListIterator::~FW_CTypeListIterator
- //----------------------------------------------------------------------------------------
-
- FW_CTypeListIterator::~FW_CTypeListIterator()
- {
- FW_START_DESTRUCTOR
-
- delete fODTypeListIterator;
- fODTypeListIterator = NULL;
- }
-
- //========================================================================================
- // FW_CPresentationFacetIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFacetIterator::FW_CPresentationFacetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CPresentationFacetIterator::FW_CPresentationFacetIterator(Environment* ev, FW_CPresentation* presentation):
- fFacetIterator(NULL),
- fCurrentFacet(NULL),
- fFrameIterator(ev, presentation)
- {
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFacetIterator::~FW_CPresentationFacetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CPresentationFacetIterator::~FW_CPresentationFacetIterator()
- {
- FW_START_DESTRUCTOR
-
- delete fFacetIterator;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFacetIterator::First
- //----------------------------------------------------------------------------------------
-
- ODFacet* FW_CPresentationFacetIterator::First(Environment* ev)
- {
- FW_CFrame* frame = fFrameIterator.First(ev);
- fCurrentFacet = ResetFacetIterator(ev, frame);
-
- return fCurrentFacet;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFacetIterator::Next
- //----------------------------------------------------------------------------------------
-
- ODFacet* FW_CPresentationFacetIterator::Next(Environment* ev)
- {
- fCurrentFacet = NULL;
-
- if (fFacetIterator)
- {
- fCurrentFacet = fFacetIterator->Next(ev);
- if (fCurrentFacet == NULL)
- {
- delete fFacetIterator;
- fFacetIterator = NULL;
-
- fCurrentFacet = ResetFacetIterator(ev, fFrameIterator.Next(ev));
- }
- }
-
- return fCurrentFacet;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CPresentationFacetIterator::ResetFacetIterator
- //----------------------------------------------------------------------------------------
-
- ODFacet* FW_CPresentationFacetIterator::ResetFacetIterator(Environment* ev, FW_CFrame* frame)
- {
- if (frame != NULL)
- {
- fFacetIterator = FW_NEW(FW_CFrameFacetIterator, (ev, frame));
- return fFacetIterator->First(ev);
- }
-
- return NULL;
- }
-
- //========================================================================================
- // FW_CFrameEmbeddedFrameIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameEmbeddedFrameIterator::FW_CFrameEmbeddedFrameIterator
- //----------------------------------------------------------------------------------------
-
- FW_CFrameEmbeddedFrameIterator::FW_CFrameEmbeddedFrameIterator(Environment* ev, const FW_CEmbeddingFrame* frame) :
- fIterator(ev, frame),
- fCurrentFrame(NULL)
- {
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameEmbeddedFrameIterator::~FW_CFrameEmbeddedFrameIterator
- //----------------------------------------------------------------------------------------
-
- FW_CFrameEmbeddedFrameIterator::~FW_CFrameEmbeddedFrameIterator()
- {
- FW_START_DESTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameEmbeddedFrameIterator::First
- //----------------------------------------------------------------------------------------
-
- ODFrame* FW_CFrameEmbeddedFrameIterator::First(Environment* ev)
- {
- return PrivNext(ev, fIterator.First(ev));
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameEmbeddedFrameIterator::Next
- //----------------------------------------------------------------------------------------
-
- ODFrame* FW_CFrameEmbeddedFrameIterator::Next(Environment* ev)
- {
- return PrivNext(ev, fIterator.Next(ev));
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameEmbeddedFrameIterator::Last
- //----------------------------------------------------------------------------------------
-
- ODFrame* FW_CFrameEmbeddedFrameIterator::Last(Environment* ev)
- {
- return PrivPrevious(ev, fIterator.Last(ev));
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameEmbeddedFrameIterator::Previous
- //----------------------------------------------------------------------------------------
-
- ODFrame* FW_CFrameEmbeddedFrameIterator::Previous(Environment* ev)
- {
- return PrivPrevious(ev, fIterator.Previous(ev));
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameEmbeddedFrameIterator::PrivNext
- //----------------------------------------------------------------------------------------
-
- ODFrame* FW_CFrameEmbeddedFrameIterator::PrivNext(Environment* ev, FW_CProxyFrame* proxyFrame)
- {
- fCurrentFrame = NULL;
- while (proxyFrame != NULL)
- {
- if (proxyFrame->IsFrameInMemory(ev))
- {
- fCurrentFrame = proxyFrame->GetFrame(ev);
- break;
- }
-
- proxyFrame = fIterator.Next(ev);
- }
-
- return fCurrentFrame;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFrameEmbeddedFrameIterator::PrivPrevious
- //----------------------------------------------------------------------------------------
-
- ODFrame* FW_CFrameEmbeddedFrameIterator::PrivPrevious(Environment* ev, FW_CProxyFrame* proxyFrame)
- {
- fCurrentFrame = NULL;
- while (proxyFrame != NULL)
- {
- if (proxyFrame->IsFrameInMemory(ev))
- {
- fCurrentFrame = proxyFrame->GetFrame(ev);
- break;
- }
-
- proxyFrame = fIterator.Previous(ev);
- }
-
- return fCurrentFrame;
- }
-
- //========================================================================================
- // FW_CEmbeddedODFacetsIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CEmbeddedODFacetsIterator::FW_CEmbeddedODFacetsIterator
- //----------------------------------------------------------------------------------------
-
- FW_CEmbeddedODFacetsIterator::FW_CEmbeddedODFacetsIterator(Environment* ev,
- const FW_MProxy* proxy,
- ODFacet* embeddingFacet,
- ODSiblingOrder siblingOrder) :
- fODFacetIterator(NULL),
- fODFacet(NULL),
- fEmbeddedODPart(proxy->AcquireEmbeddedPart(ev, FALSE)), // don't load the embedded part
- fSequenceNumber(proxy->GetSequenceNumber(ev)),
- fFrameGroup(proxy->GetFrameGroup(ev))
- {
- fODFacetIterator = embeddingFacet->CreateFacetIterator(ev, kODChildrenOnly, siblingOrder);
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEmbeddedODFacetsIterator::~FW_CEmbeddedODFacetsIterator
- //----------------------------------------------------------------------------------------
-
- FW_CEmbeddedODFacetsIterator::~FW_CEmbeddedODFacetsIterator()
- {
- FW_START_DESTRUCTOR
-
- if (fEmbeddedODPart)
- {
- FW_SOMEnvironment ev;
- fEmbeddedODPart->Release(ev);
- }
-
- delete fODFacetIterator;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEmbeddedODFacetsIterator::First
- //----------------------------------------------------------------------------------------
-
- ODFacet* FW_CEmbeddedODFacetsIterator::First(Environment* ev)
- {
- return PrivFindNext(ev, fODFacetIterator->First(ev));
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEmbeddedODFacetsIterator::Next
- //----------------------------------------------------------------------------------------
-
- ODFacet* FW_CEmbeddedODFacetsIterator::Next(Environment* ev)
- {
- return PrivFindNext(ev, fODFacetIterator->Next(ev));
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEmbeddedODFacetsIterator::IsNotComplete
- //----------------------------------------------------------------------------------------
-
- FW_Boolean FW_CEmbeddedODFacetsIterator::IsNotComplete(Environment* ev)
- {
- FW_UNUSED(ev);
- return fODFacet != NULL;
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CEmbeddedODFacetsIterator::PrivFindNext
- //----------------------------------------------------------------------------------------
- // fEmbeddedODPart is NULL means there are no embedded facets
-
- ODFacet* FW_CEmbeddedODFacetsIterator::PrivFindNext(Environment* ev, ODFacet* facet)
- {
- if (fEmbeddedODPart)
- {
- FW_Boolean useGroup = (fFrameGroup != 0) && (fSequenceNumber != 0);
-
- fODFacet = facet;
- while (fODFacet != NULL)
- {
- ODFrame* embeddedFrame = fODFacet->GetFrame(ev);
- FW_CAcquiredODPart aqODPart = embeddedFrame->AcquirePart(ev);
- if (aqODPart == fEmbeddedODPart &&
- ((!useGroup) || ((embeddedFrame->GetFrameGroup(ev) == fFrameGroup) && (embeddedFrame->GetSequenceNumber(ev) == fSequenceNumber))))
- {
- return fODFacet;
- }
- fODFacet = fODFacetIterator->Next(ev);
- }
- }
-
- return NULL;
- }
-
- //========================================================================================
- // class FW_CFrameProxyFrameIterator
- //========================================================================================
-
- //---------------------------------------------------------------------------------------
- // FW_CFrameProxyFrameIterator::FW_CFrameProxyFrameIterator
- //---------------------------------------------------------------------------------------
-
- FW_CFrameProxyFrameIterator::FW_CFrameProxyFrameIterator(Environment* ev, const FW_CEmbeddingFrame* frame) :
- fProxyIterator(frame->GetPart(ev)),
- fCurrentFrame(NULL),
- fContainerID(frame->GetID(ev))
- {
- FW_END_CONSTRUCTOR
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CFrameProxyFrameIterator::~FW_CFrameProxyFrameIterator
- //---------------------------------------------------------------------------------------
-
- FW_CFrameProxyFrameIterator::~FW_CFrameProxyFrameIterator()
- {
- FW_START_DESTRUCTOR
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CFrameProxyFrameIterator::GetNext
- //---------------------------------------------------------------------------------------
-
- FW_CProxyFrame* FW_CFrameProxyFrameIterator::GetNext(Environment* ev, FW_MProxy* proxy)
- {
- while (fProxyIterator.IsNotComplete())
- {
- FW_CProxyFrame* proxyFrame = proxy->PrivContainerIDToProxyFrame(ev, fContainerID);
- if (proxyFrame)
- return proxyFrame;
- proxy = fProxyIterator.Next();
- }
-
- return NULL;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CFrameProxyFrameIterator::GetPrevious
- //---------------------------------------------------------------------------------------
-
- FW_CProxyFrame* FW_CFrameProxyFrameIterator::GetPrevious(Environment* ev, FW_MProxy* proxy)
- {
- while (fProxyIterator.IsNotComplete())
- {
- FW_CProxyFrame* proxyFrame = proxy->PrivContainerIDToProxyFrame(ev, fContainerID);
- if (proxyFrame)
- return proxyFrame;
- proxy = fProxyIterator.Previous();
- }
-
- return NULL;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CFrameProxyFrameIterator::First
- //---------------------------------------------------------------------------------------
-
- FW_CProxyFrame* FW_CFrameProxyFrameIterator::First(Environment* ev)
- {
- fCurrentFrame = GetNext(ev, fProxyIterator.First());
- return fCurrentFrame;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CFrameProxyFrameIterator::Last
- //---------------------------------------------------------------------------------------
-
- FW_CProxyFrame* FW_CFrameProxyFrameIterator::Last(Environment* ev)
- {
- fCurrentFrame = GetPrevious(ev, fProxyIterator.Last());
- return fCurrentFrame;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CFrameProxyFrameIterator::Next
- //---------------------------------------------------------------------------------------
-
- FW_CProxyFrame* FW_CFrameProxyFrameIterator::Next(Environment* ev)
- {
- fCurrentFrame = GetNext(ev, fProxyIterator.Next());
- return fCurrentFrame;
- }
-
- //---------------------------------------------------------------------------------------
- // FW_CFrameProxyFrameIterator::Previous
- //---------------------------------------------------------------------------------------
-
- FW_CProxyFrame* FW_CFrameProxyFrameIterator::Previous(Environment* ev)
- {
- fCurrentFrame = GetPrevious(ev, fProxyIterator.Previous());
- return fCurrentFrame;
- }
-
- //========================================================================================
- // class FW_CFocusSetIterator
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_CFocusSetIterator::FW_CFocusSetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CFocusSetIterator::FW_CFocusSetIterator(Environment* ev, const FW_CFrame* frame)
- {
- fIterator = frame->GetFocusSet(ev)->CreateIterator(ev);
-
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- // FW_CFocusSetIterator::~FW_CFocusSetIterator
- //----------------------------------------------------------------------------------------
-
- FW_CFocusSetIterator::~FW_CFocusSetIterator()
- {
- FW_START_DESTRUCTOR
-
- delete fIterator;
- fIterator = NULL;
- }
-