]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dataobj.cpp
Finally fixed control scrolling
[wxWidgets.git] / src / mac / carbon / dataobj.cpp
index e216ad588751f765004c05fd02b11a9a19c91b08..748c387ad6bd47d4ff94563cb7372b37959bbf2d 100644 (file)
 
 #if wxUSE_DATAOBJ
 
+#include "wx/dataobj.h"
+
 #ifndef WX_PRECOMP
-#include "wx/intl.h"
+    #include "wx/intl.h"
+    #include "wx/log.h"
+    #include "wx/dcmemory.h"
+    #include "wx/image.h"
 #endif
 
-#include "wx/log.h"
-#include "wx/dataobj.h"
-#include "wx/dcmemory.h"
 #include "wx/mstream.h"
-#include "wx/image.h"
 #include "wx/metafile.h"
+#include "wx/tokenzr.h"
+
 #include "wx/mac/private.h"
 
 #ifndef __DARWIN__
@@ -46,11 +49,6 @@ wxDataFormat::wxDataFormat( wxDataFormatId vType )
     SetType( vType );
 }
 
-wxDataFormat::wxDataFormat( const wxChar *zId )
-{
-    SetId( zId );
-}
-
 wxDataFormat::wxDataFormat( const wxString& rId )
 {
     SetId( rId );
@@ -96,7 +94,7 @@ void wxDataFormat::SetType( wxDataFormatId dataType )
 
 wxString wxDataFormat::GetId() const
 {
-    wxCHECK_MSG( !IsStandard(), wxEmptyString ,
+    wxCHECK_MSG( !IsStandard(), wxEmptyString,
                  wxT("name of predefined format cannot be retrieved") );
 
     return m_id;
@@ -127,14 +125,14 @@ void wxDataFormat::SetId( NativeFormat format )
     default:
         m_type = wxDF_PRIVATE;
         char text[5];
-        strncpy( text, (char*)&format, 4 );
+        memcpy( text, (const char*)&format, 4 );
         text[4] = 0;
         m_id = wxString::FromAscii( text );
         break;
     }
 }
 
-void wxDataFormat::SetId( const wxChar* zId )
+void wxDataFormat::SetId( const wxString& zId )
 {
     m_type = wxDF_PRIVATE;
     m_id = zId;
@@ -168,14 +166,14 @@ bool wxDataObject::IsSupportedFormat( const wxDataFormat& rFormat, Direction vDi
     }
     else
     {
-        wxDataFormatpFormats = new wxDataFormat[nFormatCount];
+        wxDataFormat *pFormats = new wxDataFormat[nFormatCount];
         GetAllFormats( pFormats, vDir );
 
         for (size_t n = 0; n < nFormatCount; n++)
         {
             if (pFormats[n] == rFormat)
             {
-               found = true;
+                found = true;
                 break;
             }
         }
@@ -202,45 +200,56 @@ void wxTextDataObject::GetAllFormats( wxDataFormat *formats, wxDataObjectBase::D
 // wxFileDataObject
 // ----------------------------------------------------------------------------
 
-bool wxFileDataObject::GetDataHere( void *pBuf ) const
+void wxFileDataObject::GetFileNames( wxCharBuffer &buf ) const
 {
-    if (pBuf == NULL)
-        return false;
-
-    wxString sFilenames;
+    wxString filenames;
 
     for (size_t i = 0; i < m_filenames.GetCount(); i++)
     {
-        sFilenames += m_filenames[i];
-        sFilenames += (wxChar)0;
+        filenames += m_filenames[i];
+        filenames += wxT('\n');
     }
 
-    memcpy( pBuf, sFilenames.mbc_str(), sFilenames.Len() + 1 );
+    buf = filenames.fn_str();
+}
+
+bool wxFileDataObject::GetDataHere( void *pBuf ) const
+{
+    if (pBuf == NULL)
+        return false;
+
+    wxCharBuffer buf;
+    size_t buffLength;
+
+    GetFileNames( buf );
+    buffLength = strlen( buf );
+    memcpy( pBuf, (const char*)buf, buffLength + 1 );
 
     return true;
 }
 
 size_t wxFileDataObject::GetDataSize() const
 {
-    size_t nRes = 0;
+    wxCharBuffer buf;
+    size_t buffLength;
 
-    for (size_t i = 0; i < m_filenames.GetCount(); i++)
-    {
-        nRes += m_filenames[i].Len();
-        nRes += 1;
-    }
+    GetFileNames( buf );
+    buffLength = strlen( buf );
 
-    return nRes + 1;
+    return buffLength + 1;
 }
 
-bool wxFileDataObject::SetData( size_t WXUNUSED(nSize), const void *pBuf )
+bool wxFileDataObject::SetData( size_t nSize, const void *pBuf )
 {
-    m_filenames.Empty();
+    wxString filenames;
 
-    // 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) );
+#if wxUSE_UNICODE
+    filenames = wxString( (const char*)pBuf, *wxConvFileName );
+#else
+    filenames = wxString (wxConvLocal.cWC2WX(wxConvFileName->cMB2WC( (const char*)pBuf)));
+#endif
+
+    m_filenames = wxStringTokenize( filenames, wxT("\n"), wxTOKEN_STRTOK );
 
     return true;
 }
@@ -297,8 +306,10 @@ void wxBitmapDataObject::Clear()
 {
     if (m_pictHandle != NULL)
     {
+#ifndef __LP64__
         if (m_pictCreated)
             KillPicture( (PicHandle)m_pictHandle );
+#endif
         m_pictHandle = NULL;
     }
 
@@ -342,15 +353,21 @@ bool wxBitmapDataObject::SetData( size_t nSize, const void *pBuf )
 
     // ownership is transferred to the bitmap
     m_pictCreated = false;
-    Rect frame = (**picHandle).picFrame;
-
+#ifndef __LP64__
+    Rect frame;
+    wxMacGetPictureBounds( picHandle, &frame );
+#if wxUSE_METAFILE
     wxMetafile mf;
     mf.SetHMETAFILE( (WXHMETAFILE)m_pictHandle );
+#endif
     wxMemoryDC mdc;
     m_bitmap.Create( frame.right - frame.left, frame.bottom - frame.top );
     mdc.SelectObject( m_bitmap );
+#if wxUSE_METAFILE  
     mf.Play( &mdc );
+#endif
     mdc.SelectObject( wxNullBitmap );
+#endif
 
     return m_bitmap.Ok();
 }