X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fda7962d029672a5f4c718a3c6b2559856f4cd95..b9efe021b554fa3967d1442cf758435c5cd5ae8f:/src/msw/ole/dataobj.cpp?ds=sidebyside diff --git a/src/msw/ole/dataobj.cpp b/src/msw/ole/dataobj.cpp index 9e7b0363d1..e26a1ea1d5 100644 --- a/src/msw/ole/dataobj.cpp +++ b/src/msw/ole/dataobj.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "dataobj.h" #endif @@ -39,8 +39,12 @@ #include "wx/msw/private.h" // includes +#ifdef __WXWINCE__ +#include +#endif + // for some compilers, the entire ole2.h must be included, not only oleauto.h -#if wxUSE_NORLANDER_HEADERS || defined(__WATCOMC__) +#if wxUSE_NORLANDER_HEADERS || defined(__WATCOMC__) || defined(__WXWINCE__) #include #endif @@ -102,9 +106,9 @@ public: virtual ~wxIDataObject(); // normally, wxDataObject controls our lifetime (i.e. we're deleted when it - // is), but in some cases, the situation is inversed, that is we delete it + // is), but in some cases, the situation is reversed, that is we delete it // when this object is deleted - setting this flag enables such logic - void SetDeleteFlag() { m_mustDelete = TRUE; } + void SetDeleteFlag() { m_mustDelete = true; } DECLARE_IUNKNOWN_METHODS; @@ -153,8 +157,7 @@ wxString wxDataFormat::GetId() const wxCHECK_MSG( !IsStandard(), s, wxT("name of predefined format cannot be retrieved") ); - int len = ::GetClipboardFormatName(m_format, s.GetWriteBuf(max), max); - s.UngetWriteBuf(); + int len = ::GetClipboardFormatName(m_format, wxStringBuffer(s, max), max); if ( !len ) { @@ -264,7 +267,7 @@ IMPLEMENT_IUNKNOWN_METHODS(wxIDataObject) wxIDataObject::wxIDataObject(wxDataObject *pDataObject) { m_pDataObject = pDataObject; - m_mustDelete = FALSE; + m_mustDelete = false; } wxIDataObject::~wxIDataObject() @@ -299,6 +302,7 @@ STDMETHODIMP wxIDataObject::GetData(FORMATETC *pformatetcIn, STGMEDIUM *pmedium) pmedium->tymed = TYMED_ENHMF; break; +#ifndef __WXWINCE__ case wxDF_METAFILE: pmedium->hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, sizeof(METAFILEPICT)); @@ -308,7 +312,7 @@ STDMETHODIMP wxIDataObject::GetData(FORMATETC *pformatetcIn, STGMEDIUM *pmedium) } pmedium->tymed = TYMED_MFPICT; break; - +#endif default: // alloc memory size_t size = m_pDataObject->GetDataSize(format); @@ -461,7 +465,7 @@ STDMETHODIMP wxIDataObject::SetData(FORMATETC *pformatetc, case CF_OEMTEXT: size = strlen((const char *)pBuf); break; -#if !defined(__WATCOMC__) && ! (defined(__BORLANDC__) && (__BORLANDC__ < 0x500)) +#if !(defined(__BORLANDC__) && (__BORLANDC__ < 0x500)) case CF_UNICODETEXT: #if ( defined(__BORLANDC__) && (__BORLANDC__ > 0x530) ) \ || ( defined(__MWERKS__) && defined(__WXMSW__) ) @@ -472,11 +476,13 @@ STDMETHODIMP wxIDataObject::SetData(FORMATETC *pformatetc, break; #endif case CF_BITMAP: +#ifndef __WXWINCE__ case CF_HDROP: // these formats don't use size at all, anyhow (but // pass data by handle, which is always a single DWORD) size = 0; break; +#endif case CF_DIB: // the handler will calculate size itself (it's too @@ -484,16 +490,17 @@ STDMETHODIMP wxIDataObject::SetData(FORMATETC *pformatetc, size = 0; break; +#ifndef __WXWINCE__ case CF_METAFILEPICT: size = sizeof(METAFILEPICT); break; - +#endif default: { // we suppose that the size precedes the data pBuf = m_pDataObject->GetSizeFromBuffer( pBuf, &size, format ); if (! format.IsStandard() ) { - // see GetData for coresponding increment + // see GetData for corresponding increment size -= m_pDataObject->GetBufferOffset( format ); } } @@ -716,7 +723,6 @@ const wxChar *wxDataObject::GetFormatName(wxDataFormat format) switch ( format ) { case CF_TEXT: return wxT("CF_TEXT"); case CF_BITMAP: return wxT("CF_BITMAP"); - case CF_METAFILEPICT: return wxT("CF_METAFILEPICT"); case CF_SYLK: return wxT("CF_SYLK"); case CF_DIF: return wxT("CF_DIF"); case CF_TIFF: return wxT("CF_TIFF"); @@ -727,9 +733,12 @@ const wxChar *wxDataObject::GetFormatName(wxDataFormat format) case CF_RIFF: return wxT("CF_RIFF"); case CF_WAVE: return wxT("CF_WAVE"); case CF_UNICODETEXT: return wxT("CF_UNICODETEXT"); +#ifndef __WXWINCE__ + case CF_METAFILEPICT: return wxT("CF_METAFILEPICT"); case CF_ENHMETAFILE: return wxT("CF_ENHMETAFILE"); - case CF_HDROP: return wxT("CF_HDROP"); case CF_LOCALE: return wxT("CF_LOCALE"); + case CF_HDROP: return wxT("CF_HDROP"); +#endif default: if ( !::GetClipboardFormatName(format, s_szBuf, WXSIZEOF(s_szBuf)) ) @@ -752,20 +761,32 @@ const wxChar *wxDataObject::GetFormatName(wxDataFormat format) // wxBitmapDataObject supports CF_DIB format // ---------------------------------------------------------------------------- +// TODO: support CF_DIB under Windows CE as well + size_t wxBitmapDataObject::GetDataSize() const { +#if wxUSE_WXDIB && !defined(__WXWINCE__) return wxDIB::ConvertFromBitmap(NULL, GetHbitmapOf(GetBitmap())); +#else + return 0; +#endif } bool wxBitmapDataObject::GetDataHere(void *buf) const { +#if wxUSE_WXDIB && !defined(__WXWINCE__) BITMAPINFO * const pbi = (BITMAPINFO *)buf; return wxDIB::ConvertFromBitmap(pbi, GetHbitmapOf(GetBitmap())) != 0; +#else + wxUnusedVar(buf); + return false; +#endif } bool wxBitmapDataObject::SetData(size_t WXUNUSED(len), const void *buf) { +#if wxUSE_WXDIB && !defined(__WXWINCE__) const BITMAPINFO * const pbmi = (const BITMAPINFO *)buf; HBITMAP hbmp = wxDIB::ConvertToBitmap(pbmi); @@ -780,7 +801,11 @@ bool wxBitmapDataObject::SetData(size_t WXUNUSED(len), const void *buf) SetBitmap(bitmap); - return TRUE; + return true; +#else + wxUnusedVar(buf); + return false; +#endif } // ---------------------------------------------------------------------------- @@ -802,7 +827,7 @@ bool wxBitmapDataObject2::GetDataHere(void *pBuf) const // we put a bitmap handle into pBuf *(WXHBITMAP *)pBuf = GetBitmap().GetHBITMAP(); - return TRUE; + return true; } bool wxBitmapDataObject2::SetData(size_t WXUNUSED(len), const void *pBuf) @@ -821,12 +846,12 @@ bool wxBitmapDataObject2::SetData(size_t WXUNUSED(len), const void *pBuf) if ( !bitmap.Ok() ) { wxFAIL_MSG(wxT("pasting/dropping invalid bitmap")); - return FALSE; + return false; } SetBitmap(bitmap); - return TRUE; + return true; } #if 0 @@ -891,7 +916,7 @@ bool wxBitmapDataObject::GetDataHere(const wxDataFormat& format, { wxLogLastError(wxT("GetDIBits")); - return FALSE; + return false; } } else // CF_BITMAP @@ -900,7 +925,7 @@ bool wxBitmapDataObject::GetDataHere(const wxDataFormat& format, *(HBITMAP *)pBuf = hbmp; } - return TRUE; + return true; } bool wxBitmapDataObject::SetData(const wxDataFormat& format, @@ -945,7 +970,7 @@ bool wxBitmapDataObject::SetData(const wxDataFormat& format, wxASSERT_MSG( m_bitmap.Ok(), wxT("pasting invalid bitmap") ); - return TRUE; + return true; } #endif // 0 @@ -956,6 +981,7 @@ bool wxBitmapDataObject::SetData(const wxDataFormat& format, bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *pData) { +#ifndef __WXWINCE__ m_filenames.Empty(); // the documentation states that the first member of DROPFILES structure is @@ -978,8 +1004,7 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *pData) // +1 for terminating NUL len = ::DragQueryFile(hdrop, n, NULL, 0) + 1; - UINT len2 = ::DragQueryFile(hdrop, n, str.GetWriteBuf(len), len); - str.UngetWriteBuf(); + UINT len2 = ::DragQueryFile(hdrop, n, wxStringBuffer(str, len), len); m_filenames.Add(str); if ( len2 != len - 1 ) { @@ -988,7 +1013,11 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *pData) } } - return TRUE; + return true; +#else + wxUnusedVar(pData); + return false; +#endif } void wxFileDataObject::AddFile(const wxString& file) @@ -1001,6 +1030,7 @@ void wxFileDataObject::AddFile(const wxString& file) size_t wxFileDataObject::GetDataSize() const { +#ifndef __WXWINCE__ // size returned will be the size of the DROPFILES structure, // plus the list of filesnames (null byte separated), plus // a double null at the end @@ -1010,26 +1040,30 @@ size_t wxFileDataObject::GetDataSize() const return 0; // inital size of DROPFILES struct + null byte - size_t sz = sizeof(DROPFILES) + 1; + size_t sz = sizeof(DROPFILES) + (1 * sizeof(wxChar)); size_t count = m_filenames.GetCount(); for ( size_t i = 0; i < count; i++ ) { // add filename length plus null byte - sz += m_filenames[i].Len() + 1; + sz += (m_filenames[i].Len() + 1) * sizeof(wxChar); } return sz; +#else + return 0; +#endif } bool wxFileDataObject::GetDataHere(void *pData) const { +#ifndef __WXWINCE__ // pData points to an externally allocated memory block // created using the size returned by GetDataSize() // if pData is NULL, or there are no files, return if ( !pData || m_filenames.GetCount() == 0 ) - return FALSE; + return false; // convert data pointer to a DROPFILES struct pointer LPDROPFILES pDrop = (LPDROPFILES) pData; @@ -1051,7 +1085,7 @@ bool wxFileDataObject::GetDataHere(void *pData) const { // copy filename to pbuf and add null terminator size_t len = m_filenames[i].Len(); - memcpy(pbuf, m_filenames[i], len); + memcpy(pbuf, m_filenames[i], len*sizeof(wxChar)); pbuf += len; *pbuf++ = wxT('\0'); } @@ -1059,7 +1093,11 @@ bool wxFileDataObject::GetDataHere(void *pData) const // add final null terminator *pbuf = wxT('\0'); - return TRUE; + return true; +#else + wxUnusedVar(pData); + return false; +#endif } // ---------------------------------------------------------------------------- @@ -1101,9 +1139,14 @@ protected: memcpy( buffer, unicode_buffer.c_str(), ( unicode_buffer.length() + 1 ) * sizeof(wxChar) ); - return TRUE; + return true; } + virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format), + void *buf) const + { return GetDataHere(buf); } #endif + + DECLARE_NO_COPY_CLASS(CFSTR_SHELLURLDataObject) }; @@ -1139,8 +1182,7 @@ wxString wxURLDataObject::GetURL() const size_t len = m_dataObjectLast->GetDataSize(); - m_dataObjectLast->GetDataHere(url.GetWriteBuf(len)); - url.UngetWriteBuf(); + m_dataObjectLast->GetDataHere(wxStringBuffer(url, len)); return url; } @@ -1182,10 +1224,13 @@ static const wxChar *GetTymedName(DWORD tymed) #endif // Debug #else // not using OLE at all + // ---------------------------------------------------------------------------- // wxDataObject // ---------------------------------------------------------------------------- +#if wxUSE_DATAOBJ + wxDataObject::wxDataObject() { } @@ -1199,11 +1244,14 @@ void wxDataObject::SetAutoDelete() } #ifdef __WXDEBUG__ -const wxChar *wxDataObject::GetFormatName(wxDataFormat format) +const wxChar *wxDataObject::GetFormatName(wxDataFormat WXUNUSED(format)) { return NULL; } -#endif +#endif // __WXDEBUG__ + +#endif // wxUSE_DATAOBJ + +#endif // wxUSE_OLE/!wxUSE_OLE -#endif