home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / FWIters.cpp < prev    next >
Encoding:
Text File  |  1996-09-17  |  23.5 KB  |  714 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWIters.cpp
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:            (c) 1995 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWITERS_H
  13. #include "FWIters.h"
  14. #endif
  15.  
  16. #ifndef FWFRAME_H
  17. #include "FWFrame.h"
  18. #endif
  19.  
  20. #ifndef FWFRMING_H
  21. #include "FWFrming.h"
  22. #endif
  23.  
  24. #ifndef FWPROXY_H
  25. #include "FWProxy.h"
  26. #endif
  27.  
  28. #ifndef FWPXYFRM_H
  29. #include "FWPxyFrm.h"
  30. #endif
  31.  
  32. #ifndef FWPRESEN_H
  33. #include "FWPresen.h"
  34. #endif
  35.  
  36. #ifndef FWSOMENV_H
  37. #include "FWSOMEnv.h"
  38. #endif
  39.  
  40. // ----- OpenDoc includes
  41.  
  42. #ifndef SOM_ODFacet_xh
  43. #include <Facet.xh>
  44. #endif
  45.  
  46. #ifndef SOM_ODFocusSet_xh
  47. #include <FocusSet.xh>
  48. #endif
  49.  
  50. #ifndef SOM_ODTypeList_xh
  51. #include <TypeList.xh>
  52. #endif
  53.  
  54. //========================================================================================
  55. //    Runtime information
  56. //========================================================================================
  57.  
  58. #ifdef FW_BUILD_MAC
  59. #pragma segment framework
  60. #endif
  61.  
  62. FW_DEFINE_AUTO(FW_CPresentationFrameIterator)
  63. FW_DEFINE_AUTO(FW_CFrameFacetIterator)
  64. FW_DEFINE_AUTO(FW_CODFrameFacetIterator)
  65. FW_DEFINE_AUTO(FW_CFacetIterator)
  66. FW_DEFINE_AUTO(FW_CTypeListIterator)
  67. FW_DEFINE_AUTO(FW_CPresentationFacetIterator)
  68. FW_DEFINE_AUTO(FW_CFrameEmbeddedFrameIterator)
  69. FW_DEFINE_AUTO(FW_CEmbeddedODFacetsIterator)
  70. FW_DEFINE_AUTO(FW_CFrameProxyFrameIterator)
  71. FW_DEFINE_AUTO(FW_CFocusSetIterator)
  72.  
  73.  
  74. //========================================================================================
  75. //    class FW_CPresentationFrameIterator
  76. //========================================================================================
  77.  
  78. //----------------------------------------------------------------------------------------
  79. //    FW_CPresentationFrameIterator::FW_CPresentationFrameIterator
  80. //----------------------------------------------------------------------------------------
  81.  
  82. FW_CPresentationFrameIterator::FW_CPresentationFrameIterator(Environment* ev, FW_CPresentation* presentation) :
  83.     fIterator(presentation->fFrames),
  84.     fCurrentFrame(NULL),
  85.     fFrameGroup(0),
  86.     fSequenceNumber(0)
  87. {
  88. FW_UNUSED(ev);
  89.     FW_END_CONSTRUCTOR
  90. }
  91.  
  92. //----------------------------------------------------------------------------------------
  93. //    FW_CPresentationFrameIterator::FW_CPresentationFrameIterator
  94. //----------------------------------------------------------------------------------------
  95.  
  96. FW_CPresentationFrameIterator::FW_CPresentationFrameIterator(Environment* ev, FW_CPresentation* presentation, ODID frameGroup, ODID sequenceNumber) :
  97.     fIterator(presentation->fFrames),
  98.     fCurrentFrame(NULL),
  99.     fFrameGroup(frameGroup),
  100.     fSequenceNumber(sequenceNumber)
  101. {
  102. FW_UNUSED(ev);
  103.     FW_ASSERT((frameGroup==0 && sequenceNumber==0) || (frameGroup!=0 && sequenceNumber!=0));
  104.  
  105.     FW_END_CONSTRUCTOR
  106. }
  107.  
  108. //----------------------------------------------------------------------------------------
  109. //    FW_CPresentationFrameIterator::~FW_CPresentationFrameIterator
  110. //----------------------------------------------------------------------------------------
  111.  
  112. FW_CPresentationFrameIterator::~FW_CPresentationFrameIterator()
  113. {
  114.     FW_START_DESTRUCTOR
  115. }
  116.  
  117. //----------------------------------------------------------------------------------------
  118. //    FW_CPresentationFrameIterator::First
  119. //----------------------------------------------------------------------------------------
  120.  
  121. FW_CFrame* FW_CPresentationFrameIterator::First(Environment* ev)
  122. {
  123.     return GetNext(ev, fIterator.First());
  124. }
  125.  
  126. //----------------------------------------------------------------------------------------
  127. //    FW_CPresentationFrameIterator::Next
  128. //----------------------------------------------------------------------------------------
  129.  
  130. FW_CFrame* FW_CPresentationFrameIterator::Next(Environment* ev)
  131. {
  132.     return GetNext(ev, fIterator.Next());
  133. }
  134.  
  135. //----------------------------------------------------------------------------------------
  136. //    FW_CPresentationFrameIterator::Last
  137. //----------------------------------------------------------------------------------------
  138.  
  139. FW_CFrame* FW_CPresentationFrameIterator::Last(Environment* ev)
  140. {
  141.     return GetPrevious(ev, fIterator.Last());
  142. }
  143.  
  144. //----------------------------------------------------------------------------------------
  145. //    FW_CPresentationFrameIterator::Previous
  146. //----------------------------------------------------------------------------------------
  147.  
  148. FW_CFrame* FW_CPresentationFrameIterator::Previous(Environment* ev)
  149. {
  150.     return GetPrevious(ev, fIterator.Previous());
  151. }
  152.  
  153. //----------------------------------------------------------------------------------------
  154. //    FW_CPresentationFrameIterator::GetNext
  155. //----------------------------------------------------------------------------------------
  156.  
  157. FW_CFrame* FW_CPresentationFrameIterator::GetNext(Environment* ev, FW_CPrivDisplayFrame* displayFrame)
  158. {
  159.     FW_Boolean useGroup = (fFrameGroup != 0) && (fSequenceNumber != 0);
  160.     fCurrentFrame = NULL;
  161.     while (displayFrame != NULL)
  162.     {
  163.         FW_CFrame* theFrame = displayFrame->fFrame;
  164.         if (theFrame != NULL)
  165.         {
  166.             if ((!useGroup) || ((theFrame->GetFrameGroup(ev) == fFrameGroup) && (theFrame->GetSequenceNumber(ev) == fSequenceNumber)))
  167.             {
  168.                 fCurrentFrame = theFrame;
  169.                 break;
  170.             }
  171.         }
  172.         
  173.         displayFrame = fIterator.Next();
  174.     }
  175.     
  176.     return fCurrentFrame;
  177. }
  178.  
  179. //----------------------------------------------------------------------------------------
  180. //    FW_CPresentationFrameIterator::GetPrevious
  181. //----------------------------------------------------------------------------------------
  182.  
  183. FW_CFrame* FW_CPresentationFrameIterator::GetPrevious(Environment* ev, FW_CPrivDisplayFrame* displayFrame)
  184. {
  185.     FW_Boolean useGroup = (fFrameGroup != 0) && (fSequenceNumber != 0);
  186.     fCurrentFrame = NULL;
  187.     while (displayFrame != NULL)
  188.     {
  189.         FW_CFrame* theFrame = displayFrame->fFrame;
  190.         if (theFrame != NULL)
  191.         {
  192.             if ((!useGroup) || ((theFrame->GetFrameGroup(ev) == fFrameGroup) && (theFrame->GetSequenceNumber(ev) == fSequenceNumber)))
  193.             {
  194.                 fCurrentFrame = theFrame;
  195.                 break;
  196.             }
  197.         }
  198.         
  199.         displayFrame = fIterator.Previous();
  200.     }
  201.     
  202.     return fCurrentFrame;
  203. }
  204.  
  205. //========================================================================================
  206. //    class FW_CFrameFacetIterator
  207. //========================================================================================
  208.  
  209. //----------------------------------------------------------------------------------------
  210. //    FW_CFrameFacetIterator::FW_CFrameFacetIterator
  211. //----------------------------------------------------------------------------------------
  212.  
  213. FW_CFrameFacetIterator::FW_CFrameFacetIterator(Environment* ev, const FW_CFrame* frame):
  214.     FW_CODFrameFacetIterator(ev, frame->GetODFrame(ev))
  215. {
  216.     FW_END_CONSTRUCTOR
  217. }
  218.  
  219. //----------------------------------------------------------------------------------------
  220. //    FW_CFrameFacetIterator::~FW_CFrameFacetIterator
  221. //----------------------------------------------------------------------------------------
  222.  
  223. FW_CFrameFacetIterator::~FW_CFrameFacetIterator()
  224. {
  225.     FW_START_DESTRUCTOR
  226. }
  227.  
  228. //========================================================================================
  229. //    class FW_CODFrameFacetIterator
  230. //========================================================================================
  231.  
  232. //----------------------------------------------------------------------------------------
  233. //    FW_CODFrameFacetIterator::FW_CODFrameFacetIterator
  234. //----------------------------------------------------------------------------------------
  235.  
  236. FW_CODFrameFacetIterator::FW_CODFrameFacetIterator(Environment* ev, ODFrame* odFrame):
  237.     fODFrameFacetIte(NULL)
  238. {
  239.     fODFrameFacetIte = odFrame->CreateFacetIterator(ev);
  240.     
  241.     FW_END_CONSTRUCTOR
  242. }
  243.  
  244. //----------------------------------------------------------------------------------------
  245. //    FW_CODFrameFacetIterator::~FW_CODFrameFacetIterator
  246. //----------------------------------------------------------------------------------------
  247.  
  248. FW_CODFrameFacetIterator::~FW_CODFrameFacetIterator()
  249. {
  250.     FW_START_DESTRUCTOR
  251.     
  252.     delete fODFrameFacetIte;
  253. }
  254.  
  255. //========================================================================================
  256. //    FW_CFacetIterator
  257. //========================================================================================
  258.  
  259. //----------------------------------------------------------------------------------------
  260. //    FW_CFacetIterator::FW_CFacetIterator
  261. //----------------------------------------------------------------------------------------
  262.  
  263. FW_CFacetIterator::FW_CFacetIterator(Environment* ev, 
  264.                                     ODFacet* facet,
  265.                                     ODTraversalType traversalType,
  266.                                     ODSiblingOrder siblingOrder) :
  267.     fODFacetIterator(NULL)
  268. {
  269.     fODFacetIterator = facet->CreateFacetIterator(ev, traversalType, siblingOrder);
  270.  
  271.     FW_END_CONSTRUCTOR
  272. }
  273.  
  274. //----------------------------------------------------------------------------------------
  275. //    FW_CFacetIterator::~FW_CFacetIterator
  276. //----------------------------------------------------------------------------------------
  277.  
  278. FW_CFacetIterator::~FW_CFacetIterator()
  279. {
  280.     FW_START_DESTRUCTOR
  281.     
  282.     delete fODFacetIterator;
  283.     fODFacetIterator = NULL;
  284. }
  285.  
  286. //========================================================================================
  287. //    FW_CTypeListIterator
  288. //========================================================================================
  289.  
  290. //----------------------------------------------------------------------------------------
  291. //    FW_CTypeListIterator::FW_CTypeListIterator
  292. //----------------------------------------------------------------------------------------
  293.  
  294. FW_CTypeListIterator::FW_CTypeListIterator(Environment* ev, ODTypeList* typeList) :
  295.     fODTypeListIterator(NULL)
  296. {
  297.     fODTypeListIterator = typeList->CreateTypeListIterator(ev);
  298.  
  299.     FW_END_CONSTRUCTOR
  300. }
  301.  
  302. //----------------------------------------------------------------------------------------
  303. //    FW_CTypeListIterator::~FW_CTypeListIterator
  304. //----------------------------------------------------------------------------------------
  305.  
  306. FW_CTypeListIterator::~FW_CTypeListIterator()
  307. {
  308.     FW_START_DESTRUCTOR
  309.     
  310.     delete fODTypeListIterator;
  311.     fODTypeListIterator = NULL;
  312. }
  313.  
  314. //========================================================================================
  315. //    FW_CPresentationFacetIterator
  316. //========================================================================================
  317.  
  318. //----------------------------------------------------------------------------------------
  319. //    FW_CPresentationFacetIterator::FW_CPresentationFacetIterator
  320. //----------------------------------------------------------------------------------------
  321.  
  322. FW_CPresentationFacetIterator::FW_CPresentationFacetIterator(Environment* ev, FW_CPresentation* presentation):
  323.     fFacetIterator(NULL),
  324.     fCurrentFacet(NULL),
  325.     fFrameIterator(ev, presentation)
  326. {
  327.     FW_END_CONSTRUCTOR
  328. }
  329.  
  330. //----------------------------------------------------------------------------------------
  331. //    FW_CPresentationFacetIterator::~FW_CPresentationFacetIterator
  332. //----------------------------------------------------------------------------------------
  333.  
  334. FW_CPresentationFacetIterator::~FW_CPresentationFacetIterator()
  335. {
  336.     FW_START_DESTRUCTOR
  337.     
  338.     delete fFacetIterator;
  339. }
  340.  
  341. //----------------------------------------------------------------------------------------
  342. //    FW_CPresentationFacetIterator::First
  343. //----------------------------------------------------------------------------------------
  344.  
  345. ODFacet* FW_CPresentationFacetIterator::First(Environment* ev)
  346. {
  347.     FW_CFrame* frame = fFrameIterator.First(ev);
  348.     fCurrentFacet = ResetFacetIterator(ev, frame);
  349.     
  350.     return fCurrentFacet;
  351. }
  352.  
  353. //----------------------------------------------------------------------------------------
  354. //    FW_CPresentationFacetIterator::Next
  355. //----------------------------------------------------------------------------------------
  356.  
  357. ODFacet* FW_CPresentationFacetIterator::Next(Environment* ev)
  358. {
  359.     fCurrentFacet = NULL;
  360.     
  361.     if (fFacetIterator)
  362.     {
  363.         fCurrentFacet = fFacetIterator->Next(ev);
  364.         if (fCurrentFacet == NULL)
  365.         {
  366.             delete fFacetIterator;
  367.             fFacetIterator = NULL;
  368.             
  369.             fCurrentFacet = ResetFacetIterator(ev, fFrameIterator.Next(ev));
  370.         }
  371.     }
  372.     
  373.     return fCurrentFacet;
  374. }
  375.  
  376. //----------------------------------------------------------------------------------------
  377. //    FW_CPresentationFacetIterator::ResetFacetIterator
  378. //----------------------------------------------------------------------------------------
  379.  
  380. ODFacet* FW_CPresentationFacetIterator::ResetFacetIterator(Environment* ev, FW_CFrame* frame)
  381. {
  382.     if (frame != NULL)
  383.     {
  384.         fFacetIterator = FW_NEW(FW_CFrameFacetIterator, (ev, frame));
  385.         return fFacetIterator->First(ev);
  386.     }
  387.     
  388.     return NULL;
  389. }
  390.  
  391. //========================================================================================
  392. //    FW_CFrameEmbeddedFrameIterator
  393. //========================================================================================
  394.  
  395. //----------------------------------------------------------------------------------------
  396. //    FW_CFrameEmbeddedFrameIterator::FW_CFrameEmbeddedFrameIterator
  397. //----------------------------------------------------------------------------------------
  398.  
  399. FW_CFrameEmbeddedFrameIterator::FW_CFrameEmbeddedFrameIterator(Environment* ev, const FW_CEmbeddingFrame* frame) :
  400.     fIterator(ev, frame),
  401.     fCurrentFrame(NULL)
  402. {
  403.     FW_END_CONSTRUCTOR
  404. }
  405.  
  406. //----------------------------------------------------------------------------------------
  407. //    FW_CFrameEmbeddedFrameIterator::~FW_CFrameEmbeddedFrameIterator
  408. //----------------------------------------------------------------------------------------
  409.  
  410. FW_CFrameEmbeddedFrameIterator::~FW_CFrameEmbeddedFrameIterator()
  411. {
  412.     FW_START_DESTRUCTOR
  413. }
  414.  
  415. //----------------------------------------------------------------------------------------
  416. //    FW_CFrameEmbeddedFrameIterator::First
  417. //----------------------------------------------------------------------------------------
  418.  
  419. ODFrame* FW_CFrameEmbeddedFrameIterator::First(Environment* ev)
  420. {
  421.     return PrivNext(ev, fIterator.First(ev));
  422. }
  423.  
  424. //----------------------------------------------------------------------------------------
  425. //    FW_CFrameEmbeddedFrameIterator::Next
  426. //----------------------------------------------------------------------------------------
  427.  
  428. ODFrame* FW_CFrameEmbeddedFrameIterator::Next(Environment* ev)
  429. {
  430.     return PrivNext(ev, fIterator.Next(ev));
  431. }
  432.  
  433. //----------------------------------------------------------------------------------------
  434. //    FW_CFrameEmbeddedFrameIterator::Last
  435. //----------------------------------------------------------------------------------------
  436.  
  437. ODFrame* FW_CFrameEmbeddedFrameIterator::Last(Environment* ev)
  438. {
  439.     return PrivPrevious(ev, fIterator.Last(ev));
  440. }
  441.  
  442. //----------------------------------------------------------------------------------------
  443. //    FW_CFrameEmbeddedFrameIterator::Previous
  444. //----------------------------------------------------------------------------------------
  445.  
  446. ODFrame* FW_CFrameEmbeddedFrameIterator::Previous(Environment* ev)
  447. {
  448.     return PrivPrevious(ev, fIterator.Previous(ev));
  449. }
  450.  
  451. //----------------------------------------------------------------------------------------
  452. //    FW_CFrameEmbeddedFrameIterator::PrivNext
  453. //----------------------------------------------------------------------------------------
  454.  
  455. ODFrame* FW_CFrameEmbeddedFrameIterator::PrivNext(Environment* ev, FW_CProxyFrame* proxyFrame)
  456. {
  457.     fCurrentFrame = NULL;
  458.     while (proxyFrame != NULL)
  459.     {
  460.         if (proxyFrame->IsFrameInMemory(ev))
  461.         {
  462.             fCurrentFrame = proxyFrame->GetFrame(ev);
  463.             break;
  464.         }
  465.         
  466.         proxyFrame = fIterator.Next(ev);
  467.     }
  468.     
  469.     return fCurrentFrame;
  470. }
  471.  
  472. //----------------------------------------------------------------------------------------
  473. //    FW_CFrameEmbeddedFrameIterator::PrivPrevious
  474. //----------------------------------------------------------------------------------------
  475.  
  476. ODFrame* FW_CFrameEmbeddedFrameIterator::PrivPrevious(Environment* ev, FW_CProxyFrame* proxyFrame)
  477. {
  478.     fCurrentFrame = NULL;
  479.     while (proxyFrame != NULL)
  480.     {
  481.         if (proxyFrame->IsFrameInMemory(ev))
  482.         {
  483.             fCurrentFrame = proxyFrame->GetFrame(ev);
  484.             break;
  485.         }
  486.         
  487.         proxyFrame = fIterator.Previous(ev);
  488.     }
  489.     
  490.     return fCurrentFrame;
  491. }
  492.  
  493. //========================================================================================
  494. //    FW_CEmbeddedODFacetsIterator
  495. //========================================================================================
  496.  
  497. //----------------------------------------------------------------------------------------
  498. //    FW_CEmbeddedODFacetsIterator::FW_CEmbeddedODFacetsIterator
  499. //----------------------------------------------------------------------------------------
  500.  
  501. FW_CEmbeddedODFacetsIterator::FW_CEmbeddedODFacetsIterator(Environment* ev,
  502.                                                             const FW_MProxy* proxy, 
  503.                                                             ODFacet* embeddingFacet, 
  504.                                                             ODSiblingOrder siblingOrder) :
  505.     fODFacetIterator(NULL),
  506.     fODFacet(NULL),
  507.     fEmbeddedODPart(proxy->AcquireEmbeddedPart(ev, FALSE)),  // don't load the embedded part
  508.     fSequenceNumber(proxy->GetSequenceNumber(ev)),
  509.     fFrameGroup(proxy->GetFrameGroup(ev))
  510. {
  511.     fODFacetIterator = embeddingFacet->CreateFacetIterator(ev, kODChildrenOnly, siblingOrder);
  512.     
  513.     FW_END_CONSTRUCTOR
  514. }
  515.  
  516. //----------------------------------------------------------------------------------------
  517. //    FW_CEmbeddedODFacetsIterator::~FW_CEmbeddedODFacetsIterator
  518. //----------------------------------------------------------------------------------------
  519.  
  520. FW_CEmbeddedODFacetsIterator::~FW_CEmbeddedODFacetsIterator()
  521. {
  522.     FW_START_DESTRUCTOR
  523.     
  524.     if (fEmbeddedODPart)
  525.     {
  526.         FW_SOMEnvironment ev;
  527.         fEmbeddedODPart->Release(ev);
  528.     }
  529.         
  530.     delete fODFacetIterator;
  531. }
  532.  
  533. //----------------------------------------------------------------------------------------
  534. //    FW_CEmbeddedODFacetsIterator::First
  535. //----------------------------------------------------------------------------------------
  536.  
  537. ODFacet* FW_CEmbeddedODFacetsIterator::First(Environment* ev)
  538. {
  539.     return PrivFindNext(ev, fODFacetIterator->First(ev));
  540. }
  541.  
  542. //----------------------------------------------------------------------------------------
  543. //    FW_CEmbeddedODFacetsIterator::Next
  544. //----------------------------------------------------------------------------------------
  545.  
  546. ODFacet* FW_CEmbeddedODFacetsIterator::Next(Environment* ev)
  547. {
  548.     return PrivFindNext(ev, fODFacetIterator->Next(ev));
  549. }
  550.  
  551. //----------------------------------------------------------------------------------------
  552. //    FW_CEmbeddedODFacetsIterator::IsNotComplete
  553. //----------------------------------------------------------------------------------------
  554.  
  555. FW_Boolean FW_CEmbeddedODFacetsIterator::IsNotComplete(Environment* ev)
  556. {
  557. FW_UNUSED(ev);
  558.     return fODFacet != NULL;
  559. }
  560.  
  561. //----------------------------------------------------------------------------------------
  562. //    FW_CEmbeddedODFacetsIterator::PrivFindNext
  563. //----------------------------------------------------------------------------------------
  564. //    fEmbeddedODPart is NULL means there are no embedded facets
  565.  
  566. ODFacet* FW_CEmbeddedODFacetsIterator::PrivFindNext(Environment* ev, ODFacet* facet)
  567. {
  568.     if (fEmbeddedODPart)
  569.     {
  570.         FW_Boolean useGroup = (fFrameGroup != 0) && (fSequenceNumber != 0);
  571.  
  572.         fODFacet = facet;    
  573.         while (fODFacet != NULL)
  574.         {
  575.             ODFrame* embeddedFrame = fODFacet->GetFrame(ev);
  576.             FW_CAcquiredODPart aqODPart = embeddedFrame->AcquirePart(ev);
  577.             if (aqODPart == fEmbeddedODPart && 
  578.                 ((!useGroup) || ((embeddedFrame->GetFrameGroup(ev) == fFrameGroup) && (embeddedFrame->GetSequenceNumber(ev) == fSequenceNumber))))
  579.             {
  580.                 return fODFacet;
  581.             }
  582.             fODFacet = fODFacetIterator->Next(ev);
  583.         } 
  584.     }
  585.     
  586.     return NULL;
  587. }
  588.  
  589. //========================================================================================
  590. //    class FW_CFrameProxyFrameIterator
  591. //========================================================================================
  592.  
  593. //---------------------------------------------------------------------------------------
  594. //    FW_CFrameProxyFrameIterator::FW_CFrameProxyFrameIterator
  595. //---------------------------------------------------------------------------------------
  596.  
  597. FW_CFrameProxyFrameIterator::FW_CFrameProxyFrameIterator(Environment* ev, const FW_CEmbeddingFrame* frame) :
  598.     fProxyIterator(frame->GetPart(ev)),
  599.     fCurrentFrame(NULL),
  600.     fContainerID(frame->GetID(ev))
  601. {
  602.     FW_END_CONSTRUCTOR
  603. }
  604.  
  605. //---------------------------------------------------------------------------------------
  606. //    FW_CFrameProxyFrameIterator::~FW_CFrameProxyFrameIterator
  607. //---------------------------------------------------------------------------------------
  608.  
  609. FW_CFrameProxyFrameIterator::~FW_CFrameProxyFrameIterator()
  610. {
  611.     FW_START_DESTRUCTOR
  612. }
  613.  
  614. //---------------------------------------------------------------------------------------
  615. //    FW_CFrameProxyFrameIterator::GetNext
  616. //---------------------------------------------------------------------------------------
  617.  
  618. FW_CProxyFrame* FW_CFrameProxyFrameIterator::GetNext(Environment* ev, FW_MProxy* proxy)
  619. {
  620.     while (fProxyIterator.IsNotComplete())
  621.     {
  622.         FW_CProxyFrame* proxyFrame = proxy->PrivContainerIDToProxyFrame(ev, fContainerID);
  623.         if (proxyFrame)
  624.             return proxyFrame;
  625.         proxy = fProxyIterator.Next();
  626.     }
  627.     
  628.     return NULL;
  629. }
  630.  
  631. //---------------------------------------------------------------------------------------
  632. //    FW_CFrameProxyFrameIterator::GetPrevious
  633. //---------------------------------------------------------------------------------------
  634.  
  635. FW_CProxyFrame* FW_CFrameProxyFrameIterator::GetPrevious(Environment* ev, FW_MProxy* proxy)
  636. {
  637.     while (fProxyIterator.IsNotComplete())
  638.     {
  639.         FW_CProxyFrame* proxyFrame = proxy->PrivContainerIDToProxyFrame(ev, fContainerID);
  640.         if (proxyFrame)
  641.             return proxyFrame;
  642.         proxy = fProxyIterator.Previous();
  643.     }
  644.     
  645.     return NULL;
  646. }
  647.  
  648. //---------------------------------------------------------------------------------------
  649. //    FW_CFrameProxyFrameIterator::First
  650. //---------------------------------------------------------------------------------------
  651.  
  652. FW_CProxyFrame* FW_CFrameProxyFrameIterator::First(Environment* ev)
  653. {
  654.     fCurrentFrame = GetNext(ev, fProxyIterator.First());
  655.     return fCurrentFrame;
  656. }
  657.  
  658. //---------------------------------------------------------------------------------------
  659. //    FW_CFrameProxyFrameIterator::Last
  660. //---------------------------------------------------------------------------------------
  661.  
  662. FW_CProxyFrame* FW_CFrameProxyFrameIterator::Last(Environment* ev)
  663. {
  664.     fCurrentFrame = GetPrevious(ev, fProxyIterator.Last());
  665.     return fCurrentFrame;
  666. }
  667.  
  668. //---------------------------------------------------------------------------------------
  669. //    FW_CFrameProxyFrameIterator::Next
  670. //---------------------------------------------------------------------------------------
  671.  
  672. FW_CProxyFrame* FW_CFrameProxyFrameIterator::Next(Environment* ev)
  673. {
  674.     fCurrentFrame = GetNext(ev, fProxyIterator.Next());
  675.     return fCurrentFrame;
  676. }
  677.  
  678. //---------------------------------------------------------------------------------------
  679. //    FW_CFrameProxyFrameIterator::Previous
  680. //---------------------------------------------------------------------------------------
  681.  
  682. FW_CProxyFrame* FW_CFrameProxyFrameIterator::Previous(Environment* ev)
  683. {
  684.     fCurrentFrame = GetPrevious(ev, fProxyIterator.Previous());
  685.     return fCurrentFrame;
  686. }
  687.  
  688. //========================================================================================
  689. //    class FW_CFocusSetIterator
  690. //========================================================================================
  691.  
  692. //----------------------------------------------------------------------------------------
  693. //    FW_CFocusSetIterator::FW_CFocusSetIterator
  694. //----------------------------------------------------------------------------------------
  695.  
  696. FW_CFocusSetIterator::FW_CFocusSetIterator(Environment* ev, const FW_CFrame* frame)
  697. {
  698.     fIterator = frame->GetFocusSet(ev)->CreateIterator(ev);
  699.  
  700.     FW_END_CONSTRUCTOR
  701. }
  702.  
  703. //----------------------------------------------------------------------------------------
  704. //    FW_CFocusSetIterator::~FW_CFocusSetIterator
  705. //----------------------------------------------------------------------------------------
  706.  
  707. FW_CFocusSetIterator::~FW_CFocusSetIterator()
  708. {
  709.     FW_START_DESTRUCTOR
  710.     
  711.     delete fIterator;
  712.     fIterator = NULL;
  713. }
  714.