#pragma implementation "dnd.h"
#endif
+#include "wx/defs.h"
+
+#if wxUSE_DRAG_AND_DROP
+
#include "wx/dnd.h"
#include "wx/window.h"
+#include "wx/toplevel.h"
#include "wx/app.h"
#include "wx/gdicmn.h"
-
-#if wxUSE_DRAG_AND_DROP
+#include "wx/mac/private.h"
// ----------------------------------------------------------------------------
// global
if ( data )
{
- int formatcount = data->GetFormatCount() ;
+ size_t formatcount = data->GetFormatCount() ;
wxDataFormat *array = new wxDataFormat[ formatcount ];
data->GetAllFormats( array );
for (size_t i = 0; !supported && i < formatcount ; i++)
{
UInt16 items ;
OSErr result;
- CountDragItems(m_currentDrag, &items);
+ CountDragItems((DragReference)m_currentDrag, &items);
for (UInt16 index = 1; index <= items && supported == false ; ++index)
{
ItemReference theItem;
FlavorType theType ;
UInt16 flavors = 0 ;
- GetDragItemReferenceNumber(m_currentDrag, index, &theItem);
- CountDragItemFlavors( m_currentDrag, theItem , &flavors ) ;
+ GetDragItemReferenceNumber((DragReference)m_currentDrag, index, &theItem);
+ CountDragItemFlavors( (DragReference)m_currentDrag, theItem , &flavors ) ;
for ( UInt16 flavor = 1 ; flavor <= flavors ; ++flavor )
{
- result = GetFlavorType(m_currentDrag, theItem, flavor , &theType);
+ result = GetFlavorType((DragReference)m_currentDrag, theItem, flavor , &theType);
if ( m_dataObject->IsSupportedFormat( wxDataFormat( theType ) ) )
{
supported = true ;
if ( data )
{
- int formatcount = data->GetFormatCount() ;
+ size_t formatcount = data->GetFormatCount() ;
wxDataFormat *array = new wxDataFormat[ formatcount ];
data->GetAllFormats( array );
for (size_t i = 0; !transferred && i < formatcount ; i++)
{
UInt16 items ;
OSErr result;
- CountDragItems(m_currentDrag, &items);
+ bool firstFileAdded = false ;
+ CountDragItems((DragReference)m_currentDrag, &items);
for (UInt16 index = 1; index <= items; ++index)
{
ItemReference theItem;
FlavorType theType ;
UInt16 flavors = 0 ;
- GetDragItemReferenceNumber(m_currentDrag, index, &theItem);
- CountDragItemFlavors( m_currentDrag, theItem , &flavors ) ;
+ GetDragItemReferenceNumber((DragReference)m_currentDrag, index, &theItem);
+ CountDragItemFlavors( (DragReference)m_currentDrag, theItem , &flavors ) ;
for ( UInt16 flavor = 1 ; flavor <= flavors ; ++flavor )
{
- result = GetFlavorType(m_currentDrag, theItem, flavor , &theType);
+ result = GetFlavorType((DragReference)m_currentDrag, theItem, flavor , &theType);
wxDataFormat format(theType) ;
if ( m_dataObject->IsSupportedFormat( format ) )
{
FlavorFlags theFlags;
- result = GetFlavorFlags(m_currentDrag, theItem, theType, &theFlags);
+ result = GetFlavorFlags((DragReference)m_currentDrag, theItem, theType, &theFlags);
if (result == noErr)
{
Size dataSize ;
Ptr theData ;
- GetFlavorDataSize(m_currentDrag, theItem, theType, &dataSize);
- if ( theType == 'TEXT' )
- dataSize++ ;
+ GetFlavorDataSize((DragReference)m_currentDrag, theItem, theType, &dataSize);
+ if ( theType == 'TEXT' )
+ {
+ // this increment is only valid for allocating, on the next GetFlavorData
+ // call it is reset again to the original value
+ dataSize++ ;
+ }
theData = new char[dataSize];
- GetFlavorData(m_currentDrag, theItem, theType, (void*) theData, &dataSize, 0L);
+ GetFlavorData((DragReference)m_currentDrag, theItem, theType, (void*) theData, &dataSize, 0L);
if( theType == 'TEXT' )
{
theData[dataSize]=0 ;
if ( wxApp::s_macDefaultEncodingIsPC )
{
- wxMacConvertToPC((char*)theData) ;
+ wxMacConvertToPC((char*)theData,(char*)theData,dataSize) ;
}
m_dataObject->SetData( format, dataSize, theData );
}
{
HFSFlavor* theFile = (HFSFlavor*) theData ;
wxString name = wxMacFSSpec2MacFilename( &theFile->fileSpec ) ;
- m_dataObject->SetData( format , name.Length() + 1, name ) ;
+ if ( firstFileAdded )
+ ((wxFileDataObject*)m_dataObject)->AddFile( name ) ;
+ else
+ {
+ ((wxFileDataObject*)m_dataObject)->SetData( 0 , name.c_str() ) ;
+ firstFileAdded = true ;
+ }
}
else
{
}
-wxDragResult wxDropSource::DoDragDrop( bool allowMove )
+wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
{
wxASSERT_MSG( m_data, wxT("Drop source: no data") );
OSErr result;
DragReference theDrag;
RgnHandle dragRegion;
- if (result = NewDrag(&theDrag))
+ if ((result = NewDrag(&theDrag)))
{
return wxDragNone ;
}
wxDataFormat *formats = new wxDataFormat[formatCount] ;
m_data->GetAllFormats( formats ) ;
ItemReference theItem = 1 ;
- for ( int i = 0 ; i < formatCount ; ++i )
+ for ( size_t i = 0 ; i < formatCount ; ++i )
{
size_t dataSize = m_data->GetDataSize( formats[i] ) ;
Ptr dataPtr = new char[dataSize] ;
dataSize-- ;
if ( wxApp::s_macDefaultEncodingIsPC )
{
- wxMacConvertFromPC((char*)dataPtr) ;
+ wxMacConvertFromPC((char*)dataPtr,(char*)dataPtr,dataSize) ;
}
AddDragItemFlavor(theDrag, theItem, type , dataPtr, dataSize, 0);
}
dragRegion = NewRgn();
RgnHandle tempRgn = NewRgn() ;
- EventRecord* ev = wxTheApp->MacGetCurrentEvent() ;
+ EventRecord* ev = NULL ;
+#if !TARGET_CARBON // TODO
+ ev = (EventRecord*) wxTheApp->MacGetCurrentEvent() ;
+#else
+ EventRecord rec ;
+ ev = &rec ;
+ wxMacConvertEventToRecord( (EventRef) wxTheApp->MacGetCurrentEvent() , &rec ) ;
+#endif
const short dragRegionOuterBoundary = 10 ;
const short dragRegionInnerBoundary = 9 ;
MacTrackingGlobals* trackingGlobals = (MacTrackingGlobals*) handlerRefCon;
Point mouse, localMouse;
DragAttributes attributes;
- RgnHandle hiliteRgn;
GetDragAttributes(theDrag, &attributes);
wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ;
switch(theMessage)
return(noErr);
}
-pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow, void *handlerRefCon,
-DragReference theDrag)
+pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow,
+ void *handlerRefCon,
+ DragReference theDrag)
{
MacTrackingGlobals* trackingGlobals = (MacTrackingGlobals*) handlerRefCon;
if ( trackingGlobals->m_currentTarget )