]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dataobj.h
Explicit casting/instantiation to resolve ambiguous overload.
[wxWidgets.git] / include / wx / dataobj.h
index ef2a97920dbd78e9fa191554f74588d13d2fc7ae..95e4296b55b3bb0604a333262c7e1c2328c59946 100644 (file)
+///////////////////////////////////////////////////////////////////////////////
+// Name:        dataobj.h
+// Purpose:     common data object classes
+// Author:      Robert Roebling, Vadim Zeitlin
+// Modified by:
+// Created:     26.05.99
+// RCS-ID:      $Id$
+// Copyright:   (c) wxWindows Team
+// Licence:     wxWindows license
+///////////////////////////////////////////////////////////////////////////////
+
 #ifndef _WX_DATAOBJ_H_BASE_
 #define _WX_DATAOBJ_H_BASE_
 
 #if defined(__WXMSW__)
-#include "wx/msw/ole/dataobj.h"
+// ----------------------------------------------------------------------------
+// wxDataFormat identifies the single format of data
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxDataFormat
+{
+public:
+    // the clipboard formats under Win32 are UINTs
+    typedef unsigned int NativeFormat;
+
+    wxDataFormat(NativeFormat format = wxDF_INVALID) { m_format = format; }
+    wxDataFormat& operator=(NativeFormat format)
+        { m_format = format; return *this; }
+
+    // defautl copy ctor/assignment operators ok
+
+    // comparison (must have both versions)
+    bool operator==(wxDataFormatId format) const
+        { return m_format == (NativeFormat)format; }
+    bool operator!=(wxDataFormatId format) const
+        { return m_format != (NativeFormat)format; }
+    bool operator==(const wxDataFormat& format) const
+        { return m_format == format.m_format; }
+    bool operator!=(const wxDataFormat& format) const
+        { return m_format != format.m_format; }
+
+    // explicit and implicit conversions to NativeFormat which is one of
+    // standard data types (implicit conversion is useful for preserving the
+    // compatibility with old code)
+    NativeFormat GetFormatId() const { return m_format; }
+    operator NativeFormat() const { return m_format; }
+
+    // this only works with standard ids
+    void SetId(wxDataFormatId format) { m_format = format; }
+
+    // string ids are used for custom types - this SetId() must be used for
+    // application-specific formats
+    wxString GetId() const;
+    void SetId(const wxChar *format);
+
+private:
+    // returns TRUE if the format is one of those defined in wxDataFormatId
+    bool IsStandard() const { return m_format > 0 && m_format < wxDF_MAX; }
+
+    NativeFormat m_format;
+};
+
+    #include "wx/msw/ole/dataobj.h"
 #elif defined(__WXMOTIF__)
-#include "wx/motif/dnd.h"
+    #include "wx/motif/dataobj.h"
 #elif defined(__WXGTK__)
-#include "wx/gtk/dataobj.h"
+    #include "wx/gtk/dataobj.h"
 #elif defined(__WXQT__)
-#include "wx/qt/dnd.h"
+    #include "wx/qt/dnd.h"
 #elif defined(__WXMAC__)
-#include "wx/mac/dnd.h"
+    #include "wx/mac/dnd.h"
 #elif defined(__WXSTUBS__)
-#include "wx/stubs/dnd.h"
+    #include "wx/stubs/dnd.h"
+#endif
+
+// ---------------------------------------------------------------------------
+// wxPrivateDataObject is a specialization of wxDataObject for app specific
+// data (of some given kind, derive directly from wxDataObject if you wish to
+// efficiently support multiple formats)
+// ---------------------------------------------------------------------------
+
+class WXDLLEXPORT wxPrivateDataObject : public wxDataObject
+{
+#ifdef __WXGTK__
+    DECLARE_DYNAMIC_CLASS( wxPrivateDataObject )
 #endif
 
+public:
+    wxPrivateDataObject();
+    virtual ~wxPrivateDataObject() { Free(); }
+
+    // get the format object - it is used to decide whether we support the
+    // given output format or not
+    wxDataFormat& GetFormat() { return m_format; }
+
+    // set data. will make copy of the data
+    void SetData( const void *data, size_t size );
+
+    // returns pointer to data
+    void *GetData() const { return m_data; }
+
+    // get the size of the data
+    virtual size_t GetSize() const;
+
+    // copy data to the given buffer
+    virtual void WriteData( void *dest ) const;
+
+    // these functions are provided for wxGTK compatibility, their usage is
+    // deprecated - use GetFormat().SetId() instead
+    void SetId( const wxString& id ) { m_format.SetId(id); }
+    wxString GetId() const { return m_format.GetId(); }
+
+    // implement the base class pure virtuals
+    virtual wxDataFormat GetPreferredFormat() const
+        { return m_format; }
+    virtual bool IsSupportedFormat(wxDataFormat format) const
+        { return m_format == format; }
+    virtual size_t GetDataSize() const
+        { return m_size; }
+    virtual void GetDataHere(void *dest) const
+        { WriteData(dest); }
+
+    // the function which really copies the data - called by WriteData() above
+    // and uses GetSize() to get the size of the data
+    void WriteData( const void *data, void *dest ) const;
+
+private:
+    // free the data
+    inline void Free();
+
+    // the data
+    size_t     m_size;
+    void      *m_data;
+
+    // the data format
+    wxDataFormat m_format;
+};
+
+
 #endif
     // _WX_DATAOBJ_H_BASE_