]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/ole/dataobj.h
fix wxBitmap mask copying
[wxWidgets.git] / include / wx / msw / ole / dataobj.h
index 80a1e13e43175e6ae98261172724cd74e15797eb..0cb65ba03c64c67305daa90949e5f4a2dc96261f 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
+#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.
-//
-// @@@ 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:
-  // all data formats (values are the same as in windows.h, do not change!)
-  enum StdFormat
-  {
-    Invalid,
-    Text,
-    Bitmap,
-    MetafilePict,
-    Sylk,
-    Dif,
-    Tiff,
-    OemText,
-    Dib,
-    Palette,
-    Pendata,
-    Riff,
-    Wave,
-    UnicodeText,
-    EnhMetafile,
-    Hdrop,
-    Locale,
-    Max
-  };
-
-  // function to return symbolic name of clipboard format (debug messages)
-  static const char *GetFormatName(wxDataFormat format);
-
-  // ctor & dtor
-  wxDataObject();
-  ~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
-    // StdFormat 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;
+    // ctor & dtor
+    wxDataObject();
+    virtual ~wxDataObject();
 
-  // 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); }
+
+    // if this method returns false, this wxDataObject will be copied to
+    // the clipboard with its size prepended to it, which is compatible with
+    // older wx versions
+    //
+    // if returns true, then this wxDataObject will be copied to the clipboard
+    // without any additional information and ::HeapSize() function will be used
+    // to get the size of that data
+    virtual bool NeedsVerbatimData(const wxDataFormat& WXUNUSED(format)) const
+    {
+        // return false from here only for compatibility with earlier wx versions
+        return true;
+    }
+
+    // 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 (wxDataFormat) wxDataObject::Text; }
-  virtual bool IsSupportedFormat(wxDataFormat format) const
-    { return format == wxDataObject::Text || format == wxDataObject::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; }
+    IDataObject *m_pIDataObject; // pointer to the COM interface
 
-  virtual wxDataFormat GetFormat() const { return wxDF_BITMAP; }
-
-  // implement base class pure virtuals
-  virtual wxDataFormat GetPreferredFormat() const
-    { return (wxDataFormat) wxDataObject::Bitmap; }
-  virtual bool IsSupportedFormat(wxDataFormat format) const
-    { return format == wxDataObject::Bitmap; }
-  virtual size_t GetDataSize() const
-    { wxASSERT(false); return 0; } // BEMIMP
-  virtual void GetDataHere(void *pBuf) const
-    { wxASSERT(false); } // BEMIMP
-
-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