- UInt16 items;
- OSErr result;
- ItemReference theItem;
- FlavorType theType;
- FlavorFlags theFlags;
- UInt16 flavors;
- wxString filenamesPassed;
-
- CountDragItems( (DragReference)m_currentDrag, &items );
- for (UInt16 index = 1; index <= items; ++index)
- {
- flavors = 0;
- GetDragItemReferenceNumber( (DragReference)m_currentDrag, index, &theItem );
- CountDragItemFlavors( (DragReference)m_currentDrag, theItem, &flavors );
- wxDataFormat preferredFormat = m_dataObject->GetPreferredFormat( wxDataObject::Set );
- bool hasPreferredFormat = false;
-
- for (UInt16 flavor = 1; flavor <= flavors; ++flavor)
- {
- result = GetFlavorType( (DragReference)m_currentDrag, theItem, flavor, &theType );
- wxDataFormat format( theType );
- if (preferredFormat == format)
- {
- hasPreferredFormat = true;
- break;
- }
- }
-
- for (UInt16 flavor = 1; flavor <= flavors; ++flavor)
- {
- result = GetFlavorType( (DragReference)m_currentDrag, theItem, flavor, &theType );
- wxDataFormat format( theType );
- if ((hasPreferredFormat && format == preferredFormat)
- || (!hasPreferredFormat && m_dataObject->IsSupportedFormat( format )))
- {
- result = GetFlavorFlags( (DragReference)m_currentDrag, theItem, theType, &theFlags );
- if (result == noErr)
- {
- Size dataSize;
- Ptr theData;
-
- GetFlavorDataSize( (DragReference)m_currentDrag, theItem, theType, &dataSize );
- if (theType == kScrapFlavorTypeText)
- {
- // this increment is only valid for allocating:
- // on the next GetFlavorData call it is reset again to the original value
- dataSize++;
- }
- else if (theType == kScrapFlavorTypeUnicode)
- {
- // this increment is only valid for allocating:
- // on the next GetFlavorData call it is reset again to the original value
- dataSize++;
- dataSize++;
- }
-
- if (dataSize > 0)
- theData = new char[dataSize];
- else
- theData = NULL;
-
- GetFlavorData( (DragReference)m_currentDrag, theItem, theType, (void*)theData, &dataSize, 0L );
- switch (theType)
- {
- case kScrapFlavorTypeText:
- theData[dataSize] = 0;
- m_dataObject->SetData( wxDataFormat(wxDF_TEXT), dataSize, theData );
- break;
-
-#if wxUSE_UNICODE
- case kScrapFlavorTypeUnicode:
- theData[dataSize + 0] =
- theData[dataSize + 1] = 0;
- m_dataObject->SetData( wxDataFormat(wxDF_UNICODETEXT), dataSize, theData );
- break;
-#endif
-
- case kDragFlavorTypeHFS:
- if (theData != NULL)
- {
- HFSFlavor* theFile = (HFSFlavor*)theData;
-#ifndef __LP64__
- wxString name = wxMacFSSpec2MacFilename( &theFile->fileSpec );
-
- if (!name.empty())
- filenamesPassed += name + wxT("\n");
-#endif
- }
- break;
-
- default:
- m_dataObject->SetData( format, dataSize, theData );
- break;
- }
-
- delete [] theData;
- }
- break;
- }
- }
- }