]> git.saurik.com Git - wxWidgets.git/commitdiff
implementation streamlined
authorStefan Csomor <csomor@advancedconcepts.ch>
Thu, 23 Mar 2006 18:16:02 +0000 (18:16 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Thu, 23 Mar 2006 18:16:02 +0000 (18:16 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38314 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/dataobj.cpp

index c7d0d610a3dbeda0f20acdd638b1b69b974f3612..5de37f5e061426fa6c3444a98ec276df962a3884 100644 (file)
@@ -24,6 +24,9 @@
 #include "wx/mstream.h"
 #include "wx/image.h"
 #include "wx/metafile.h"
+#include "wx/tokenzr.h"
+
+
 #include "wx/mac/private.h"
 
 #ifndef __DARWIN__
@@ -202,46 +205,51 @@ void wxTextDataObject::GetAllFormats( wxDataFormat *formats, wxDataObjectBase::D
 // wxFileDataObject
 // ----------------------------------------------------------------------------
 
+void wxFileDataObject::GetFileNames(wxCharBuffer &buf) const
+{
+    wxString filenames;
+    
+    for (size_t i = 0; i < m_filenames.GetCount(); i++)
+    {
+        filenames += m_filenames[i];
+        filenames += wxT('\n');
+    }
+    
+    buf = filenames.fn_str();
+}
+
 bool wxFileDataObject::GetDataHere( void *pBuf ) const
 {
     if (pBuf == NULL)
         return false;
 
-    wxString sFilenames;
+    wxCharBuffer buf;
+    GetFileNames( buf );
 
-    for (size_t i = 0; i < m_filenames.GetCount(); i++)
-    {
-        sFilenames += m_filenames[i];
-        sFilenames += (wxChar)0;
-    }
-
-    memcpy( pBuf, sFilenames.mbc_str(), sFilenames.Len() + 1 );
+    memcpy( pBuf, (const char*) buf, strlen(buf) + 1 );
 
     return true;
 }
 
 size_t wxFileDataObject::GetDataSize() const
 {
-    size_t nRes = 0;
+    wxCharBuffer buf;
+    GetFileNames( buf );
 
-    for (size_t i = 0; i < m_filenames.GetCount(); i++)
-    {
-        nRes += m_filenames[i].Len();
-        nRes += 1;
-    }
-
-    return nRes + 1;
+    return strlen(buf) + 1;
 }
 
-bool wxFileDataObject::SetData( size_t WXUNUSED(nSize), const void *pBuf )
+bool wxFileDataObject::SetData( size_t nSize, const void *pBuf )
 {
-    m_filenames.Empty();
-
-    // only add if this is not an empty string
-    // we can therefore clear the list by just setting an empty string
-    if ((*(const char*)pBuf) != 0)
-        AddFile( wxString::FromAscii( (char*)pBuf) );
+    wxString filenames;
+#if wxUSE_UNICODE
+    filenames = wxString( (const char*) pBuf , *wxConvFileName );
+#else
+    filenames = wxString( wxConvFileName->cMB2WX( pBuf ) , wxConvLocal );
+#endif
 
+    m_filenames = wxStringTokenize( filenames , wxT("\n") , wxTOKEN_STRTOK );
+    
     return true;
 }