home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / Sources / FWIters.cpp < prev    next >
Encoding:
Text File  |  1995-11-08  |  21.2 KB  |  630 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWIters.cpp
  4. //    Release Version:    $ 1.0d11 $
  5. //
  6. //    Copyright:    © 1995 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 FWLNKMGR_H
  37. #include "FWLnkMgr.h"
  38. #endif
  39.  
  40. //========================================================================================
  41. //    Runtime information
  42. //========================================================================================
  43.  
  44. #if FW_LIB_EXPORT_PRAGMAS
  45. #pragma lib_export on
  46. #endif
  47.  
  48. #ifdef FW_BUILD_MAC
  49. #pragma segment framework
  50. #endif
  51.  
  52. //========================================================================================
  53. //    class FW_CFrameFacetIterator
  54. //========================================================================================
  55.  
  56. //----------------------------------------------------------------------------------------
  57. //    FW_CFrameFacetIterator::FW_CFrameFacetIterator
  58. //----------------------------------------------------------------------------------------
  59.  
  60. FW_CFrameFacetIterator::FW_CFrameFacetIterator(Environment* ev, const FW_CFrame* frame):
  61.     FW_CODFrameFacetIterator(ev, frame->GetODFrame(ev))
  62. {
  63. }
  64.  
  65. //----------------------------------------------------------------------------------------
  66. //    FW_CFrameFacetIterator::~FW_CFrameFacetIterator
  67. //----------------------------------------------------------------------------------------
  68.  
  69. FW_CFrameFacetIterator::~FW_CFrameFacetIterator()
  70. {
  71. }
  72.  
  73. //========================================================================================
  74. //    class FW_CODFrameFacetIterator
  75. //========================================================================================
  76.  
  77. //----------------------------------------------------------------------------------------
  78. //    FW_CODFrameFacetIterator::FW_CODFrameFacetIterator
  79. //----------------------------------------------------------------------------------------
  80.  
  81. FW_CODFrameFacetIterator::FW_CODFrameFacetIterator(Environment* ev, ODFrame* odFrame):
  82.     fODFrameFacetIte(NULL)
  83. {
  84.     fODFrameFacetIte = odFrame->CreateFacetIterator(ev);
  85.     
  86.     FW_END_CONSTRUCTOR
  87. }
  88.  
  89. //----------------------------------------------------------------------------------------
  90. //    FW_CODFrameFacetIterator::~FW_CODFrameFacetIterator
  91. //----------------------------------------------------------------------------------------
  92.  
  93. FW_CODFrameFacetIterator::~FW_CODFrameFacetIterator()
  94. {
  95.     FW_START_DESTRUCTOR
  96.     
  97.     delete fODFrameFacetIte;
  98. }
  99.  
  100. //========================================================================================
  101. //    FW_CFacetIterator
  102. //========================================================================================
  103.  
  104. //----------------------------------------------------------------------------------------
  105. //    FW_CFacetIterator::FW_CFacetIterator
  106. //----------------------------------------------------------------------------------------
  107.  
  108. FW_CFacetIterator::FW_CFacetIterator(Environment* ev, 
  109.                                     ODFacet* facet,
  110.                                     ODTraversalType traversalType,
  111.                                     ODSiblingOrder siblingOrder) :
  112.     fODFacetIterator(NULL)
  113. {
  114.     fODFacetIterator = facet->CreateFacetIterator(ev, traversalType, siblingOrder);
  115.  
  116.     FW_END_CONSTRUCTOR
  117. }
  118.  
  119. //----------------------------------------------------------------------------------------
  120. //    FW_CFacetIterator::~FW_CFacetIterator
  121. //----------------------------------------------------------------------------------------
  122.  
  123. FW_CFacetIterator::~FW_CFacetIterator()
  124. {
  125.     FW_START_DESTRUCTOR
  126.     
  127.     delete fODFacetIterator;
  128.     fODFacetIterator = NULL;
  129. }
  130.  
  131. //========================================================================================
  132. //    FW_CPresentationFrameIterator
  133. //========================================================================================
  134.  
  135. //----------------------------------------------------------------------------------------
  136. //    FW_CPresentationFrameIterator::FW_CPresentationFrameIterator
  137. //----------------------------------------------------------------------------------------
  138.  
  139. FW_CPresentationFrameIterator::FW_CPresentationFrameIterator(FW_CPresentation* presentation):
  140.     fIterator(NULL)
  141. {
  142.     fIterator = new FW_COrderedCollectionIterator(presentation->fFrames);
  143.     FW_END_CONSTRUCTOR
  144. }
  145.  
  146. //----------------------------------------------------------------------------------------
  147. //    FW_CPresentationFrameIterator::~FW_CPresentationFrameIterator
  148. //----------------------------------------------------------------------------------------
  149.  
  150. FW_CPresentationFrameIterator::~FW_CPresentationFrameIterator()
  151. {
  152.     FW_START_DESTRUCTOR
  153.     delete fIterator;
  154. }
  155.  
  156. //========================================================================================
  157. //    FW_CPresentationFacetIterator
  158. //========================================================================================
  159.  
  160. //----------------------------------------------------------------------------------------
  161. //    FW_CPresentationFacetIterator::FW_CPresentationFacetIterator
  162. //----------------------------------------------------------------------------------------
  163.  
  164. FW_CPresentationFacetIterator::FW_CPresentationFacetIterator(Environment* ev, FW_CPresentation* presentation):
  165.     fFacetIterator(NULL),
  166.     fCurrentFacet(NULL),
  167.     fFrameIterator(presentation)
  168. {
  169.     FW_END_CONSTRUCTOR
  170. }
  171.  
  172. //----------------------------------------------------------------------------------------
  173. //    FW_CPresentationFacetIterator::~FW_CPresentationFacetIterator
  174. //----------------------------------------------------------------------------------------
  175.  
  176. FW_CPresentationFacetIterator::~FW_CPresentationFacetIterator()
  177. {
  178.     FW_START_DESTRUCTOR
  179.     
  180.     delete fFacetIterator;
  181. }
  182.  
  183. //----------------------------------------------------------------------------------------
  184. //    FW_CPresentationFacetIterator::First
  185. //----------------------------------------------------------------------------------------
  186.  
  187. ODFacet* FW_CPresentationFacetIterator::First(Environment* ev)
  188. {
  189.     FW_CFrame* frame = fFrameIterator.First();
  190.     fCurrentFacet = ResetFacetIterator(ev, frame);
  191.     
  192.     return fCurrentFacet;
  193. }
  194.  
  195. //----------------------------------------------------------------------------------------
  196. //    FW_CPresentationFacetIterator::Next
  197. //----------------------------------------------------------------------------------------
  198.  
  199. ODFacet* FW_CPresentationFacetIterator::Next(Environment* ev)
  200. {
  201.     fCurrentFacet = NULL;
  202.     
  203.     if (fFacetIterator)
  204.     {
  205.         fCurrentFacet = fFacetIterator->Next(ev);
  206.         if (fCurrentFacet == NULL)
  207.         {
  208.             delete fFacetIterator;
  209.             fFacetIterator = NULL;
  210.             
  211.             fCurrentFacet = ResetFacetIterator(ev, fFrameIterator.Next());
  212.         }
  213.     }
  214.     
  215.     return fCurrentFacet;
  216. }
  217.  
  218. //----------------------------------------------------------------------------------------
  219. //    FW_CPresentationFacetIterator::ResetFacetIterator
  220. //----------------------------------------------------------------------------------------
  221.  
  222. ODFacet* FW_CPresentationFacetIterator::ResetFacetIterator(Environment* ev, FW_CFrame* frame)
  223. {
  224.     if (frame != NULL)
  225.     {
  226.         fFacetIterator = FW_NEW(FW_CFrameFacetIterator, (ev, frame));
  227.         return fFacetIterator->First(ev);
  228.     }
  229.     
  230.     return NULL;
  231. }
  232.  
  233. //========================================================================================
  234. //    FW_CProxyProxyFrameIterator
  235. //========================================================================================
  236.  
  237. //----------------------------------------------------------------------------------------
  238. //    FW_CProxyProxyFrameIterator::FW_CProxyProxyFrameIterator
  239. //----------------------------------------------------------------------------------------
  240.  
  241. FW_CProxyProxyFrameIterator::FW_CProxyProxyFrameIterator(const FW_MProxy* proxy):
  242.     fIterator(NULL)
  243. {
  244.     fIterator = new FW_COrderedCollectionIterator(proxy->fProxyFrames);
  245.     FW_END_CONSTRUCTOR
  246. }
  247.  
  248. //----------------------------------------------------------------------------------------
  249. //    FW_CProxyProxyFrameIterator::~FW_CProxyProxyFrameIterator
  250. //----------------------------------------------------------------------------------------
  251.  
  252. FW_CProxyProxyFrameIterator::~FW_CProxyProxyFrameIterator()
  253. {
  254.     FW_START_DESTRUCTOR
  255.     delete fIterator;
  256. }
  257.  
  258. //========================================================================================
  259. //    FW_CProxyEmbeddedFrameIterator
  260. //========================================================================================
  261.  
  262. //----------------------------------------------------------------------------------------
  263. //    FW_CProxyEmbeddedFrameIterator::FW_CProxyEmbeddedFrameIterator
  264. //----------------------------------------------------------------------------------------
  265.  
  266. FW_CProxyEmbeddedFrameIterator::FW_CProxyEmbeddedFrameIterator(Environment* ev, const FW_MProxy* proxy) :
  267.     fIterator(proxy),
  268.     fCurrentFrame(NULL)
  269. {
  270.     FW_END_CONSTRUCTOR
  271. }
  272.  
  273. //----------------------------------------------------------------------------------------
  274. //    FW_CProxyEmbeddedFrameIterator::~FW_CProxyEmbeddedFrameIterator
  275. //----------------------------------------------------------------------------------------
  276.  
  277. FW_CProxyEmbeddedFrameIterator::~FW_CProxyEmbeddedFrameIterator()
  278. {
  279.     FW_START_DESTRUCTOR
  280. }
  281.  
  282. //----------------------------------------------------------------------------------------
  283. //    FW_CProxyEmbeddedFrameIterator::First
  284. //----------------------------------------------------------------------------------------
  285.  
  286. ODFrame* FW_CProxyEmbeddedFrameIterator::First(Environment* ev)
  287. {
  288.     FW_CProxyFrame* proxyFrame = fIterator.First();
  289.     fCurrentFrame = PrivNext(ev, proxyFrame);
  290.     return fCurrentFrame;
  291. }
  292.  
  293. //----------------------------------------------------------------------------------------
  294. //    FW_CProxyEmbeddedFrameIterator::Next
  295. //----------------------------------------------------------------------------------------
  296.  
  297. ODFrame* FW_CProxyEmbeddedFrameIterator::Next(Environment* ev)
  298. {
  299.     FW_CProxyFrame* proxyFrame = fIterator.Next();
  300.     fCurrentFrame = PrivNext(ev, proxyFrame);
  301.     return fCurrentFrame;
  302. }
  303.  
  304. //----------------------------------------------------------------------------------------
  305. //    FW_CProxyEmbeddedFrameIterator::Last
  306. //----------------------------------------------------------------------------------------
  307.  
  308. ODFrame* FW_CProxyEmbeddedFrameIterator::Last(Environment* ev)
  309. {
  310.     FW_CProxyFrame* proxyFrame = fIterator.Last();
  311.     fCurrentFrame = PrivPrevious(ev, proxyFrame);
  312.     return fCurrentFrame;
  313. }
  314.  
  315. //----------------------------------------------------------------------------------------
  316. //    FW_CProxyEmbeddedFrameIterator::Previous
  317. //----------------------------------------------------------------------------------------
  318.  
  319. ODFrame* FW_CProxyEmbeddedFrameIterator::Previous(Environment* ev)
  320. {
  321.     FW_CProxyFrame* proxyFrame = fIterator.Previous();
  322.     fCurrentFrame = PrivPrevious(ev, proxyFrame);
  323.     return fCurrentFrame;
  324. }
  325.  
  326. //----------------------------------------------------------------------------------------
  327. //    FW_CProxyEmbeddedFrameIterator::PrivNext
  328. //----------------------------------------------------------------------------------------
  329.  
  330. ODFrame* FW_CProxyEmbeddedFrameIterator::PrivNext(Environment* ev, FW_CProxyFrame* proxyFrame)
  331. {
  332.     while (proxyFrame != NULL)
  333.     {
  334.         if (proxyFrame->IsFrameInMemory(ev))
  335.             return proxyFrame->GetFrame(ev);
  336.         
  337.         proxyFrame = fIterator.Next();
  338.     }
  339.     
  340.     return NULL;
  341. }
  342.  
  343. //----------------------------------------------------------------------------------------
  344. //    FW_CProxyEmbeddedFrameIterator::PrivPrevious
  345. //----------------------------------------------------------------------------------------
  346.  
  347. ODFrame* FW_CProxyEmbeddedFrameIterator::PrivPrevious(Environment* ev, FW_CProxyFrame* proxyFrame)
  348. {
  349.     while (proxyFrame != NULL)
  350.     {
  351.         if (proxyFrame->IsFrameInMemory(ev))
  352.             return proxyFrame->GetFrame(ev);
  353.         
  354.         proxyFrame = fIterator.Previous();
  355.     }
  356.     
  357.     return NULL;
  358. }
  359.  
  360. //========================================================================================
  361. //    FW_CFrameEmbeddedFrameIterator
  362. //========================================================================================
  363.  
  364. //----------------------------------------------------------------------------------------
  365. //    FW_CFrameEmbeddedFrameIterator::FW_CFrameEmbeddedFrameIterator
  366. //----------------------------------------------------------------------------------------
  367.  
  368. FW_CFrameEmbeddedFrameIterator::FW_CFrameEmbeddedFrameIterator(Environment* ev, const FW_CEmbeddingFrame* frame) :
  369.     fIterator(frame),
  370.     fCurrentFrame(NULL)
  371. {
  372.     FW_END_CONSTRUCTOR
  373. }
  374.  
  375. //----------------------------------------------------------------------------------------
  376. //    FW_CFrameEmbeddedFrameIterator::~FW_CFrameEmbeddedFrameIterator
  377. //----------------------------------------------------------------------------------------
  378.  
  379. FW_CFrameEmbeddedFrameIterator::~FW_CFrameEmbeddedFrameIterator()
  380. {
  381.     FW_START_DESTRUCTOR
  382. }
  383.  
  384. //----------------------------------------------------------------------------------------
  385. //    FW_CFrameEmbeddedFrameIterator::First
  386. //----------------------------------------------------------------------------------------
  387.  
  388. ODFrame* FW_CFrameEmbeddedFrameIterator::First(Environment* ev)
  389. {
  390.     FW_CProxyFrame* proxyFrame = fIterator.First();
  391.     fCurrentFrame = PrivNext(ev, proxyFrame);
  392.     return fCurrentFrame;
  393. }
  394.  
  395. //----------------------------------------------------------------------------------------
  396. //    FW_CFrameEmbeddedFrameIterator::Next
  397. //----------------------------------------------------------------------------------------
  398.  
  399. ODFrame* FW_CFrameEmbeddedFrameIterator::Next(Environment* ev)
  400. {
  401.     FW_CProxyFrame* proxyFrame = fIterator.Next();
  402.     fCurrentFrame = PrivNext(ev, proxyFrame);
  403.     return fCurrentFrame;
  404. }
  405.  
  406. //----------------------------------------------------------------------------------------
  407. //    FW_CFrameEmbeddedFrameIterator::Last
  408. //----------------------------------------------------------------------------------------
  409.  
  410. ODFrame* FW_CFrameEmbeddedFrameIterator::Last(Environment* ev)
  411. {
  412.     FW_CProxyFrame* proxyFrame = fIterator.Last();
  413.     fCurrentFrame = PrivPrevious(ev, proxyFrame);
  414.     return fCurrentFrame;
  415. }
  416.  
  417. //----------------------------------------------------------------------------------------
  418. //    FW_CFrameEmbeddedFrameIterator::Previous
  419. //----------------------------------------------------------------------------------------
  420.  
  421. ODFrame* FW_CFrameEmbeddedFrameIterator::Previous(Environment* ev)
  422. {
  423.     FW_CProxyFrame* proxyFrame = fIterator.Previous();
  424.     fCurrentFrame = PrivPrevious(ev, proxyFrame);
  425.     return fCurrentFrame;
  426. }
  427.  
  428. //----------------------------------------------------------------------------------------
  429. //    FW_CFrameEmbeddedFrameIterator::PrivNext
  430. //----------------------------------------------------------------------------------------
  431.  
  432. ODFrame* FW_CFrameEmbeddedFrameIterator::PrivNext(Environment* ev, FW_CProxyFrame* proxyFrame)
  433. {
  434.     while (proxyFrame != NULL)
  435.     {
  436.         if (proxyFrame->IsFrameInMemory(ev))
  437.             return proxyFrame->GetFrame(ev);
  438.         
  439.         proxyFrame = fIterator.Next();
  440.     }
  441.     
  442.     return NULL;
  443. }
  444.  
  445. //----------------------------------------------------------------------------------------
  446. //    FW_CFrameEmbeddedFrameIterator::PrivPrevious
  447. //----------------------------------------------------------------------------------------
  448.  
  449. ODFrame* FW_CFrameEmbeddedFrameIterator::PrivPrevious(Environment* ev, FW_CProxyFrame* proxyFrame)
  450. {
  451.     while (proxyFrame != NULL)
  452.     {
  453.         if (proxyFrame->IsFrameInMemory(ev))
  454.             return proxyFrame->GetFrame(ev);
  455.         
  456.         proxyFrame = fIterator.Previous();
  457.     }
  458.     
  459.     return NULL;
  460. }
  461.  
  462. //========================================================================================
  463. //    FW_CFrameProxyFrameIterator
  464. //========================================================================================
  465.  
  466. //----------------------------------------------------------------------------------------
  467. //    FW_CFrameProxyFrameIterator::FW_CFrameProxyFrameIterator
  468. //----------------------------------------------------------------------------------------
  469.  
  470. FW_CFrameProxyFrameIterator::FW_CFrameProxyFrameIterator(const FW_CEmbeddingFrame* frame) :
  471.     fIterator(NULL)
  472. {
  473.     fIterator = new FW_COrderedCollectionIterator(frame->fProxyFrames);    
  474.     FW_END_CONSTRUCTOR
  475. }
  476.  
  477. //----------------------------------------------------------------------------------------
  478. //    FW_CFrameProxyFrameIterator::~FW_CFrameProxyFrameIterator
  479. //----------------------------------------------------------------------------------------
  480.  
  481. FW_CFrameProxyFrameIterator::~FW_CFrameProxyFrameIterator()
  482. {
  483.     FW_START_DESTRUCTOR
  484.     
  485.     delete fIterator;
  486.     fIterator = NULL;
  487. }
  488.  
  489. //========================================================================================
  490. //    FW_CEmbeddedODFacetsIterator
  491. //========================================================================================
  492.  
  493. //----------------------------------------------------------------------------------------
  494. //    FW_CEmbeddedODFacetsIterator::FW_CEmbeddedODFacetsIterator
  495. //----------------------------------------------------------------------------------------
  496.  
  497. FW_CEmbeddedODFacetsIterator::FW_CEmbeddedODFacetsIterator(Environment* ev,
  498.                                                             const FW_MProxy* proxy, 
  499.                                                             ODFacet* embeddingFacet, 
  500.                                                             ODSiblingOrder siblingOrder) :
  501.     fODFacetIterator(NULL)
  502. {
  503.     fODFacetIterator = embeddingFacet->CreateFacetIterator(ev, kODChildrenOnly, siblingOrder);
  504.     fProxy = proxy;
  505.     fODFacet = NULL;
  506.     
  507.     FW_END_CONSTRUCTOR
  508. }
  509.  
  510. //----------------------------------------------------------------------------------------
  511. //    FW_CEmbeddedODFacetsIterator::~FW_CEmbeddedODFacetsIterator
  512. //----------------------------------------------------------------------------------------
  513.  
  514. FW_CEmbeddedODFacetsIterator::~FW_CEmbeddedODFacetsIterator()
  515. {
  516.     FW_START_DESTRUCTOR
  517.     
  518.     delete fODFacetIterator;
  519. }
  520.  
  521. //----------------------------------------------------------------------------------------
  522. //    FW_CEmbeddedODFacetsIterator::First
  523. //----------------------------------------------------------------------------------------
  524.  
  525. ODFacet* FW_CEmbeddedODFacetsIterator::First(Environment* ev)
  526. {
  527.     fODFacet = fODFacetIterator->First(ev);
  528.     FindNext(ev);
  529.     return fODFacet;
  530. }
  531.  
  532. //----------------------------------------------------------------------------------------
  533. //    FW_CEmbeddedODFacetsIterator::Next
  534. //----------------------------------------------------------------------------------------
  535.  
  536. ODFacet* FW_CEmbeddedODFacetsIterator::Next(Environment* ev)
  537. {
  538.     fODFacet = fODFacetIterator->Next(ev);
  539.     FindNext(ev);
  540.     return fODFacet;
  541. }
  542.  
  543. //----------------------------------------------------------------------------------------
  544. //    FW_CEmbeddedODFacetsIterator::IsNotComplete
  545. //----------------------------------------------------------------------------------------
  546.  
  547. FW_Boolean FW_CEmbeddedODFacetsIterator::IsNotComplete(Environment* ev)
  548. {
  549.     return fODFacet != NULL;
  550. }
  551.  
  552. //----------------------------------------------------------------------------------------
  553. //    FW_CEmbeddedODFacetsIterator::FindNext
  554. //----------------------------------------------------------------------------------------
  555.  
  556. void FW_CEmbeddedODFacetsIterator::FindNext(Environment* ev)
  557. {
  558.     while (fODFacet != NULL)
  559.     {
  560.         FW_CAcquiredODPart aqODPart = fODFacet->GetFrame(ev)->AcquirePart(ev);
  561.         if (aqODPart == fProxy->GetEmbeddedPart(ev))
  562.         {
  563.             return;
  564.         }
  565.         fODFacet = fODFacetIterator->Next(ev);
  566.     } 
  567. }
  568.  
  569. //========================================================================================
  570. //    class FW_CPartPublishIterator
  571. //========================================================================================
  572.  
  573. //---------------------------------------------------------------------------------------
  574. //    FW_CPartPublishIterator::FW_CPartPublishIterator
  575. //---------------------------------------------------------------------------------------
  576.  
  577. FW_CPartPublishIterator::FW_CPartPublishIterator(const FW_CPart* part) :
  578.     fIterator(NULL)
  579. {
  580.     FW_CPrivOrderedCollection* theList = NULL;
  581.     if (part->fLinkManager)
  582.         theList = part->fLinkManager->fPublishLinkList;
  583.  
  584.     fIterator = new FW_COrderedCollectionIterator(theList);
  585.     FW_END_CONSTRUCTOR
  586. }
  587.  
  588. //---------------------------------------------------------------------------------------
  589. //    FW_CPartPublishIterator::~FW_CPartPublishIterator
  590. //---------------------------------------------------------------------------------------
  591.  
  592. FW_CPartPublishIterator::~FW_CPartPublishIterator()
  593. {
  594.     FW_START_DESTRUCTOR
  595.     
  596.     delete fIterator;
  597.     fIterator = NULL;
  598. }
  599.  
  600. //========================================================================================
  601. //    class FW_CPartSubscribeIterator
  602. //========================================================================================
  603.  
  604. //---------------------------------------------------------------------------------------
  605. //    FW_CPartSubscribeIterator::FW_CPartSubscribeIterator
  606. //---------------------------------------------------------------------------------------
  607.  
  608. FW_CPartSubscribeIterator::FW_CPartSubscribeIterator(const FW_CPart* part) :
  609.     fIterator(NULL)
  610. {
  611.     FW_CPrivOrderedCollection* theList = NULL;
  612.     if (part->fLinkManager)
  613.         theList = part->fLinkManager->fSubscribeLinkList;
  614.  
  615.     fIterator = new FW_COrderedCollectionIterator(theList);
  616.     FW_END_CONSTRUCTOR
  617. }
  618.  
  619. //---------------------------------------------------------------------------------------
  620. //    FW_CPartSubscribeIterator::~FW_CPartSubscribeIterator
  621. //---------------------------------------------------------------------------------------
  622.  
  623. FW_CPartSubscribeIterator::~FW_CPartSubscribeIterator()
  624. {
  625.     FW_START_DESTRUCTOR
  626.     
  627.     delete fIterator;
  628.     fIterator = NULL;
  629. }
  630.