]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/ole/dataobj.h
added selecting-while-dragging
[wxWidgets.git] / include / wx / msw / ole / dataobj.h
index 34cd92557a49505f44ab3c13bdf84fd11d578748..f686ef4bb755eaf5c3939c69a41b90ad20de1d43 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        ole/dataobj.h
+// Name:        msw/ole/dataobj.h
 // Purpose:     declaration of the wxDataObject class
 // Author:      Vadim Zeitlin
-// Modified by: 
+// Modified by:
 // Created:     10.05.98
 // RCS-ID:      $Id$
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifndef   _WX_OLEDATAOBJ_H
-#define   _WX_OLEDATAOBJ_H
-
-#include "wx/bitmap.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;
-};
+#ifndef   _WX_MSW_OLE_DATAOBJ_H
+#define   _WX_MSW_OLE_DATAOBJ_H
 
 // ----------------------------------------------------------------------------
 // forward declarations
 // ----------------------------------------------------------------------------
+
 struct IDataObject;
 
 // ----------------------------------------------------------------------------
 // wxDataObject is a "smart" and polymorphic piece of data.
-//
-// TODO it's currently "read-only" from COM point of view, i.e. we don't support
-//      SetData. We don't support all advise functions neither (but it's easy to
-//      do if we really want them)
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxDataObject
+class WXDLLEXPORT wxDataObject : public wxDataObjectBase
 {
 public:
-  // function to return symbolic name of clipboard format (debug messages)
-  static const char *GetFormatName(wxDataFormat format);
-
-  // ctor & dtor
-  wxDataObject();
-  virtual ~wxDataObject();
+    // ctor & dtor
+    wxDataObject();
+    virtual ~wxDataObject();
 
-  // pure virtuals to override
-    // get the best suited format for our data
-  virtual wxDataFormat GetPreferredFormat() const = 0;
-    // decide if we support this format (should be one of values of
-    // wxDataFormatId enumerations or a user-defined format)
-  virtual bool IsSupportedFormat(wxDataFormat format) const = 0;
-    // get the (total) size of data
-  virtual size_t GetDataSize() const = 0;
-    // copy raw data to provided pointer
-  virtual void GetDataHere(void *pBuf) const = 0;
-
-  // accessors
     // retrieve IDataObject interface (for other OLE related classes)
-  IDataObject *GetInterface() const { return m_pIDataObject; }
-
-  ////// wxGTK compatibility: hopefully to become the preferred API.
-  virtual wxDataFormat GetFormat() const { return GetPreferredFormat(); }
-
-private:
-  IDataObject *m_pIDataObject; // pointer to the COM interface
-};
-
-// ----------------------------------------------------------------------------
-// wxTextDataObject is a specialization of wxDataObject for text data
-// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxTextDataObject : public wxDataObject
-{
+    IDataObject *GetInterface() const { return m_pIDataObject; }
+
+    // tell the object that it should be now owned by IDataObject - i.e. when
+    // it is deleted, it should delete us as well
+    void SetAutoDelete();
+
+    // return TRUE if we support this format in "Get" direction
+    bool IsSupportedFormat(const wxDataFormat& format) const
+        { return wxDataObjectBase::IsSupported(format, Get); }
+
+    // function to return symbolic name of clipboard format (for debug messages)
+#ifdef __WXDEBUG__
+    static const wxChar *GetFormatName(wxDataFormat format);
+
+    #define wxGetFormatName(format) wxDataObject::GetFormatName(format)
+#else // !Debug
+    #define wxGetFormatName(format) _T("")
+#endif // Debug/!Debug
+    // they need to be accessed from wxIDataObject, so made them public,
+    // or wxIDataObject friend
 public:
-  // ctors
-  wxTextDataObject() { }
-  wxTextDataObject(const wxString& strText) : m_strText(strText) { }
-  void Init(const wxString& strText) { m_strText = strText; }
-
-  // implement base class pure virtuals
-  virtual wxDataFormat GetPreferredFormat() const
-    { return wxDF_TEXT; }
-  virtual bool IsSupportedFormat(wxDataFormat format) const
-    { return format == wxDF_TEXT || format == wxDF_LOCALE; }
-  virtual size_t GetDataSize() const
-    { return m_strText.Len() + 1; } // +1 for trailing '\0'of course
-  virtual void GetDataHere(void *pBuf) const
-    { memcpy(pBuf, m_strText.c_str(), GetDataSize()); }
-
-  ////// wxGTK compatibility: hopefully to become the preferred API.
-  void SetText(const wxString& strText) { m_strText = strText; }
-  wxString GetText() const { return m_strText; }
-  virtual wxDataFormat GetFormat() const { return wxDF_TEXT; }
-
+    virtual const void* GetSizeFromBuffer( const void* buffer, size_t* size,
+                                           const wxDataFormat& format );
+    virtual void* SetSizeInBuffer( void* buffer, size_t size,
+                                   const wxDataFormat& format );
+    virtual size_t GetBufferOffset( const wxDataFormat& format );
 private:
-  wxString  m_strText;
-};
-
-// ----------------------------------------------------------------------------
-// @@@ TODO: wx{Bitmap|Metafile|...}DataObject
-// ----------------------------------------------------------------------------
-
-// ----------------------------------------------------------------------------
-// wxBitmapDataObject is a specialization of wxDataObject for bitmap data
-// ----------------------------------------------------------------------------
-
-// TODO: implement OLE side of things. At present, it's just for clipboard
-// use.
-class WXDLLEXPORT wxBitmapDataObject : public wxDataObject
-{
-public:
-  // ctors
-  wxBitmapDataObject() {}
-  wxBitmapDataObject(const wxBitmap& bitmap): m_bitmap(bitmap) {}
-  void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; }
-  wxBitmap GetBitmap() const { return m_bitmap; }
-
-  virtual wxDataFormat GetFormat() const { return wxDF_BITMAP; }
-
-  // implement base class pure virtuals
-  virtual wxDataFormat GetPreferredFormat() const
-    { return wxDF_BITMAP; }
-  virtual bool IsSupportedFormat(wxDataFormat format) const
-    { return format == wxDF_BITMAP; }
-  virtual size_t GetDataSize() const
-    { wxASSERT(FALSE); return 0; } // BEMIMP
-  virtual void GetDataHere(void *pBuf) const
-    { wxASSERT(FALSE); } // BEMIMP
+    IDataObject *m_pIDataObject; // pointer to the COM interface
 
-private:
-  wxBitmap  m_bitmap;
+    DECLARE_NO_COPY_CLASS(wxDataObject)
 };
 
-// ----------------------------------------------------------------------------
-// wxMetaFileDataObject: see metafile.h is a specialization of wxDataObject for bitmap data
-// ----------------------------------------------------------------------------
-
-// TODO: wxFileDataObject.
-
-#endif  //_WX_OLEDATAOBJ_H
-
+#endif  //_WX_MSW_OLE_DATAOBJ_H