home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / Developer University / DUProjects / Talker / Sources / Content.cpp < prev    next >
Encoding:
Text File  |  1996-08-16  |  4.5 KB  |  144 lines  |  [TEXT/CWIE]

  1. //    Release Version:    $ ODF 1 $
  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 FWUTIL_H
  16. #include "FWUtil.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::Externalize(Environment* ev,
  59.                                  ODStorageUnit* storageUnit,
  60.                                  FW_EStorageKinds storageKind,
  61.                                  FW_CCloneInfo* cloneInfo)
  62. {
  63.     FW_UNUSED(cloneInfo);
  64.     ODType valueType;
  65.     if (storageKind == FW_kPartStorage)                // to file
  66.         valueType = fTalkerPart->GetPartKind(ev);
  67.     FW_PStorageUnitSink suSink(ev, storageUnit, kODPropContents, valueType);
  68.     FW_CWritableStream stream(suSink);
  69.     stream << fTextBytes;
  70.     stream.Write(fTextBuffer, fTextBytes);
  71. }
  72.  
  73. //----------------------------------------------------------------------------------------
  74. FW_Boolean 
  75. CTalkerContent::Internalize(Environment* ev,
  76.                              ODStorageUnit* sourceSU, 
  77.                              FW_EStorageKinds storageKind,
  78.                              FW_CCloneInfo* cloneInfo)
  79. {
  80.     FW_UNUSED(cloneInfo);
  81.     FW_Boolean internalized = false;
  82.     if (FW_SUExistsThenFocus(ev, sourceSU, kODPropContents, fTalkerPart->GetPartKind(ev)))
  83.         internalized = this->MyInternalizePartKind(ev, sourceSU);
  84.     else if (FW_SUExistsThenFocus(ev, sourceSU, kODPropContents, FW_CPart::gMacTEXTDataType))    // 'TEXT'
  85.         internalized = this->MyInternalizeTextData(ev, sourceSU);
  86.     if (internalized && storageKind != FW_kPartStorage)
  87.         fTalkerPart->Changed(ev);
  88.     return internalized;
  89. }
  90.  
  91. //----------------------------------------------------------------------------------------
  92. FW_Boolean 
  93. CTalkerContent::MyInternalizePartKind(Environment* ev, ODStorageUnit* sourceSU)
  94. {
  95.     FW_Boolean internalized = false;
  96.     ODType valueType = fTalkerPart->GetPartKind(ev);
  97.     if (sourceSU->GetSize(ev) >= 0) {
  98.         FW_PStorageUnitSink suSink(ev, sourceSU, kODPropContents, valueType);
  99.         FW_CReadableStream stream(suSink);
  100.         stream >> fTextBytes;
  101.         FW_CMemoryManager::FreeBlock(fTextBuffer);
  102.         fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);    
  103.         stream.Read(fTextBuffer, fTextBytes);
  104.         internalized = true;
  105.         }
  106.     return internalized;
  107. }
  108.  
  109. //----------------------------------------------------------------------------------------
  110. FW_Boolean 
  111. CTalkerContent::MyInternalizeTextData(Environment* ev, ODStorageUnit* sourceSU)
  112. {
  113.     FW_Boolean internalized = false;
  114.     ODULong bytes = sourceSU->GetSize(ev);
  115.     if (bytes >= 0) {
  116.         ODType valueType = FW_CPart::gMacTEXTDataType;
  117.         if (FW_SUExistsThenFocus(ev, sourceSU, kODPropContents, valueType)) {
  118.             FW_PStorageUnitSink suSink(ev, sourceSU, kODPropContents, valueType);
  119.             FW_CReadableStream stream(suSink);
  120.             fTextBytes = bytes;
  121.             FW_CMemoryManager::FreeBlock(fTextBuffer);
  122.             fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);    
  123.             stream.Read(fTextBuffer, fTextBytes);
  124.             internalized = true;
  125.             this->MySayText(ev);
  126.             }
  127.         }
  128.     return internalized;
  129. }
  130.  
  131. //----------------------------------------------------------------------------------------
  132. void 
  133. CTalkerContent::MySayText(Environment* ev)
  134. {    
  135.     fSOMTalker->SayText(ev, (char*)fTextBuffer, fTextBytes, !kWaitUntilDone);    // say it!
  136. }
  137.  
  138. //----------------------------------------------------------------------------------------
  139. DevUniv_STalker*
  140. CTalkerContent::MyGetTalker()
  141. {
  142.     return fSOMTalker;
  143. }
  144.