/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
-#pragma implementation
#pragma implementation "clipbrd.h"
#endif
#endif
void * data = NULL ;
Size byteCount;
-
+
switch (dataFormat.GetType())
{
case wxDF_OEMTEXT:
dataFormat = wxDF_TEXT;
// fall through
-
+
case wxDF_TEXT:
break;
+ case wxDF_UNICODETEXT:
+ break;
case wxDF_BITMAP :
case wxDF_METAFILE :
break ;
return NULL;
}
}
-
+
#if TARGET_CARBON
ScrapRef scrapRef;
-
+
err = GetCurrentScrap( &scrapRef );
- if ( err != noTypeErr && err != memFullErr )
+ if ( err != noTypeErr && err != memFullErr )
{
ScrapFlavorFlags flavorFlags;
-
+
if (( err = GetScrapFlavorFlags( scrapRef, dataFormat.GetFormatId(), &flavorFlags )) == noErr)
{
if (( err = GetScrapFlavorSize( scrapRef, dataFormat.GetFormatId(), &byteCount )) == noErr)
{
+ Size allocSize = byteCount ;
if ( dataFormat.GetType() == wxDF_TEXT )
- byteCount++ ;
-
- data = new char[ byteCount ] ;
+ allocSize += 1 ;
+ else if ( dataFormat.GetType() == wxDF_UNICODETEXT )
+ allocSize += 2 ;
+
+ data = new char[ allocSize ] ;
+
if (( err = GetScrapFlavorData( scrapRef, dataFormat.GetFormatId(), &byteCount , data )) == noErr )
{
- *len = byteCount ;
- if ( dataFormat.GetType() == wxDF_TEXT )
+ *len = allocSize ;
+ if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
+ if ( dataFormat.GetType() == wxDF_UNICODETEXT )
+ ((wxChar*)data)[byteCount/2] = 0 ;
}
else
{
}
}
}
-
+
#else
long offset ;
Handle datahandle = NewHandle(0) ;
if ( GetHandleSize( datahandle ) > 0 )
{
byteCount = GetHandleSize( datahandle ) ;
- if ( dataFormat.GetType() == wxDF_TEXT )
- data = new char[ byteCount + 1] ;
- else
- data = new char[ byteCount ] ;
-
+ Size allocSize = byteCount ;
+ if ( dataFormat.GetType() == wxDF_TEXT )
+ allocSize += 1 ;
+ else if ( dataFormat.GetType() == wxDF_UNICODETEXT )
+ allocSize += 2 ;
+
+ data = new char[ allocSize ] ;
+
memcpy( (char*) data , (char*) *datahandle , byteCount ) ;
- if ( dataFormat.GetType() == wxDF_TEXT )
+ if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
+ if ( dataFormat.GetType() == wxDF_UNICODETEXT )
+ ((wxChar*)data)[byteCount/2] = 0 ;
*len = byteCount ;
}
DisposeHandle( datahandle ) ;
if ( err )
{
wxLogSysError(_("Failed to get clipboard data."));
-
+
return NULL ;
}
+
if ( dataFormat.GetType() == wxDF_TEXT && wxApp::s_macDefaultEncodingIsPC )
{
- wxMacConvertToPC((char*)data,(char*)data,byteCount) ;
+ wxString st = wxMacMakeStringFromCString( (char*) data ) ;
+#if wxUSE_UNICODE
+ wxCharBuffer buf = st.ToAscii() ;
+#else
+ const char* buf = st ;
+#endif
+ char* newdata = new char[strlen(buf)+1] ;
+ memcpy( newdata , buf , strlen(buf)+1 ) ;
+ delete[] ((char*) data ) ;
+ data = newdata ;
}
+
return data;
}
bool wxClipboard::SetData( wxDataObject *data )
{
- wxCHECK_MSG( m_open, FALSE, wxT("clipboard not open") );
-
- wxCHECK_MSG( data, FALSE, wxT("data is invalid") );
-
- Clear();
-
+ // as we can only store one wxDataObject, this is the same in this
+ // implementation
return AddData( data );
}
{
wxTextDataObject* textDataObject = (wxTextDataObject*) data;
wxString str(textDataObject->GetText());
- wxString mac ;
- if ( wxApp::s_macDefaultEncodingIsPC )
- {
- mac = wxMacMakeMacStringFromPC(textDataObject->GetText()) ;
- }
- else
- {
- mac = textDataObject->GetText() ;
- }
- err = UMAPutScrap( mac.Length() , 'TEXT' , (void*) mac.c_str() ) ;
+ wxCharBuffer buf = wxMacStringToCString( str ) ;
+ err = UMAPutScrap( strlen(buf) , kScrapFlavorTypeText , (void*) buf.data() ) ;
}
break ;
-
+#if wxUSE_UNICODE
+ case wxDF_UNICODETEXT :
+ {
+ wxTextDataObject* textDataObject = (wxTextDataObject*) data;
+ wxString str(textDataObject->GetText());
+ err = UMAPutScrap( str.Length() * sizeof(wxChar) , kScrapFlavorTypeUnicode , (void*) str.wc_str() ) ;
+ }
+ break ;
+#endif
#if wxUSE_DRAG_AND_DROP
case wxDF_METAFILE:
{
wxMetafile metaFile = metaFileDataObject->GetMetafile();
PicHandle pict = (PicHandle) metaFile.GetHMETAFILE() ;
HLock( (Handle) pict ) ;
- err = UMAPutScrap( GetHandleSize( (Handle) pict ) , 'PICT' , *pict ) ;
+ err = UMAPutScrap( GetHandleSize( (Handle) pict ) , kScrapFlavorTypePicture , *pict ) ;
HUnlock( (Handle) pict ) ;
}
break ;
{
bool created = false ;
PicHandle pict = NULL ;
-
+
wxBitmapDataObject* bitmapDataObject = (wxBitmapDataObject*) data ;
pict = (PicHandle) bitmapDataObject->GetBitmap().GetPict( &created ) ;
HLock( (Handle) pict ) ;
- err = UMAPutScrap( GetHandleSize( (Handle) pict ) , 'PICT' , *pict ) ;
+ err = UMAPutScrap( GetHandleSize( (Handle) pict ) , kScrapFlavorTypePicture , *pict ) ;
HUnlock( (Handle) pict ) ;
if ( created )
KillPicture( pict ) ;
#if TARGET_CARBON
OSStatus err = noErr;
ScrapRef scrapRef;
-
+
err = GetCurrentScrap( &scrapRef );
- if ( err != noTypeErr && err != memFullErr )
+ if ( err != noTypeErr && err != memFullErr )
{
ScrapFlavorFlags flavorFlags;
Size byteCount;
-
+
if (( err = GetScrapFlavorFlags( scrapRef, dataFormat.GetFormatId(), &flavorFlags )) == noErr)
{
if (( err = GetScrapFlavorSize( scrapRef, dataFormat.GetFormatId(), &byteCount )) == noErr)
}
}
return FALSE;
-
+
#else
long offset ;
Handle datahandle = NewHandle(0) ;
for (size_t i = 0; !transferred && i < formatcount ; i++)
{
wxDataFormat format = array[i] ;
- if ( m_data->IsSupported( format ) )
+ if ( m_data->IsSupported( format ) )
{
int size = m_data->GetDataSize( format );
transferred = true ;
- if (size == 0)
+ if (size == 0)
{
data.SetData(format , 0 , 0 ) ;
}
}
}
/* get formats from wxDataObjects */
- if ( !transferred )
+ if ( !transferred )
{
for (size_t i = 0; !transferred && i < formatcount ; i++)
{