X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9e2896e5c8944c5f5227fa080e1b781c4a6f2600..7b9da2077d0975db6c965a85c91d5aca671ab5e3:/src/msw/clipbrd.cpp?ds=sidebyside diff --git a/src/msw/clipbrd.cpp b/src/msw/clipbrd.cpp index f8287de98a..6b93ebf988 100644 --- a/src/msw/clipbrd.cpp +++ b/src/msw/clipbrd.cpp @@ -419,8 +419,6 @@ bool wxGetClipboardFormatName(wxDataFormat dataFormat, IMPLEMENT_DYNAMIC_CLASS(wxClipboard, wxObject) -wxClipboard* wxTheClipboard = (wxClipboard *)NULL; - wxClipboard::wxClipboard() { m_clearOnExit = FALSE; @@ -474,9 +472,20 @@ bool wxClipboard::Open() #endif } +bool wxClipboard::IsOpened() const +{ +#if wxUSE_OLE_CLIPBOARD + return TRUE; +#else + return wxIsClipboardOpened(); +#endif +} + bool wxClipboard::SetData( wxDataObject *data ) { +#if !wxUSE_OLE_CLIPBOARD (void)wxEmptyClipboard(); +#endif // wxUSE_OLE_CLIPBOARD if ( data ) return AddData(data); @@ -569,10 +578,8 @@ bool wxClipboard::IsSupported( wxDataFormat format ) 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); @@ -584,7 +591,7 @@ bool wxClipboard::GetData( wxDataObject *data ) } // 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 ) { @@ -597,7 +604,7 @@ bool wxClipboard::GetData( wxDataObject *data ) formats = new wxDataFormat[nFormats]; } - data->GetAllFormats(formats, wxDataObject::Set); + data.GetAllFormats(formats, wxDataObject::Set); // get the format enumerator bool result = FALSE; @@ -684,7 +691,7 @@ bool wxClipboard::GetData( wxDataObject *data ) 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")); @@ -710,72 +717,56 @@ bool wxClipboard::GetData( wxDataObject *data ) #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