#include "wx/msw/private.h" // includes <windows.h>
-#if wxUSE_NORLANDER_HEADERS
+// for some compilers, the entire ole2.h must be included, not only oleauto.h
+#if wxUSE_NORLANDER_HEADERS || defined(__WATCOMC__)
#include <ole2.h>
#endif
-#include <oleauto.h>
-
-#ifndef __WIN32__
- #include <ole2.h>
- #include <olestd.h>
-#endif
+#include <oleauto.h>
#include <shlobj.h>
#include "wx/msw/ole/oleutils.h"
CLIPFORMAT *m_formats; // formats we can provide data in
ULONG m_nCount, // number of formats we support
m_nCurrent; // current enum position
+
+ DECLARE_NO_COPY_CLASS(wxIEnumFORMATETC)
};
// ----------------------------------------------------------------------------
wxDataObject *m_pDataObject; // pointer to C++ class we belong to
bool m_mustDelete;
+
+ DECLARE_NO_COPY_CLASS(wxIDataObject)
};
// ============================================================================
wxIEnumFORMATETC::wxIEnumFORMATETC(const wxDataFormat *formats, ULONG nCount)
{
- m_cRef = 0;
m_nCurrent = 0;
m_nCount = nCount;
m_formats = new CLIPFORMAT[nCount];
wxIDataObject::wxIDataObject(wxDataObject *pDataObject)
{
- m_cRef = 0;
m_pDataObject = pDataObject;
m_mustDelete = FALSE;
}
// for the bitmaps and metafiles we use the handles instead of global memory
// to pass the data
- wxDataFormat format = (wxDataFormatId)pformatetcIn->cfFormat;
+ wxDataFormat format = (wxDataFormat::NativeFormat)pformatetcIn->cfFormat;
switch ( format )
{
|| ( defined(__MWERKS__) && defined(__WXMSW__) )
size = std::wcslen((const wchar_t *)pBuf) * sizeof(wchar_t);
#else
- size = ::wcslen((const wchar_t *)pBuf) * sizeof(wchar_t);
+ size = wxWcslen((const wchar_t *)pBuf) * sizeof(wchar_t);
#endif
break;
#endif
// the only one allowed by current COM implementation
if ( pformatetc->lindex != -1 ) {
wxLogTrace(wxTRACE_OleCalls,
- wxT("wxIDataObject::QueryGetData: bad lindex %d"),
+ wxT("wxIDataObject::QueryGetData: bad lindex %ld"),
pformatetc->lindex);
return DV_E_LINDEX;
// we don't support anything other (THUMBNAIL, ICON, DOCPRINT...)
if ( pformatetc->dwAspect != DVASPECT_CONTENT ) {
wxLogTrace(wxTRACE_OleCalls,
- wxT("wxIDataObject::QueryGetData: bad dwAspect %d"),
+ wxT("wxIDataObject::QueryGetData: bad dwAspect %ld"),
pformatetc->dwAspect);
return DV_E_DVASPECT;
m_pIDataObject = NULL;
}
-size_t wxDataObject::GetBufferOffset( const wxDataFormat& format )
+size_t wxDataObject::GetBufferOffset( const wxDataFormat& WXUNUSED(format) )
{
return sizeof(size_t);
}
const void* wxDataObject::GetSizeFromBuffer( const void* buffer, size_t* size,
- const wxDataFormat& format )
+ const wxDataFormat& WXUNUSED(format) )
{
size_t* p = (size_t*)buffer;
*size = *p;
}
void* wxDataObject::SetSizeInBuffer( void* buffer, size_t size,
- const wxDataFormat& format )
+ const wxDataFormat& WXUNUSED(format) )
{
size_t* p = (size_t*)buffer;
*p = size;
// wxURLDataObject
// ----------------------------------------------------------------------------
-class CFSTR_SHELLURLDataObject:public wxCustomDataObject
+class CFSTR_SHELLURLDataObject : public wxCustomDataObject
{
public:
CFSTR_SHELLURLDataObject() : wxCustomDataObject(CFSTR_SHELLURL) {}
protected:
- virtual size_t GetBufferOffset( const wxDataFormat& format )
+ virtual size_t GetBufferOffset( const wxDataFormat& WXUNUSED(format) )
{
return 0;
}
virtual const void* GetSizeFromBuffer( const void* buffer, size_t* size,
- const wxDataFormat& format )
+ const wxDataFormat& WXUNUSED(format) )
{
// CFSTR_SHELLURL is _always_ ANSI text
*size = strlen( (const char*)buffer );
return buffer;
}
- virtual void* SetSizeInBuffer( void* buffer, size_t size,
- const wxDataFormat& format )
+ virtual void* SetSizeInBuffer( void* buffer, size_t WXUNUSED(size),
+ const wxDataFormat& WXUNUSED(format) )
{
return buffer;
}
+
#if wxUSE_UNICODE
virtual bool GetDataHere( void* buffer ) const
{
// CFSTR_SHELLURL is _always_ ANSI!
wxCharBuffer char_buffer( GetDataSize() );
wxCustomDataObject::GetDataHere( (void*)char_buffer.data() );
- wxString unicode_buffer( char_buffer );
+ wxString unicode_buffer( char_buffer, wxConvLibc );
memcpy( buffer, unicode_buffer.c_str(),
( unicode_buffer.length() + 1 ) * sizeof(wxChar) );
#endif
};
+
+
wxURLDataObject::wxURLDataObject()
{
// we support CF_TEXT and CFSTR_SHELLURL formats which are basicly the same
void wxURLDataObject::SetURL(const wxString& url)
{
- SetData(wxDataFormat(wxDF_TEXT), url.Length()+1, url.c_str());
- SetData(wxDataFormat(CFSTR_SHELLURL), url.Length()+1, url.c_str());
+ SetData(wxDataFormat(wxUSE_UNICODE ? wxDF_UNICODETEXT : wxDF_TEXT),
+ url.Length()+1, url.c_str());
+
+ // CFSTR_SHELLURL is always supposed to be ANSI...
+ wxWX2MBbuf urlA = (wxWX2MBbuf)url.mbc_str();
+ size_t len = strlen(urlA);
+ SetData(wxDataFormat(CFSTR_SHELLURL), len+1, (const char*)urlA);
}
// ----------------------------------------------------------------------------