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 / FWIdle.cpp < prev    next >
Encoding:
Text File  |  1996-09-17  |  4.5 KB  |  175 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWIdle.cpp
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFrameW.hpp"
  11.  
  12. #ifndef FWIDLE_H
  13. #include "FWIdle.h"
  14. #endif
  15.  
  16. #ifndef FWPART_H
  17. #include "FWPart.h"
  18. #endif
  19.  
  20. #ifndef FWFRAME_H
  21. #include "FWFrame.h"
  22. #endif
  23.  
  24. #ifndef FWPRIDEB_H
  25. #include "FWPriDeb.h"
  26. #endif
  27.  
  28. #ifndef FWSESION_H
  29. #include "FWSesion.h"
  30. #endif
  31.  
  32. #ifndef FWSOMENV_H
  33. #include "FWSOMEnv.h"
  34. #endif
  35.  
  36. #ifndef SOM_ODDispatcher_xh
  37. #include "Disptch.xh"
  38. #endif
  39.  
  40. //========================================================================================
  41. // RunTime Info
  42. //========================================================================================
  43.  
  44. #ifdef FW_BUILD_MAC
  45. #pragma segment fwpart2
  46. #endif
  47.  
  48. FW_DEFINE_AUTO(FW_CIdler)
  49.  
  50. //========================================================================================
  51. // class FW_CIdler
  52. //========================================================================================
  53.  
  54. //----------------------------------------------------------------------------------------
  55. //    FW_CIdler::FW_CIdler
  56. //----------------------------------------------------------------------------------------
  57.  
  58. FW_CIdler::FW_CIdler(FW_CPart* part, ODIdleFrequency frequency) :
  59.     fPart(part),
  60.     fFrame(NULL),
  61.     fRegistered(FALSE),
  62.     fFrequency(frequency)
  63. {
  64. }
  65.  
  66. //----------------------------------------------------------------------------------------
  67. //    FW_CIdler::FW_CIdler
  68. //----------------------------------------------------------------------------------------
  69.  
  70. FW_CIdler::FW_CIdler(FW_CFrame* frame, ODIdleFrequency frequency) :
  71.     fPart(frame->fPart),
  72.     fFrame(frame),
  73.     fRegistered(FALSE),
  74.     fFrequency(frequency)
  75. {
  76. }
  77.  
  78. //----------------------------------------------------------------------------------------
  79. //    FW_CIdler::~FW_CIdler
  80. //----------------------------------------------------------------------------------------
  81.  
  82. FW_CIdler::~FW_CIdler()
  83. {
  84.     if (fRegistered)
  85.     {
  86.         FW_SOMEnvironment ev;
  87.         UnregisterIdle(ev);
  88.     }
  89. }
  90.  
  91. //----------------------------------------------------------------------------------------
  92. //    FW_CIdler::SetIdleFrequency
  93. //----------------------------------------------------------------------------------------
  94.  
  95. void FW_CIdler::SetIdleFrequency(Environment *ev, ODIdleFrequency frequency)
  96. {
  97.     fFrequency = frequency;
  98.     
  99.     if (fRegistered)
  100.         FW_CSession::GetDispatcher(ev)->SetIdleFrequency(ev, fPart->GetODPart(ev), PrivGetRegisteredFrame(ev), fFrequency);
  101. }
  102.  
  103. //----------------------------------------------------------------------------------------
  104. //    FW_CIdler::PrivGetRegisteredFrame
  105. //----------------------------------------------------------------------------------------
  106.  
  107. ODFrame* FW_CIdler::PrivGetRegisteredFrame(Environment *ev) const
  108. {
  109.     return fFrame != NULL ? fFrame->GetODFrame(ev) : NULL;
  110. }
  111.  
  112. //----------------------------------------------------------------------------------------
  113. //    FW_CIdler::RegisterIdle
  114. //----------------------------------------------------------------------------------------
  115.  
  116. void FW_CIdler::RegisterIdle(Environment *ev, FW_Boolean state)
  117. {
  118.     if (state)
  119.         RegisterIdle(ev);
  120.     else
  121.         UnregisterIdle(ev);
  122. }
  123.  
  124. //----------------------------------------------------------------------------------------
  125. //    FW_CIdler::RegisterIdle
  126. //----------------------------------------------------------------------------------------
  127.  
  128. void FW_CIdler::RegisterIdle(Environment *ev)
  129. {
  130.     if (!fRegistered)
  131.     {
  132.         if (fFrame)
  133.         {
  134.             if (fFrame->fIdler != NULL)
  135.                 fFrame->fIdler->UnregisterIdle(ev);
  136.         }
  137.         else
  138.         {
  139.             if (fPart->fIdler != NULL)
  140.                 fPart->fIdler->UnregisterIdle(ev);
  141.         }
  142.  
  143.         FW_CSession::GetDispatcher(ev)->RegisterIdle(ev, fPart->GetODPart(ev), PrivGetRegisteredFrame(ev), fFrequency);
  144.         fRegistered = TRUE;
  145.         fPart->PrivCountIdleRegistering(TRUE);
  146.         
  147.         if (fFrame)
  148.             fFrame->fIdler = this;
  149.         else
  150.             fPart->fIdler = this;
  151.     }
  152. }
  153.  
  154. //----------------------------------------------------------------------------------------
  155. //    FW_CIdler::UnregisterIdle
  156. //----------------------------------------------------------------------------------------
  157.  
  158. void FW_CIdler::UnregisterIdle(Environment *ev)
  159. {
  160.     if (fRegistered)
  161.     {
  162.         FW_ASSERT(fFrame ? fFrame->fIdler != NULL : fPart->fIdler != NULL);
  163.  
  164.         fRegistered = FALSE;
  165.         fPart->PrivCountIdleRegistering(FALSE);
  166.         
  167.         if (fFrame)
  168.             fFrame->fIdler = NULL;
  169.         else
  170.             fPart->fIdler = NULL;        
  171.  
  172.         FW_CSession::GetDispatcher(ev)->UnregisterIdle(ev, fPart->GetODPart(ev), PrivGetRegisteredFrame(ev));
  173.     }
  174. }
  175.