X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8fb3a512a85572ebf4b4f46eaf536727dfe4e01e..1971d23c57b3c582f32d05704914ad902ec76fa5:/src/common/dobjcmn.cpp diff --git a/src/common/dobjcmn.cpp b/src/common/dobjcmn.cpp index 53a4041c7b..868b9c2a58 100644 --- a/src/common/dobjcmn.cpp +++ b/src/common/dobjcmn.cpp @@ -27,6 +27,8 @@ #pragma hdrstop #endif +#if wxUSE_DATAOBJ + #ifndef WX_PRECOMP #include "wx/app.h" #include "wx/debug.h" @@ -47,7 +49,7 @@ WX_DEFINE_LIST(wxSimpleDataObjectList); // ---------------------------------------------------------------------------- static wxDataFormat dataFormatInvalid; -const wxDataFormat& wxFormatInvalid = dataFormatInvalid; +WXDLLEXPORT const wxDataFormat& wxFormatInvalid = dataFormatInvalid; // ============================================================================ // implementation @@ -61,6 +63,33 @@ wxDataObjectBase::~wxDataObjectBase() { } +bool wxDataObjectBase::IsSupported(const wxDataFormat& format, + Direction dir) const +{ + size_t nFormatCount = GetFormatCount(dir); + if ( nFormatCount == 1 ) + { + return format == GetPreferredFormat(dir); + } + else + { + wxDataFormat *formats = new wxDataFormat[nFormatCount]; + GetAllFormats(formats, dir); + + size_t n; + for ( n = 0; n < nFormatCount; n++ ) + { + if ( formats[n] == format ) + break; + } + + delete [] formats; + + // found? + return n < nFormatCount; + } +} + // ---------------------------------------------------------------------------- // wxDataObjectComposite // ---------------------------------------------------------------------------- @@ -232,9 +261,9 @@ void wxFileDataObjectBase::SetFilenames(const wxChar* filenames) wxCustomDataObject::wxCustomDataObject(const wxDataFormat& format) : wxDataObjectSimple(format) { + m_data = (void *)NULL; } - wxCustomDataObject::~wxCustomDataObject() { Free(); @@ -255,7 +284,7 @@ void *wxCustomDataObject::Alloc(size_t size) void wxCustomDataObject::Free() { - delete [] m_data; + delete [] (char *)m_data; m_size = 0; m_data = (void *)NULL; } @@ -301,9 +330,13 @@ bool wxCustomDataObject::SetData(size_t size, const void *buf) // wxTextDropTarget // ---------------------------------------------------------------------------- +// NB: we can't use "new" in ctor initializer lists because this provokes an +// internal compiler error with VC++ 5.0 (hey, even gcc compiles this!), +// so use SetDataObject() instead + wxTextDropTarget::wxTextDropTarget() - : wxDropTarget(new wxTextDataObject) { + SetDataObject(new wxTextDataObject); } wxDragResult wxTextDropTarget::OnData(wxCoord x, wxCoord y, wxDragResult def) @@ -320,8 +353,8 @@ wxDragResult wxTextDropTarget::OnData(wxCoord x, wxCoord y, wxDragResult def) // ---------------------------------------------------------------------------- wxFileDropTarget::wxFileDropTarget() - : wxDropTarget(new wxFileDataObject) { + SetDataObject(new wxFileDataObject); } wxDragResult wxFileDropTarget::OnData(wxCoord x, wxCoord y, wxDragResult def) @@ -333,5 +366,6 @@ wxDragResult wxFileDropTarget::OnData(wxCoord x, wxCoord y, wxDragResult def) return OnDropFiles(x, y, dobj->GetFilenames()) ? def : wxDragNone; } -#endif +#endif // wxUSE_DRAG_AND_DROP +#endif // wxUSE_DATAOBJ