// $Revision: 1.7 $ // Copyright (C) 1995 Taligent, Inc. All rights reserved. #ifndef TaligentSamples_SINGLEDRAGANDDROPITEM #include "SingleDragAndDropItem.h" #endif #ifndef Taligent_ASSERTIONS #include #endif #ifndef Taligent_SCRAPITEM #include #endif MCollectibleDefinitionsMacro(TSingleDragAndDropItem, kOriginalVersion); TSingleDragAndDropItem::TSingleDragAndDropItem() : TDragAndDropItem(), fScrapItem(NIL) { } TSingleDragAndDropItem::TSingleDragAndDropItem(const TViewHandle& view, TScrapItem* itemToAdopt) : TDragAndDropItem(view), fScrapItem(itemToAdopt) { } TSingleDragAndDropItem::TSingleDragAndDropItem(const TSingleDragAndDropItem& source) : TDragAndDropItem(source), fScrapItem(::CopyPointer(source.fScrapItem, TAllocationHeap(this))) { } TSingleDragAndDropItem::~TSingleDragAndDropItem() { delete fScrapItem; } TSingleDragAndDropItem& TSingleDragAndDropItem::operator=(const TSingleDragAndDropItem& source) { if (&source != this) { TDragAndDropItem::operator=(source); delete fScrapItem; fScrapItem = NIL; fScrapItem = ::CopyPointer(source.fScrapItem, TAllocationHeap(this)); } return *this; } TStream& TSingleDragAndDropItem::operator>>=(TStream& toStream) const { ::WriteVersion(toStream, kOriginalVersion); TDragAndDropItem::operator>>=(toStream); ::Flatten(fScrapItem, toStream); return toStream; } TStream& TSingleDragAndDropItem::operator<<=(TStream& fromStream) { ::ReadVersion(fromStream, kOriginalVersion, kOriginalVersion); TDragAndDropItem::operator<<=(fromStream); delete fScrapItem; fScrapItem = NIL; ::Resurrect(fScrapItem, fromStream); return fromStream; } void TSingleDragAndDropItem::CopyAvailableTypes(TSequenceOf& result, TMemoryHeap* heap) const { Assertion(fScrapItem != NIL); fScrapItem->CopyAvailableTypes(result, heap); } TScrapItem* TSingleDragAndDropItem::FindItemMatchingDescription(const TTypeDescription& description) { Assertion(fScrapItem != NIL); TDequeOf types(new TOperatorComparator, NIL); fScrapItem->CopyAvailableTypes(types); return types.Member(description) ? fScrapItem : NIL; }