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 / Button / Sources / Actions.h < prev    next >
Encoding:
Text File  |  1996-09-17  |  5.8 KB  |  192 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                Actions.h
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef ACTIONS_H
  11. #define ACTIONS_H
  12.  
  13. #ifndef FWRUNTYP_H
  14. #include "FWRunTyp.h"
  15. #endif
  16.  
  17. #ifndef FWARDYNA_H
  18. #include "FWArDyna.h"
  19. #endif
  20.  
  21. // ----- Macintosh Includes -----
  22.  
  23. #if defined(FW_BUILD_MAC) && !defined(__OSA__)
  24. #include <OSA.h>
  25. #endif
  26.  
  27. //========================================================================================
  28. //    Forward declarations
  29. //========================================================================================
  30.  
  31. class ODStorageUnit;
  32. class FW_CKind;
  33. class FW_CReadableStream;
  34. class FW_CWritableStream;
  35.  
  36. //========================================================================================
  37. //    class CAction
  38. //========================================================================================
  39.  
  40. class CAction
  41. {
  42. public:
  43.     FW_DECLARE_CLASS
  44.  
  45. //----------------------------------------------------------------------------------------
  46. //    Initialization/Destruction
  47. //
  48. public:    
  49.     CAction(short actionType);
  50.     virtual ~CAction();
  51.     
  52. //----------------------------------------------------------------------------------------
  53. //    Action protocol
  54. //
  55. public:    
  56.     virtual void Internalize(Environment* ev, ODStorageUnit* storage, FW_CKind* kind) = 0;                
  57.     virtual void Externalize(Environment* ev, ODStorageUnit* storage, FW_CKind* kind) = 0;
  58.     virtual void DoIt() = 0;
  59.  
  60.     short        GetActionType() const
  61.                     {return fActionType;}
  62.                     
  63. //----------------------------------------------------------------------------------------
  64. //    Action protocol
  65. //
  66. protected:
  67.     short        fActionType;
  68. };
  69.  
  70. //========================================================================================
  71. //    class CSoundAction
  72. //========================================================================================
  73.  
  74. class CSoundAction : public CAction
  75. {
  76. public:
  77.     FW_DECLARE_CLASS
  78.  
  79. //----------------------------------------------------------------------------------------
  80. //    Initialization/Destruction
  81. //
  82. public:
  83.     CSoundAction(Environment* ev, ODStorageUnit* storage, FW_CKind* kind);
  84.     CSoundAction(Environment* ev, FW_CReadableStream& stream);
  85.     virtual ~CSoundAction();
  86.     
  87. //----------------------------------------------------------------------------------------
  88. //    Archiving
  89. //
  90. public:
  91.     static void* Read(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  92.     static void Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
  93.  
  94. //----------------------------------------------------------------------------------------
  95. //    Action protocol
  96. //
  97. public:
  98.     virtual void Internalize(Environment* ev, ODStorageUnit* storage, FW_CKind* kind);
  99.     virtual void Externalize(Environment* ev, ODStorageUnit* storage, FW_CKind* kind);
  100.     
  101.     virtual void DoIt();
  102.  
  103. //----------------------------------------------------------------------------------------
  104. //    Private implementation
  105. //
  106. private:
  107.     void InternalizeSoundFile(Environment* ev, ODStorageUnit* storage);
  108.     void InternalizeFromStream(Environment* ev, FW_CReadableStream& stream);
  109.  
  110.     void ExternalizeToStream(Environment* ev, FW_CWritableStream& stream);
  111.  
  112.     Handle fSoundHandle;
  113. };
  114.  
  115. //========================================================================================
  116. //    class CScriptAction
  117. //========================================================================================
  118.  
  119. class CScriptAction : public CAction
  120. {
  121. public:
  122.     FW_DECLARE_CLASS
  123.  
  124. public:    
  125. //----------------------------------------------------------------------------------------
  126. //    Initialization/Destruction
  127. //
  128.     CScriptAction(Environment* ev, ODStorageUnit* storage, FW_CKind* kind);
  129.     CScriptAction(Environment* ev, FW_CReadableStream& stream);
  130.     virtual ~CScriptAction();
  131.         
  132. //----------------------------------------------------------------------------------------
  133. //    Archiving
  134. //
  135. public:
  136.     static void*        Read(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  137.     static void         Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
  138.  
  139. //----------------------------------------------------------------------------------------
  140. //    Action protocol
  141. //
  142. public:
  143.     virtual void Internalize(Environment* ev, ODStorageUnit* storage, FW_CKind* kind);
  144.     virtual void Externalize(Environment* ev, ODStorageUnit* storage, FW_CKind* kind);
  145.     
  146.     virtual void DoIt();
  147.  
  148. //----------------------------------------------------------------------------------------
  149. //    Private implementation
  150. //
  151. private:
  152.     void InternalizeScriptFile(Environment* ev, ODStorageUnit* storageUnit);
  153.     void InternalizeFromStream(Environment* ev, FW_CReadableStream& stream);
  154.  
  155.     void ExternalizeToStream(Environment* ev, FW_CWritableStream& stream);
  156.     
  157.     inline ComponentInstance GetScriptingComponent();
  158.     inline void ReleaseScriptingComponent();
  159.  
  160.     void LoadAndExecuteScript(Handle scriptData);
  161.  
  162.     Handle fScriptHandle;
  163.     
  164.     static ComponentInstance fgComponentInstance;
  165. };
  166.  
  167. #endif
  168.  
  169. //----------------------------------------------------------------------------------------
  170. // CScriptAction::GetScriptingComponent
  171. //----------------------------------------------------------------------------------------
  172.  
  173. inline ComponentInstance CScriptAction::GetScriptingComponent()
  174. {
  175.     if (!fgComponentInstance)
  176.         fgComponentInstance = ::OpenDefaultComponent(kOSAComponentType, kOSAGenericScriptingComponentSubtype);
  177.     
  178.     return fgComponentInstance;
  179. }
  180.  
  181. //----------------------------------------------------------------------------------------
  182. // CScriptAction::ReleaseScriptingComponent
  183. //----------------------------------------------------------------------------------------
  184.  
  185. inline void CScriptAction::ReleaseScriptingComponent()
  186. {
  187.     if (fgComponentInstance)
  188.     {
  189.         CloseComponent(fgComponentInstance);
  190.         fgComponentInstance = NULL;
  191.     }
  192. }