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 / Developer University / DU Projects / Talker / Sources / Content.cpp < prev    next >
Encoding:
Text File  |  1996-09-09  |  4.3 KB  |  145 lines  |  [TEXT/CWIE]

  1. //    Release Version:    $ ODF 2 $
  2. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  3.  
  4. //========================================================================================
  5. #include "Talker.hpp"
  6.  
  7. #ifndef CONTENT_H
  8. #include "Content.h"
  9. #endif
  10.  
  11. #ifndef PART_H
  12. #include "Part.h"
  13. #endif
  14.  
  15. #ifndef FWKIND_H
  16. #include "FWKind.h"
  17. #endif
  18.  
  19. #ifndef SOM_DevUniv_STalker_xh
  20. #include "STalker.xh"            // for STalker
  21. #endif 
  22.  
  23. //========================================================================================
  24. #ifdef FW_BUILD_MAC
  25. #pragma segment Talker
  26. #endif
  27.  
  28. //========================================================================================
  29. const FW_Boolean kWaitUntilDone = TRUE;
  30.  
  31. //========================================================================================
  32. FW_DEFINE_AUTO(CTalkerContent)
  33.  
  34. //----------------------------------------------------------------------------------------
  35. CTalkerContent::CTalkerContent(Environment* ev, CTalkerPart* part) :
  36.     FW_CContent(ev, part),
  37.     fTextBuffer(NULL),
  38.     fTextBytes(0),
  39.     fTalkerPart(part),
  40.     fSOMTalker(NULL)
  41. {
  42.     fSOMTalker = new DevUniv_STalker;    
  43.     fSOMTalker->SayString(ev, "ODF", !kWaitUntilDone);        // say it!
  44.     fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);
  45.     FW_END_CONSTRUCTOR
  46. }
  47.  
  48. //----------------------------------------------------------------------------------------
  49. CTalkerContent::~CTalkerContent()
  50. {
  51.     FW_START_DESTRUCTOR
  52.     delete fSOMTalker;
  53.     FW_CMemoryManager::FreeBlock(fTextBuffer);
  54. }
  55.  
  56. //----------------------------------------------------------------------------------------
  57. void 
  58. CTalkerContent::ExternalizeKind(Environment* ev,
  59.                                 ODStorageUnit* storageUnit,
  60.                                 FW_CKind* kind,
  61.                                 FW_StorageKinds storageKind,
  62.                                 FW_CPromise* promise,
  63.                                 FW_CCloneInfo* cloneInfo)
  64. {
  65.     FW_UNUSED(cloneInfo);
  66.     FW_UNUSED(storageKind);
  67.     FW_UNUSED(promise);
  68.  
  69.     if (kind->IsPartKind(ev)) 
  70.     {
  71.         FW_PStorageUnitSink suSink(ev, storageUnit, kODPropContents, kind->GetType(ev));
  72.         FW_CWritableStream stream(suSink);
  73.         stream << fTextBytes;
  74.         stream.Write(fTextBuffer, fTextBytes);
  75.     }
  76. }
  77.  
  78. //----------------------------------------------------------------------------------------
  79. FW_Boolean 
  80. CTalkerContent::InternalizeKind(Environment* ev,
  81.                                 ODStorageUnit* sourceSU, 
  82.                                 FW_CKind* kind,
  83.                                 FW_StorageKinds storageKind,
  84.                                 FW_CCloneInfo* cloneInfo)
  85. {
  86.     FW_UNUSED(cloneInfo);
  87.     FW_UNUSED(storageKind);
  88.     FW_Boolean internalized = false;
  89.     if (kind->IsPartKind(ev))
  90.         internalized = this->MyInternalizePartKind(ev, sourceSU, kind->GetType(ev));
  91.     else if (kind->IsEqual(ev, 'TEXT', kODPlatformDataType))
  92.         internalized = this->MyInternalizeTextData(ev, sourceSU, kind->GetType(ev));
  93.     return internalized;
  94. }
  95.  
  96. //----------------------------------------------------------------------------------------
  97. FW_Boolean 
  98. CTalkerContent::MyInternalizePartKind(Environment* ev, ODStorageUnit* sourceSU, ODType valueType)
  99. {
  100.     FW_Boolean internalized = false;
  101.     FW_PStorageUnitSink suSink(ev, sourceSU, kODPropContents, valueType);
  102.     if (suSink->GetReadableBytes(ev) != 0) {
  103.         FW_CReadableStream stream(suSink);
  104.         stream >> fTextBytes;
  105.         FW_CMemoryManager::FreeBlock(fTextBuffer);
  106.         fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);    
  107.         stream.Read(fTextBuffer, fTextBytes);
  108.         internalized = true;
  109.         }
  110.     return internalized;
  111. }
  112.  
  113. //----------------------------------------------------------------------------------------
  114. FW_Boolean 
  115. CTalkerContent::MyInternalizeTextData(Environment* ev, ODStorageUnit* sourceSU, ODType valueType)
  116. {
  117.     FW_Boolean internalized = false;
  118.     FW_PStorageUnitSink suSink(ev, sourceSU, kODPropContents, valueType);
  119.     ODULong bytes = suSink->GetReadableBytes(ev);
  120.     if (bytes >= 0) {
  121.         FW_CReadableStream stream(suSink);
  122.         fTextBytes = bytes;
  123.         FW_CMemoryManager::FreeBlock(fTextBuffer);
  124.         fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);    
  125.         stream.Read(fTextBuffer, fTextBytes);
  126.         internalized = true;
  127.         this->MySayText(ev);
  128.         }
  129.     return internalized;
  130. }
  131.  
  132. //----------------------------------------------------------------------------------------
  133. void 
  134. CTalkerContent::MySayText(Environment* ev)
  135. {    
  136.     fSOMTalker->SayText(ev, (char*)fTextBuffer, fTextBytes, !kWaitUntilDone);    // say it!
  137. }
  138.  
  139. //----------------------------------------------------------------------------------------
  140. DevUniv_STalker*
  141. CTalkerContent::MyGetTalker()
  142. {
  143.     return fSOMTalker;
  144. }
  145.