home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-07 | 4.5 KB | 144 lines | [TEXT/CWIE] |
- // Release Version: $ ODF 1 $
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
-
- //========================================================================================
- #include "Talker.hpp"
-
- #ifndef CONTENT_H
- #include "Content.h"
- #endif
-
- #ifndef PART_H
- #include "Part.h"
- #endif
-
- #ifndef FWUTIL_H
- #include "FWUtil.h"
- #endif
-
- #ifndef SOM_DevUniv_STalker_xh
- #include "STalker.xh" // for STalker
- #endif
-
- //========================================================================================
- #ifdef FW_BUILD_MAC
- #pragma segment Talker
- #endif
-
- //========================================================================================
- const FW_Boolean kWaitUntilDone = TRUE;
-
- //========================================================================================
- FW_DEFINE_AUTO(CTalkerContent)
-
- //----------------------------------------------------------------------------------------
- CTalkerContent::CTalkerContent(Environment* ev, CTalkerPart* part) :
- FW_CContent(ev, part),
- fTextBuffer(NULL),
- fTextBytes(0),
- fTalkerPart(part),
- fSOMTalker(NULL)
- {
- fSOMTalker = new DevUniv_STalker;
- fSOMTalker->SayString(ev, "ODF", !kWaitUntilDone); // say it!
- fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);
- FW_END_CONSTRUCTOR
- }
-
- //----------------------------------------------------------------------------------------
- CTalkerContent::~CTalkerContent()
- {
- FW_START_DESTRUCTOR
- delete fSOMTalker;
- FW_CMemoryManager::FreeBlock(fTextBuffer);
- }
-
- //----------------------------------------------------------------------------------------
- void
- CTalkerContent::Externalize(Environment* ev,
- ODStorageUnit* storageUnit,
- FW_EStorageKinds storageKind,
- FW_CCloneInfo* cloneInfo)
- {
- FW_UNUSED(cloneInfo);
- ODType valueType;
- if (storageKind == FW_kPartStorage) // to file
- valueType = fTalkerPart->GetPartKind(ev);
- FW_PStorageUnitSink suSink(ev, storageUnit, kODPropContents, valueType);
- FW_CWritableStream stream(suSink);
- stream << fTextBytes;
- stream.Write(fTextBuffer, fTextBytes);
- }
-
- //----------------------------------------------------------------------------------------
- FW_Boolean
- CTalkerContent::Internalize(Environment* ev,
- ODStorageUnit* sourceSU,
- FW_EStorageKinds storageKind,
- FW_CCloneInfo* cloneInfo)
- {
- FW_UNUSED(cloneInfo);
- FW_Boolean internalized = false;
- if (FW_SUExistsThenFocus(ev, sourceSU, kODPropContents, fTalkerPart->GetPartKind(ev)))
- internalized = this->MyInternalizePartKind(ev, sourceSU);
- else if (FW_SUExistsThenFocus(ev, sourceSU, kODPropContents, FW_CPart::gMacTEXTDataType)) // 'TEXT'
- internalized = this->MyInternalizeTextData(ev, sourceSU);
- if (internalized && storageKind != FW_kPartStorage)
- fTalkerPart->Changed(ev);
- return internalized;
- }
-
- //----------------------------------------------------------------------------------------
- FW_Boolean
- CTalkerContent::MyInternalizePartKind(Environment* ev, ODStorageUnit* sourceSU)
- {
- FW_Boolean internalized = false;
- ODType valueType = fTalkerPart->GetPartKind(ev);
- if (sourceSU->GetSize(ev) >= 0) {
- FW_PStorageUnitSink suSink(ev, sourceSU, kODPropContents, valueType);
- FW_CReadableStream stream(suSink);
- stream >> fTextBytes;
- FW_CMemoryManager::FreeBlock(fTextBuffer);
- fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);
- stream.Read(fTextBuffer, fTextBytes);
- internalized = true;
- }
- return internalized;
- }
-
- //----------------------------------------------------------------------------------------
- FW_Boolean
- CTalkerContent::MyInternalizeTextData(Environment* ev, ODStorageUnit* sourceSU)
- {
- FW_Boolean internalized = false;
- ODULong bytes = sourceSU->GetSize(ev);
- if (bytes >= 0) {
- ODType valueType = FW_CPart::gMacTEXTDataType;
- if (FW_SUExistsThenFocus(ev, sourceSU, kODPropContents, valueType)) {
- FW_PStorageUnitSink suSink(ev, sourceSU, kODPropContents, valueType);
- FW_CReadableStream stream(suSink);
- fTextBytes = bytes;
- FW_CMemoryManager::FreeBlock(fTextBuffer);
- fTextBuffer = FW_CMemoryManager::AllocateBlock(fTextBytes);
- stream.Read(fTextBuffer, fTextBytes);
- internalized = true;
- this->MySayText(ev);
- }
- }
- return internalized;
- }
-
- //----------------------------------------------------------------------------------------
- void
- CTalkerContent::MySayText(Environment* ev)
- {
- fSOMTalker->SayText(ev, (char*)fTextBuffer, fTextBytes, !kWaitUntilDone); // say it!
- }
-
- //----------------------------------------------------------------------------------------
- DevUniv_STalker*
- CTalkerContent::MyGetTalker()
- {
- return fSOMTalker;
- }
-