X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e40298d54ecd5b109222a7c60aa2ef084a304d69..76e36d433484b94cb5b7c3668fbce85ceebe508c:/src/mac/carbon/dataobj.cpp diff --git a/src/mac/carbon/dataobj.cpp b/src/mac/carbon/dataobj.cpp index 15377f7f5b..e6e4af8767 100644 --- a/src/mac/carbon/dataobj.cpp +++ b/src/mac/carbon/dataobj.cpp @@ -1,12 +1,12 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: os2/dataobj.cpp -// Purpose: implementation of wx[I]DataObject class -// Author: David Webster +// Name: mac/dataobj.cpp +// Purpose: implementation of wxDataObject class +// Author: Stefan Csomor // Modified by: // Created: 10/21/99 // RCS-ID: $Id$ -// Copyright: (c) 1999 David Webster -// Licence: wxWindows license +// Copyright: (c) 1999 Stefan Csomor +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,23 +17,25 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "dataobj.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#if wxUSE_DATAOBJ + #ifndef WX_PRECOMP #include "wx/intl.h" #endif -#include "wx/defs.h" #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/mac/private.h" +#ifndef __DARWIN__ +#include +#endif // ---------------------------------------------------------------------------- // functions @@ -73,51 +75,71 @@ void wxDataFormat::SetType( wxDataFormatId Type ) { m_type = Type; - if (m_type == wxDF_TEXT) - m_format = 'TEXT'; + if (m_type == wxDF_TEXT ) + m_format = kScrapFlavorTypeText; + else if (m_type == wxDF_UNICODETEXT ) + m_format = kScrapFlavorTypeUnicode ; else if (m_type == wxDF_BITMAP || m_type == wxDF_METAFILE ) - m_format = 'PICT'; + m_format = kScrapFlavorTypePicture; else if (m_type == wxDF_FILENAME) m_format = kDragFlavorTypeHFS ; else { wxFAIL_MSG( wxT("invalid dataformat") ); - } -} -wxDataFormatId wxDataFormat::GetType() const -{ - return m_type; + // this is '????' but it can't be used in the code because ??' is + // parsed as a trigraph! + m_format = 0x3f3f3f3f; + } } wxString wxDataFormat::GetId() const { - wxString sRet(""); // TODO: to name of ( m_format ) ); - return sRet; + wxCHECK_MSG( !IsStandard(), wxEmptyString , + wxT("name of predefined format cannot be retrieved") ); + + return m_id ; } void wxDataFormat::SetId( NativeFormat format ) { m_format = format; - if (m_format == 'TEXT') + if (m_format == kScrapFlavorTypeText) m_type = wxDF_TEXT; - else - if (m_format == 'PICT') + else if (m_format == kScrapFlavorTypeUnicode ) + m_type = wxDF_UNICODETEXT; + else if (m_format == kScrapFlavorTypePicture) m_type = wxDF_BITMAP; - else - if (m_format == kDragFlavorTypeHFS ) + else if (m_format == kDragFlavorTypeHFS ) m_type = wxDF_FILENAME; else + { m_type = wxDF_PRIVATE; + char text[5] ; + strncpy( text , (char*) &format , 4 ) ; + text[4] = 0 ; + m_id = wxString::FromAscii( text ) ; + } } void wxDataFormat::SetId( const wxChar* zId ) { - wxString tmp(zId); - m_type = wxDF_PRIVATE; - m_format = 0;// TODO: get the format gdk_atom_intern( wxMBSTRINGCAST tmp.mbc_str(), FALSE ); + m_id = zId ; + m_format = 'WXPR' ; +} + +bool wxDataFormat::operator==(const wxDataFormat& format) const +{ + if ( IsStandard() || format.IsStandard() ) + { + return ( format.m_type == m_type ) ; + } + else + { + return ( m_id == format.m_id ) ; + } } //------------------------------------------------------------------------- @@ -161,6 +183,19 @@ bool wxDataObject::IsSupportedFormat( } } +// ---------------------------------------------------------------------------- +// wxTextDataObject +// ---------------------------------------------------------------------------- + +#if wxUSE_UNICODE +void wxTextDataObject::GetAllFormats(wxDataFormat *formats, wxDataObjectBase::Direction dir) const +{ + *formats++ = wxDataFormat( wxDF_TEXT ); + *formats = wxDataFormat( wxDF_UNICODETEXT ); +} + +#endif + // ---------------------------------------------------------------------------- // wxFileDataObject // ---------------------------------------------------------------------------- @@ -201,9 +236,10 @@ bool wxFileDataObject::SetData( { m_filenames.Empty(); - wxString sFile( (const char *)pBuf); /* char, not wxChar */ - - AddFile(sFile); + // only add if this is not an empty string + // we can therefore clear the list by just setting an empty string + if ( (*(char*)pBuf) != 0 ) + AddFile(wxString::FromAscii((char*)pBuf)); return TRUE; } @@ -232,7 +268,8 @@ wxBitmapDataObject::wxBitmapDataObject( Init(); if ( m_bitmap.Ok() ) { - m_pictHandle = m_bitmap.GetPict( &m_pictCreated ) ; + m_pictHandle = m_bitmap.GetBitmapData()->GetPictHandle() ; + m_pictCreated = false ; } } @@ -249,7 +286,8 @@ void wxBitmapDataObject::SetBitmap( wxBitmapDataObjectBase::SetBitmap(rBitmap); if ( m_bitmap.Ok() ) { - m_pictHandle = m_bitmap.GetPict( &m_pictCreated ) ; + m_pictHandle = m_bitmap.GetBitmapData()->GetPictHandle() ; + m_pictCreated = false ; } } @@ -295,11 +333,19 @@ bool wxBitmapDataObject::SetData( PicHandle picHandle = (PicHandle) NewHandle( nSize ) ; memcpy( *picHandle , pBuf , nSize ) ; m_pictHandle = picHandle ; + // ownership is transferred to the bitmap m_pictCreated = false ; Rect frame = (**picHandle).picFrame ; - m_bitmap.SetPict( picHandle ) ; - m_bitmap.SetWidth( frame.right - frame.left ) ; - m_bitmap.SetHeight( frame.bottom - frame.top ) ; + wxMetafile mf ; + mf.SetHMETAFILE( (WXHMETAFILE) m_pictHandle ) ; + wxMemoryDC mdc ; + m_bitmap.Create( frame.right - frame.left ,frame.bottom - frame.top ) ; + mdc.SelectObject(m_bitmap ) ; + mf.Play( &mdc ) ; + mdc.SelectObject( wxNullBitmap ) ; + return m_bitmap.Ok(); } + +#endif \ No newline at end of file