// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
-// RCS-ID: $Id: dnd.cpp 61724 2009-08-21 10:41:26Z VZ $
+// RCS-ID: $Id$
// Copyright: (c) 1998 Stefan Csomor
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
wxDataFormat wxDropTarget::GetMatchingPair()
{
- wxFAIL_MSG("wxDropTarget::GetMatchingPair() not implemented in src/osx/carbon/dnd.cpp");
+ wxFAIL_MSG("wxDropTarget::GetMatchingPair() not implemented in src/osx/dnd_osx.cpp");
return wxDF_INVALID;
}
return GetData() ? def : wxDragNone;
}
+bool wxDropTarget::CurrentDragHasSupportedFormat()
+{
+ bool supported = false;
+ if (m_dataObject == NULL)
+ return false;
+
+ if ( wxDropSource* currentSource = wxDropSource::GetCurrentDropSource() )
+ {
+ wxDataObject* data = currentSource->GetDataObject();
+
+ if ( data )
+ {
+ size_t formatcount = data->GetFormatCount();
+ wxDataFormat *array = new wxDataFormat[formatcount];
+ data->GetAllFormats( array );
+ for (size_t i = 0; !supported && i < formatcount; i++)
+ {
+ wxDataFormat format = array[i];
+ if ( m_dataObject->IsSupported( format, wxDataObject::Set ) )
+ {
+ supported = true;
+ break;
+ }
+ }
+
+ delete [] array;
+ }
+ }
+
+ if ( !supported )
+ {
+ supported = m_dataObject->HasDataInPasteboard( m_currentDragPasteboard );
+ }
+
+ return supported;
+}
+
+bool wxDropTarget::GetData()
+{
+ if (m_dataObject == NULL)
+ return false;
+
+ if ( !CurrentDragHasSupportedFormat() )
+ return false;
+
+ bool transferred = false;
+ if ( wxDropSource* currentSource = wxDropSource::GetCurrentDropSource() )
+ {
+ wxDataObject* data = currentSource->GetDataObject();
+
+ if (data != NULL)
+ {
+ size_t formatcount = data->GetFormatCount();
+ wxDataFormat *array = new wxDataFormat[formatcount];
+ data->GetAllFormats( array );
+ for (size_t i = 0; !transferred && i < formatcount; i++)
+ {
+ wxDataFormat format = array[i];
+ if ( m_dataObject->IsSupported( format, wxDataObject::Set ) )
+ {
+ int size = data->GetDataSize( format );
+ transferred = true;
+
+ if (size == 0)
+ {
+ m_dataObject->SetData( format, 0, 0 );
+ }
+ else
+ {
+ char *d = new char[size];
+ data->GetDataHere( format, (void*)d );
+ m_dataObject->SetData( format, size, d );
+ delete [] d;
+ }
+ }
+ }
+
+ delete [] array;
+ }
+ }
+
+ if ( !transferred )
+ {
+ transferred = m_dataObject->GetFromPasteboard( m_currentDragPasteboard );
+ }
+
+ return transferred;
+}
+
//-------------------------------------------------------------------------
// wxDropSource
//-------------------------------------------------------------------------
bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
{
const wxCursor& cursor = GetCursor(effect);
- bool result = cursor.Ok();
+ bool result = cursor.IsOk();
if ( result )
cursor.MacInstall();