return wxIsClipboardFormatAvailable(format);
}
-bool wxClipboard::GetData( wxDataObject *data )
+bool wxClipboard::GetData( wxDataObject& data )
{
- wxCHECK_MSG( data, FALSE, wxT("invalid data object") );
-
#if wxUSE_OLE_CLIPBOARD
IDataObject *pDataObject = NULL;
HRESULT hr = OleGetClipboard(&pDataObject);
}
// build the list of supported formats
- size_t nFormats = data->GetFormatCount(wxDataObject::Set);
+ size_t nFormats = data.GetFormatCount(wxDataObject::Set);
wxDataFormat format, *formats;
if ( nFormats == 1 )
{
formats = new wxDataFormat[nFormats];
}
- data->GetAllFormats(formats, wxDataObject::Set);
+ data.GetAllFormats(formats, wxDataObject::Set);
// get the format enumerator
bool result = FALSE;
if ( SUCCEEDED(hr) )
{
// pass the data to the data object
- hr = data->GetInterface()->SetData(&formatEtc, &medium, TRUE);
+ hr = data.GetInterface()->SetData(&formatEtc, &medium, TRUE);
if ( FAILED(hr) )
{
wxLogDebug(wxT("Failed to set data in wxIDataObject"));
#elif wxUSE_DATAOBJ
wxCHECK_MSG( wxIsClipboardOpened(), FALSE, wxT("clipboard not open") );
- wxDataFormat format = data->GetFormat();
+ wxDataFormat format = data.GetFormat();
switch ( format )
{
case wxDF_TEXT:
case wxDF_OEMTEXT:
{
- wxTextDataObject* textDataObject = (wxTextDataObject*) data;
- char* s = (char*) wxGetClipboardData(format);
- if ( s )
- {
- textDataObject->SetText(s);
- delete[] s;
- return TRUE;
- }
- else
+ wxTextDataObject& textDataObject = (wxTextDataObject &)data;
+ char* s = (char*)wxGetClipboardData(format);
+ if ( !s )
return FALSE;
+
+ textDataObject.SetText(s);
+ delete [] s;
+
+ return TRUE;
}
case wxDF_BITMAP:
case wxDF_DIB:
{
- wxBitmapDataObject* bitmapDataObject = (wxBitmapDataObject *)data;
+ wxBitmapDataObject& bitmapDataObject = (wxBitmapDataObject &)data;
wxBitmap* bitmap = (wxBitmap *)wxGetClipboardData(data->GetFormat());
- if (bitmap)
- {
- bitmapDataObject->SetBitmap(* bitmap);
- delete bitmap;
- return TRUE;
- }
- else
+ if ( !bitmap )
return FALSE;
+
+ bitmapDataObject.SetBitmap(*bitmap);
+ delete bitmap;
+
+ return TRUE;
}
#if wxUSE_METAFILE
case wxDF_METAFILE:
{
- wxMetafileDataObject* metaFileDataObject = (wxMetafileDataObject *)data;
+ wxMetafileDataObject& metaFileDataObject = (wxMetafileDataObject &)data;
wxMetafile* metaFile = (wxMetafile *)wxGetClipboardData(wxDF_METAFILE);
- if (metaFile)
- {
- metaFileDataObject->SetMetafile(*metaFile);
- delete metaFile;
- return TRUE;
- }
- else
+ if ( !metaFile )
return FALSE;
- }
-#endif
- default:
- {
- long len;
- void *buf = wxGetClipboardData(format, &len);
- if ( buf )
- {
- // FIXME this is for testing only!!
- ((wxPrivateDataObject *)data)->SetData(buf, len);
- free(buf);
- return TRUE;
- }
- }
+ metaFileDataObject.SetMetafile(*metaFile);
+ delete metaFile;
- return FALSE;
+ return TRUE;
+ }
+#endif // wxUSE_METAFILE
}
#else // !wxUSE_DATAOBJ
+ wxFAIL_MSG( wxT("no clipboard implementation") );
+#endif // wxUSE_OLE_CLIPBOARD/wxUSE_DATAOBJ
+
return FALSE;
-#endif // wxUSE_DATAOBJ/!wxUSE_DATAOBJ
}
#else
#ifdef __WXDEBUG__
static const wxChar *GetTymedName(DWORD tymed);
-#endif // Debug
+#else // !Debug
+ #define GetTymedName(tymed) ""
+#endif // Debug/!Debug
// to be moved into wx/msw/bitmap.h
extern size_t wxConvertBitmapToDIB(BITMAPINFO *pbi, const wxBitmap& bitmap);
// and now check the type of data requested
wxDataFormat format = pformatetc->cfFormat;
if ( m_pDataObject->IsSupportedFormat(format) ) {
-#ifdef __WXDEBUG__
wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::QueryGetData: %s ok"),
- wxDataObject::GetFormatName(format));
-#endif // Debug
+ wxGetFormatName(format));
}
else {
wxLogTrace(wxTRACE_OleCalls,
wxT("wxIDataObject::QueryGetData: %s unsupported"),
- wxDataObject::GetFormatName(format));
+ wxGetFormatName(format));
return DV_E_FORMATETC;
}
if ( (format == wxDF_BITMAP && !(tymed & TYMED_GDI)) &&
!(tymed & TYMED_HGLOBAL) ) {
// it's not what we're waiting for
-#ifdef __WXDEBUG__
wxLogTrace(wxTRACE_OleCalls,
wxT("wxIDataObject::QueryGetData: %s != %s"),
GetTymedName(tymed),
GetTymedName(format == wxDF_BITMAP ? TYMED_GDI
: TYMED_HGLOBAL));
-#endif // Debug
return DV_E_TYMED;
}
}
}
+#ifdef __WXDEBUG__
+
const char *wxDataObject::GetFormatName(wxDataFormat format)
{
// case 'xxx' is not a valid value for switch of enum 'wxDataFormat'
#endif // VC++
}
+#endif // Debug
+
// ----------------------------------------------------------------------------
// wxBitmapDataObject supports CF_DIB format
// ----------------------------------------------------------------------------