]> git.saurik.com Git - wxWidgets.git/commitdiff
wxDataObject and wxDropSource classes for (more) d&d support
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 May 1998 23:24:11 +0000 (23:24 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 May 1998 23:24:11 +0000 (23:24 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/ole/dataobj.h [new file with mode: 0644]
include/wx/msw/ole/dropsrc.h [new file with mode: 0644]

diff --git a/include/wx/msw/ole/dataobj.h b/include/wx/msw/ole/dataobj.h
new file mode 100644 (file)
index 0000000..cdad686
--- /dev/null
@@ -0,0 +1,111 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        ole/dataobj.h
+// Purpose:     declaration of the wxDataObject class
+// Author:      Vadim Zeitlin
+// Modified by: 
+// Created:     10.05.98
+// RCS-ID:      $Id$
+// Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
+// Licence:     wxWindows license
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef   _OLEDATAOBJ_H
+#define   _OLEDATAOBJ_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 wxDataObject
+{
+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
+  };
+
+  #ifdef  __DEBUG__
+    // function to return symbolic name of clipboard format (debug messages)
+    static const char *GetFormatName(wxDataFormat format);
+  #endif
+
+  // 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 uint 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; }
+
+private:
+  IDataObject *m_pIDataObject; // pointer to the COM interface
+};
+
+// ----------------------------------------------------------------------------
+// wxTextDataObject is a specialization of wxDataObject for text data
+// ----------------------------------------------------------------------------
+class wxTextDataObject : public wxDataObject
+{
+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 wxDataObject::Text; }
+  virtual bool IsSupportedFormat(wxDataFormat format) const
+    { return format == wxDataObject::Text || format == wxDataObject::Locale; }
+  virtual uint 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()); }
+
+private:
+  wxString  m_strText;
+};
+
+// ----------------------------------------------------------------------------
+// @@@ TODO: wx{Bitmap|Metafile|...}DataObject
+// ----------------------------------------------------------------------------
+
+#endif  //_OLEDATAOBJ_H
\ No newline at end of file
diff --git a/include/wx/msw/ole/dropsrc.h b/include/wx/msw/ole/dropsrc.h
new file mode 100644 (file)
index 0000000..1f932f0
--- /dev/null
@@ -0,0 +1,71 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        ole/dropsrc.h
+// Purpose:     declaration of the wxDropSource class
+// Author:      Vadim Zeitlin
+// Modified by: 
+// Created:     06.03.98
+// RCS-ID:      $Id$
+// Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
+// Licence:     wxWindows license
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef   _OLEDROPSRC_H
+#define   _OLEDROPSRC_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#if !USE_DRAG_AND_DROP
+  #error  "You should #define USE_DRAG_AND_DROP to 1 to compile this file!"
+#endif  //WX_DRAG_DROP
+
+// ----------------------------------------------------------------------------
+// forward declarations
+// ----------------------------------------------------------------------------
+class wxIDropSource;
+class wxDataObject;
+
+// ----------------------------------------------------------------------------
+// wxDropSource is used to start the drag-&-drop operation on associated
+// wxDataObject object. It's responsible for giving UI feedback while dragging.
+// ----------------------------------------------------------------------------
+class wxDropSource
+{
+public:
+  enum DragResult
+  {
+    Error,    // error prevented the d&d operation from completing
+    None,     // drag target didn't accept the data
+    Copy,     // the data was successfully copied
+    Move,     // the data was successfully moved
+    Cancel    // the operation was cancelled by user (not an error)
+  };
+
+  // ctors: if you use default ctor you must call SetData() later!
+  wxDropSource();
+  wxDropSource(wxDataObject& data);
+
+  void SetData(wxDataObject& data);
+
+  virtual ~wxDropSource();
+
+  // do it (call this in response to a mouse button press, for example)
+  // params: if bAllowMove is false, data can be only copied
+  DragResult DoDragDrop(bool bAllowMove = false);
+
+  // overridable: you may give some custom UI feedback during d&d operation
+  // in this function (it's called on each mouse move, so it shouldn't be too
+  // slow). Just return false if you want default feedback.
+  virtual bool GiveFeedback(DragResult effect, bool bScrolling);
+
+protected:
+  void Init();
+
+  wxDataObject  *m_pData;         // pointer to associated data object
+
+private:
+  wxIDropSource *m_pIDropSource;  // the pointer to COM interface
+};
+
+#endif  //_OLEDROPSRC_H
\ No newline at end of file