]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/ole/dataobj.cpp
WinCE fixes (in case a WinCE-friendly backend gets written one day)
[wxWidgets.git] / src / msw / ole / dataobj.cpp
index 83a2761aa0742aa46ca24c0b4d4cb6b7f78d6fff..b6da92aa47a655da5d1060c6f72a3d64779f6678 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
-    #pragma implementation "dataobj.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -106,9 +102,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;
 
@@ -157,8 +153,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 )
     {
@@ -268,7 +263,7 @@ IMPLEMENT_IUNKNOWN_METHODS(wxIDataObject)
 wxIDataObject::wxIDataObject(wxDataObject *pDataObject)
 {
     m_pDataObject = pDataObject;
-    m_mustDelete = FALSE;
+    m_mustDelete = false;
 }
 
 wxIDataObject::~wxIDataObject()
@@ -466,7 +461,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__) )
@@ -501,7 +496,7 @@ STDMETHODIMP wxIDataObject::SetData(FORMATETC *pformatetc,
                             // 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  );
                             }
                         }
@@ -625,7 +620,7 @@ STDMETHODIMP wxIDataObject::EnumFormatEtc(DWORD dwDir,
     wxDataObject::Direction dir = dwDir == DATADIR_GET ? wxDataObject::Get
                                                        : wxDataObject::Set;
 
-    size_t nFormatCount = m_pDataObject->GetFormatCount(dir);
+    ULONG nFormatCount = wx_truncate_cast(ULONG, m_pDataObject->GetFormatCount(dir));
     wxDataFormat format;
     wxDataFormat *formats;
     formats = nFormatCount == 1 ? &format : new wxDataFormat[nFormatCount];
@@ -724,7 +719,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");
@@ -735,9 +729,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)) )
@@ -760,9 +757,11 @@ 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
+#if wxUSE_WXDIB && !defined(__WXWINCE__)
     return wxDIB::ConvertFromBitmap(NULL, GetHbitmapOf(GetBitmap()));
 #else
     return 0;
@@ -771,18 +770,19 @@ size_t wxBitmapDataObject::GetDataSize() const
 
 bool wxBitmapDataObject::GetDataHere(void *buf) const
 {
-#if wxUSE_WXDIB
+#if wxUSE_WXDIB && !defined(__WXWINCE__)
     BITMAPINFO * const pbi = (BITMAPINFO *)buf;
 
     return wxDIB::ConvertFromBitmap(pbi, GetHbitmapOf(GetBitmap())) != 0;
 #else
-    return FALSE;
+    wxUnusedVar(buf);
+    return false;
 #endif
 }
 
 bool wxBitmapDataObject::SetData(size_t WXUNUSED(len), const void *buf)
 {
-#if wxUSE_WXDIB
+#if wxUSE_WXDIB && !defined(__WXWINCE__)
     const BITMAPINFO * const pbmi = (const BITMAPINFO *)buf;
 
     HBITMAP hbmp = wxDIB::ConvertToBitmap(pbmi);
@@ -797,9 +797,10 @@ bool wxBitmapDataObject::SetData(size_t WXUNUSED(len), const void *buf)
 
     SetBitmap(bitmap);
 
-    return TRUE;
+    return true;
 #else
-    return FALSE;
+    wxUnusedVar(buf);
+    return false;
 #endif
 }
 
@@ -822,7 +823,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)
@@ -841,12 +842,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
@@ -911,7 +912,7 @@ bool wxBitmapDataObject::GetDataHere(const wxDataFormat& format,
         {
             wxLogLastError(wxT("GetDIBits"));
 
-            return FALSE;
+            return false;
         }
     }
     else // CF_BITMAP
@@ -920,7 +921,7 @@ bool wxBitmapDataObject::GetDataHere(const wxDataFormat& format,
         *(HBITMAP *)pBuf = hbmp;
     }
 
-    return TRUE;
+    return true;
 }
 
 bool wxBitmapDataObject::SetData(const wxDataFormat& format,
@@ -965,7 +966,7 @@ bool wxBitmapDataObject::SetData(const wxDataFormat& format,
 
     wxASSERT_MSG( m_bitmap.Ok(), wxT("pasting invalid bitmap") );
 
-    return TRUE;
+    return true;
 }
 
 #endif // 0
@@ -974,7 +975,8 @@ bool wxBitmapDataObject::SetData(const wxDataFormat& format,
 // wxFileDataObject
 // ----------------------------------------------------------------------------
 
-bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *pData)
+bool wxFileDataObject::SetData(size_t WXUNUSED(size),
+                               const void *WXUNUSED_IN_WINCE(pData))
 {
 #ifndef __WXWINCE__
     m_filenames.Empty();
@@ -999,8 +1001,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 ) {
@@ -1009,9 +1010,9 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *pData)
         }
     }
 
-    return TRUE;
+    return true;
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -1035,13 +1036,13 @@ 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;
@@ -1050,7 +1051,7 @@ size_t wxFileDataObject::GetDataSize() const
 #endif
 }
 
-bool wxFileDataObject::GetDataHere(void *pData) const
+bool wxFileDataObject::GetDataHere(void *WXUNUSED_IN_WINCE(pData)) const
 {
 #ifndef __WXWINCE__
     // pData points to an externally allocated memory block
@@ -1058,7 +1059,7 @@ bool wxFileDataObject::GetDataHere(void *pData) const
 
     // 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;
@@ -1080,7 +1081,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');
     }
@@ -1088,9 +1089,9 @@ bool wxFileDataObject::GetDataHere(void *pData) const
     // add final null terminator
     *pbuf = wxT('\0');
 
-    return TRUE;
+    return true;
 #else
-    return FALSE;
+    return false;
 #endif
 }
 
@@ -1133,9 +1134,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)
 };
 
 
@@ -1171,8 +1177,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;
 }
@@ -1214,10 +1219,13 @@ static const wxChar *GetTymedName(DWORD tymed)
 #endif // Debug
 
 #else // not using OLE at all
+
 // ----------------------------------------------------------------------------
 // wxDataObject
 // ----------------------------------------------------------------------------
 
+#if wxUSE_DATAOBJ
+
 wxDataObject::wxDataObject()
 {
 }
@@ -1231,11 +1239,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