// 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"
-#include "Scrap.h"
+#ifndef __DARWIN__
+#include <Scrap.h>
+#endif
// ----------------------------------------------------------------------------
// functions
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
{
- char text[5] ;
- strncpy( text , (char*) m_format , 4 ) ;
- text[4] = 0 ;
- return wxString::FromAscii( text ) ;
+ wxCHECK_MSG( !IsStandard(), wxEmptyString ,
+ wxT("name of predefined format cannot be retrieved") );
+
+ return m_id ;
}
void wxDataFormat::SetId( NativeFormat format )
if (m_format == kScrapFlavorTypeText)
m_type = wxDF_TEXT;
- else
- if (m_format == kScrapFlavorTypeUnicode )
+ else if (m_format == kScrapFlavorTypeUnicode )
m_type = wxDF_UNICODETEXT;
- else
- if (m_format == kScrapFlavorTypePicture)
+ 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 ) ;
+ }
}
//-------------------------------------------------------------------------
}
}
+// ----------------------------------------------------------------------------
+// wxTextDataObject
+// ----------------------------------------------------------------------------
+
+#if wxUSE_UNICODE
+void wxTextDataObject::GetAllFormats(wxDataFormat *formats, wxDataObjectBase::Direction dir) const
+{
+ *formats++ = wxDataFormat( wxDF_TEXT );
+ *formats = wxDataFormat( wxDF_UNICODETEXT );
+}
+
+#endif
+
// ----------------------------------------------------------------------------
// wxFileDataObject
// ----------------------------------------------------------------------------
{
m_filenames.Empty();
- AddFile(wxString::FromAscii((char*)pBuf));
+ // 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;
}
Init();
if ( m_bitmap.Ok() )
{
- m_pictHandle = m_bitmap.GetPict( &m_pictCreated ) ;
+ m_pictHandle = m_bitmap.GetBitmapData()->GetPictHandle() ;
+ m_pictCreated = false ;
}
}
wxBitmapDataObjectBase::SetBitmap(rBitmap);
if ( m_bitmap.Ok() )
{
- m_pictHandle = m_bitmap.GetPict( &m_pictCreated ) ;
+ m_pictHandle = m_bitmap.GetBitmapData()->GetPictHandle() ;
+ m_pictCreated = false ;
}
}
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