// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "clipbrd.h"
#endif
+#include "wx/wxprec.h"
+
+#if wxUSE_CLIPBOARD
+
#include "wx/app.h"
#include "wx/frame.h"
#include "wx/bitmap.h"
return NULL ;
}
- if ( dataFormat.GetType() == wxDF_TEXT && wxApp::s_macDefaultEncodingIsPC )
+ if ( dataFormat.GetType() == wxDF_TEXT )
{
- 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 ;
+ wxMacConvertNewlines10To13( (char*) data ) ;
}
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 );
wxT("wxClipboard now supports atom %s"),
array[i].GetId().c_str() );
-#if !TARGET_CARBON
- OSErr err = noErr ;
-#else
- OSStatus err = noErr ;
-#endif
-
- switch ( array[i].GetType() )
- {
- case wxDF_TEXT:
- case wxDF_OEMTEXT:
- {
- wxTextDataObject* textDataObject = (wxTextDataObject*) data;
- wxString str(textDataObject->GetText());
- 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:
- {
- wxMetafileDataObject* metaFileDataObject =
- (wxMetafileDataObject*) data;
- wxMetafile metaFile = metaFileDataObject->GetMetafile();
- PicHandle pict = (PicHandle) metaFile.GetHMETAFILE() ;
- HLock( (Handle) pict ) ;
- err = UMAPutScrap( GetHandleSize( (Handle) pict ) , kScrapFlavorTypePicture , *pict ) ;
- HUnlock( (Handle) pict ) ;
- }
- break ;
-#endif
- case wxDF_BITMAP:
- case wxDF_DIB:
- {
- bool created = false ;
- PicHandle pict = NULL ;
-
- wxBitmapDataObject* bitmapDataObject = (wxBitmapDataObject*) data ;
- pict = (PicHandle) bitmapDataObject->GetBitmap().GetPict( &created ) ;
-
- HLock( (Handle) pict ) ;
- err = UMAPutScrap( GetHandleSize( (Handle) pict ) , kScrapFlavorTypePicture , *pict ) ;
- HUnlock( (Handle) pict ) ;
- if ( created )
- KillPicture( pict ) ;
- }
- default:
- break ;
- }
-
+ size_t sz = data->GetDataSize( array[i] ) ;
+ void* buf = malloc( sz + 1 ) ;
+ if ( buf )
+ {
+ data->GetDataHere( array[i] , buf ) ;
+ OSType mactype = 0 ;
+ switch ( array[i].GetType() )
+ {
+ case wxDF_TEXT:
+ case wxDF_OEMTEXT:
+ mactype = kScrapFlavorTypeText ;
+ sz -= 1;
+ break ;
+ #if wxUSE_UNICODE
+ case wxDF_UNICODETEXT :
+ mactype = kScrapFlavorTypeUnicode ;
+ sz -= 2;
+ break ;
+ #endif
+ #if wxUSE_DRAG_AND_DROP
+ case wxDF_METAFILE:
+ mactype = kScrapFlavorTypePicture ;
+ break ;
+ #endif
+ case wxDF_BITMAP:
+ case wxDF_DIB:
+ mactype = kScrapFlavorTypePicture ;
+ break ;
+ default:
+ break ;
+ }
+ UMAPutScrap( sz , mactype , buf ) ;
+ free( buf ) ;
+ }
}
delete[] array;
void wxClipboard::Close()
{
+ wxCHECK_RET( m_open, wxT("clipboard not open") );
+
m_open = false ;
+
+ // Get rid of cached object. If this is not done copying from another application will
+ // only work once
+ if (m_data)
+ {
+ delete m_data;
+ m_data = (wxDataObject*) NULL;
+ }
+
}
bool wxClipboard::IsSupported( const wxDataFormat &dataFormat )
delete[] array ;
return transferred ;
}
+
+#endif