]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/ole/dataobj.cpp
added DoSetNativeFontInfo() to avoid virtual function hiding
[wxWidgets.git] / src / msw / ole / dataobj.cpp
index 65151fbf5e73e43dd6906bb44c53f14f98335f2b..6aa1b3976262a4c91b251eb1f0467d3af3ec79fb 100644 (file)
 
 #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"
@@ -91,6 +87,8 @@ private:
     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)
 };
 
 // ----------------------------------------------------------------------------
@@ -125,6 +123,8 @@ private:
     wxDataObject *m_pDataObject;      // pointer to C++ class we belong to
 
     bool m_mustDelete;
+
+    DECLARE_NO_COPY_CLASS(wxIDataObject)
 };
 
 // ============================================================================
@@ -177,7 +177,6 @@ IMPLEMENT_IUNKNOWN_METHODS(wxIEnumFORMATETC)
 
 wxIEnumFORMATETC::wxIEnumFORMATETC(const wxDataFormat *formats, ULONG nCount)
 {
-    m_cRef = 0;
     m_nCurrent = 0;
     m_nCount = nCount;
     m_formats = new CLIPFORMAT[nCount];
@@ -268,7 +267,6 @@ IMPLEMENT_IUNKNOWN_METHODS(wxIDataObject)
 
 wxIDataObject::wxIDataObject(wxDataObject *pDataObject)
 {
-    m_cRef = 0;
     m_pDataObject = pDataObject;
     m_mustDelete = FALSE;
 }
@@ -293,7 +291,7 @@ STDMETHODIMP wxIDataObject::GetData(FORMATETC *pformatetcIn, STGMEDIUM *pmedium)
 
     // 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 )
     {
@@ -472,7 +470,7 @@ STDMETHODIMP wxIDataObject::SetData(FORMATETC *pformatetc,
     || ( 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
@@ -556,7 +554,7 @@ STDMETHODIMP wxIDataObject::QueryGetData(FORMATETC *pformatetc)
     // 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;
@@ -565,7 +563,7 @@ STDMETHODIMP wxIDataObject::QueryGetData(FORMATETC *pformatetc)
     // 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;
@@ -685,13 +683,13 @@ void wxDataObject::SetAutoDelete()
     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;
@@ -700,7 +698,7 @@ const void* wxDataObject::GetSizeFromBuffer( const void* buffer, size_t* size,
 }
 
 void* wxDataObject::SetSizeInBuffer( void* buffer, size_t size,
-                                       const wxDataFormat& format )
+                                       const wxDataFormat& WXUNUSED(format) )
 {
     size_t* p = (size_t*)buffer;
     *p = size;
@@ -1065,18 +1063,18 @@ bool wxFileDataObject::GetDataHere(void *pData) const
 // 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 );
@@ -1084,18 +1082,19 @@ protected:
         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) );
 
@@ -1104,6 +1103,8 @@ protected:
 #endif
 };
 
+
+
 wxURLDataObject::wxURLDataObject()
 {
     // we support CF_TEXT and CFSTR_SHELLURL formats which are basicly the same
@@ -1143,8 +1144,13 @@ wxString wxURLDataObject::GetURL() const
 
 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);
 }
 
 // ----------------------------------------------------------------------------