clipboard reading

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10338 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2001-05-26 19:54:46 +00:00
parent 99918ac7f3
commit 97af5088ec
2 changed files with 208 additions and 14 deletions

View File

@@ -93,11 +93,13 @@ bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat)
#else #else
long offset ; long offset ;
if ( GetScrap( NULL , dataFormat.GetFormatId() , &offset ) > 0 ) Handle datahandle = NewHandle(0) ;
{ HLock( datahandle ) ;
return TRUE ; GetScrap( datahandle , dataFormat.GetFormatId() , &offset ) ;
} HUnlock( datahandle ) ;
return FALSE; bool hasData = GetHandleSize( datahandle ) > 0 ;
DisposeHandle( datahandle ) ;
return hasData ;
#endif #endif
} }
@@ -249,9 +251,104 @@ bool wxGetClipboardFormatName(wxDataFormat dataFormat, wxChar *formatName, int m
void *wxGetClipboardData(wxDataFormat dataFormat, long *len) void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
{ {
#if !TARGET_CARBON
OSErr err = noErr ;
#else
OSStatus err = noErr ;
#endif
void * data = NULL ;
switch (dataFormat.GetType())
{
case wxDF_BITMAP:
case wxDF_DIB:
#if wxUSE_METAFILE
case wxDF_METAFILE:
#endif
case wxDF_SYLK:
case wxDF_DIF:
case wxDF_TIFF:
case wxDF_PALETTE:
default:
{
wxLogError(_("Unsupported clipboard format."));
return NULL; return NULL;
} }
case wxDF_OEMTEXT:
dataFormat = wxDF_TEXT;
// fall through
case wxDF_TEXT:
break;
}
#if TARGET_CARBON
ScrapRef scrapRef;
err = GetCurrentScrap( &scrapRef );
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)
{
if ( dataFormat.GetType() == wxDF_TEXT )
byteCount++ ;
data = new char[ byteCount ] ;
if (( err = GetScrapFlavorData( scrapRef, dataFormat.GetFormatId(), &byteCount , data )) == noErr )
{
*len = byteCount ;
if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
}
else
{
delete[] data ;
data = NULL ;
}
}
}
}
#else
long offset ;
Handle datahandle = NewHandle(0) ;
HLock( datahandle ) ;
GetScrap( datahandle , dataFormat.GetFormatId() , &offset ) ;
HUnlock( datahandle ) ;
if ( GetHandleSize( datahandle ) > 0 )
{
long byteCount = GetHandleSize( datahandle ) ;
if ( dataFormat.GetType() == wxDF_TEXT )
data = new char[ byteCount + 1] ;
else
data = new char[ byteCount ] ;
memcpy( (char*) data , (char*) *datahandle , byteCount ) ;
if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
* len = byteCount ;
}
DisposeHandle( datahandle ) ;
#endif
if ( err )
{
wxLogSysError(_("Failed to get clipboard data."));
return NULL ;
}
if ( dataFormat.GetType() == wxDF_TEXT && wxApp::s_macDefaultEncodingIsPC )
{
wxMacConvertToPC((char*)data) ;
}
return data;
}
/* /*
* Generalized clipboard implementation by Matthew Flatt * Generalized clipboard implementation by Matthew Flatt
@@ -373,7 +470,7 @@ bool wxClipboard::GetData( wxDataObject& data )
wxCHECK_MSG( wxIsClipboardOpened(), FALSE, wxT("clipboard not open") ); wxCHECK_MSG( wxIsClipboardOpened(), FALSE, wxT("clipboard not open") );
wxDataFormat format = data.GetPreferredFormat(); wxDataFormat format = data.GetPreferredFormat();
switch ( format ) switch ( format.GetType() )
{ {
case wxDF_TEXT: case wxDF_TEXT:
case wxDF_OEMTEXT: case wxDF_OEMTEXT:

View File

@@ -93,11 +93,13 @@ bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat)
#else #else
long offset ; long offset ;
if ( GetScrap( NULL , dataFormat.GetFormatId() , &offset ) > 0 ) Handle datahandle = NewHandle(0) ;
{ HLock( datahandle ) ;
return TRUE ; GetScrap( datahandle , dataFormat.GetFormatId() , &offset ) ;
} HUnlock( datahandle ) ;
return FALSE; bool hasData = GetHandleSize( datahandle ) > 0 ;
DisposeHandle( datahandle ) ;
return hasData ;
#endif #endif
} }
@@ -249,9 +251,104 @@ bool wxGetClipboardFormatName(wxDataFormat dataFormat, wxChar *formatName, int m
void *wxGetClipboardData(wxDataFormat dataFormat, long *len) void *wxGetClipboardData(wxDataFormat dataFormat, long *len)
{ {
#if !TARGET_CARBON
OSErr err = noErr ;
#else
OSStatus err = noErr ;
#endif
void * data = NULL ;
switch (dataFormat.GetType())
{
case wxDF_BITMAP:
case wxDF_DIB:
#if wxUSE_METAFILE
case wxDF_METAFILE:
#endif
case wxDF_SYLK:
case wxDF_DIF:
case wxDF_TIFF:
case wxDF_PALETTE:
default:
{
wxLogError(_("Unsupported clipboard format."));
return NULL; return NULL;
} }
case wxDF_OEMTEXT:
dataFormat = wxDF_TEXT;
// fall through
case wxDF_TEXT:
break;
}
#if TARGET_CARBON
ScrapRef scrapRef;
err = GetCurrentScrap( &scrapRef );
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)
{
if ( dataFormat.GetType() == wxDF_TEXT )
byteCount++ ;
data = new char[ byteCount ] ;
if (( err = GetScrapFlavorData( scrapRef, dataFormat.GetFormatId(), &byteCount , data )) == noErr )
{
*len = byteCount ;
if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
}
else
{
delete[] data ;
data = NULL ;
}
}
}
}
#else
long offset ;
Handle datahandle = NewHandle(0) ;
HLock( datahandle ) ;
GetScrap( datahandle , dataFormat.GetFormatId() , &offset ) ;
HUnlock( datahandle ) ;
if ( GetHandleSize( datahandle ) > 0 )
{
long byteCount = GetHandleSize( datahandle ) ;
if ( dataFormat.GetType() == wxDF_TEXT )
data = new char[ byteCount + 1] ;
else
data = new char[ byteCount ] ;
memcpy( (char*) data , (char*) *datahandle , byteCount ) ;
if ( dataFormat.GetType() == wxDF_TEXT )
((char*)data)[byteCount] = 0 ;
* len = byteCount ;
}
DisposeHandle( datahandle ) ;
#endif
if ( err )
{
wxLogSysError(_("Failed to get clipboard data."));
return NULL ;
}
if ( dataFormat.GetType() == wxDF_TEXT && wxApp::s_macDefaultEncodingIsPC )
{
wxMacConvertToPC((char*)data) ;
}
return data;
}
/* /*
* Generalized clipboard implementation by Matthew Flatt * Generalized clipboard implementation by Matthew Flatt
@@ -373,7 +470,7 @@ bool wxClipboard::GetData( wxDataObject& data )
wxCHECK_MSG( wxIsClipboardOpened(), FALSE, wxT("clipboard not open") ); wxCHECK_MSG( wxIsClipboardOpened(), FALSE, wxT("clipboard not open") );
wxDataFormat format = data.GetPreferredFormat(); wxDataFormat format = data.GetPreferredFormat();
switch ( format ) switch ( format.GetType() )
{ {
case wxDF_TEXT: case wxDF_TEXT:
case wxDF_OEMTEXT: case wxDF_OEMTEXT: