]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/os2/dnd.h
implemented (untested) work around for wxScrolledWindow painting bug
[wxWidgets.git] / include / wx / os2 / dnd.h
index 105192154fd4bb00198b78a7ef191d186c372e16..a92c744745095a20cae5b856ba21696a78b1670b 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 // Name:        dnd.h
 ///////////////////////////////////////////////////////////////////////////////
 // Name:        dnd.h
-// Purpose:     Declaration of the wxDropTarget, wxDropSource class etc.
-// Author:      AUTHOR
+// Purpose:     declaration of the wxDropTarget class
+// Author:      David Webster
+// Modified by:
+// Created:     10/21/99
 // RCS-ID:      $Id$
 // RCS-ID:      $Id$
-// Copyright:   (c) 1998 AUTHOR
-// Licence:     wxWindows licence
+// Copyright:   (c) 1999 David Webster
+// Licence:     wxWindows license
 ///////////////////////////////////////////////////////////////////////////////
 
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifndef _WX_DND_H_
-#define _WX_DND_H_
 
 
-#ifdef __GNUG__
-#pragma interface "dnd.h"
-#endif
-
-#include "wx/defs.h"
-#include "wx/object.h"
-#include "wx/string.h"
-#include "wx/cursor.h"
-
-//-------------------------------------------------------------------------
-// classes
-//-------------------------------------------------------------------------
-
-class WXDLLEXPORT wxWindow;
-
-class WXDLLEXPORT wxDataObject;
-class WXDLLEXPORT wxTextDataObject;
-class WXDLLEXPORT wxFileDataObject;
-
-class WXDLLEXPORT wxDropTarget;
-class WXDLLEXPORT wxTextDropTarget;
-class WXDLLEXPORT wxFileDropTarget;
-
-class WXDLLEXPORT wxDropSource;
-
-//-------------------------------------------------------------------------
-// wxDataFormat (internal)
-//-------------------------------------------------------------------------
-
-class wxDataFormat : public wxObject
-{
-    DECLARE_CLASS( wxDataFormat )
-
-public:
-    wxDataFormat();
-    wxDataFormat( wxDataFormatId type );
-    wxDataFormat( const wxString &id );
-    wxDataFormat( const wxChar *id );
-    wxDataFormat( const wxDataFormat &format );
-
-    void SetType( wxDataFormatId type );
-    wxDataFormatId GetType() const;
-
-    /* the string Id identifies the format of clipboard or DnD data. a word
-     * processor would e.g. add a wxTextDataObject and a wxPrivateDataObject
-     * to the clipboard - the latter with the Id "application/wxword", an
-     * image manipulation program would put a wxBitmapDataObject and a
-     * wxPrivateDataObject to the clipboard - the latter with "image/png". */
-
-    wxString GetId() const;
-    void SetId( const wxChar *id );
+#ifndef __OS2DNDH__
+#define __OS2DNDH__
 
 
-    // implicit conversion to wxDataFormatId
-    operator wxDataFormatId() const { return m_type; }
+#if !wxUSE_DRAG_AND_DROP
+    #error  "You should #define wxUSE_DRAG_AND_DROP to 1 to compile this file!"
+#endif  //WX_DRAG_DROP
 
 
-    bool operator==(wxDataFormatId type) const { return m_type == type; }
-    bool operator!=(wxDataFormatId type) const { return m_type != type; }
+#define INCL_WINSTDDRAG
+#include <os2.h>
+#ifndef __EMX__
+#include <pmstddlg.h>
+#endif
 
 
-private:
-    wxDataFormatId  m_type;
-    wxString        m_id;
-};
 //-------------------------------------------------------------------------
 //-------------------------------------------------------------------------
-// wxDataObject
+// wxDropSource
 //-------------------------------------------------------------------------
 
 //-------------------------------------------------------------------------
 
-class WXDLLEXPORT wxDataObject: public wxObject
+class WXDLLEXPORT wxDropSource: public wxDropSourceBase
 {
 public:
 {
 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;
-
-};
-
-// ----------------------------------------------------------------------------
-// wxTextDataObject is a specialization of wxDataObject for text data
-// ----------------------------------------------------------------------------
+    /* constructor. set data later with SetData() */
+    wxDropSource(wxWindow* pWin);
 
 
-class WXDLLEXPORT wxTextDataObject : public wxDataObject
-{
-public:
-  // ctors
-  wxTextDataObject() { }
-  wxTextDataObject(const wxString& strText) : m_strText(strText) { }
-  void Init(const wxString& strText) { m_strText = strText; }
+    /* constructor for setting one data object */
+    wxDropSource( wxDataObject& rData,
+                  wxWindow*     pWin
+                );
+    virtual ~wxDropSource();
 
 
-  // implement base class pure virtuals
-  virtual wxDataFormat GetPreferredFormat() const
-    { return wxDF_TEXT; }
-  virtual bool IsSupportedFormat(wxDataFormat format) const
-    { return format == wxDF_TEXT; }
-  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()); }
+    /* start drag action */
+    virtual wxDragResult DoDragDrop(bool bAllowMove = FALSE);
 
 
-private:
-  wxString  m_strText;
+protected:
+    void Init(void);
+    bool                            m_bLazyDrag;
 
 
+    DRAGIMAGE*                      m_pDragImage;
+    DRAGINFO*                       m_pDragInfo;
+    DRAGTRANSFER*                   m_pDragTransfer;
 };
 
 };
 
-// ----------------------------------------------------------------------------
-// wxFileDataObject is a specialization of wxDataObject for file names
-// ----------------------------------------------------------------------------
-
-class WXDLLEXPORT wxFileDataObject : public wxDataObject
-{
-public:
-
-  wxFileDataObject(void) { }
-  void AddFile( const wxString &file )
-    { m_files += file; m_files += ";"; }
-
-  // implement base class pure virtuals
-  virtual wxDataFormat GetPreferredFormat() const
-    { return wxDF_FILENAME; }
-  virtual bool IsSupportedFormat(wxDataFormat format) const
-    { return format == wxDF_FILENAME; }
-  virtual size_t GetDataSize() const
-    { return m_files.Len() + 1; } // +1 for trailing '\0'of course
-  virtual void GetDataHere(void *pBuf) const
-    { memcpy(pBuf, m_files.c_str(), GetDataSize()); }
-
-private:
-  wxString  m_files;
-
-};
 //-------------------------------------------------------------------------
 // wxDropTarget
 //-------------------------------------------------------------------------
 
 //-------------------------------------------------------------------------
 // wxDropTarget
 //-------------------------------------------------------------------------
 
-class WXDLLEXPORT wxDropTarget: public wxObject
-{
-  public:
-
-    wxDropTarget();
-    ~wxDropTarget();
-
-    virtual void OnEnter() { }
-    virtual void OnLeave() { }
-    virtual bool OnDrop( long x, long y, const void *pData ) = 0;
-
-//  protected:
-
-    friend wxWindow;
-
-    // Override these to indicate what kind of data you support:
-
-    virtual size_t GetFormatCount() const = 0;
-    virtual wxDataFormat GetFormat(size_t n) const = 0;
-};
-
-//-------------------------------------------------------------------------
-// wxTextDropTarget
-//-------------------------------------------------------------------------
-
-class WXDLLEXPORT wxTextDropTarget: public wxDropTarget
-{
-  public:
-
-    wxTextDropTarget() {};
-    virtual bool OnDrop( long x, long y, const void *pData );
-    virtual bool OnDropText( long x, long y, const char *psz );
-
-  protected:
-
-    virtual size_t GetFormatCount() const;
-    virtual wxDataFormat GetFormat(size_t n) const;
-};
-
-// ----------------------------------------------------------------------------
-// A drop target which accepts files (dragged from File Manager or Explorer)
-// ----------------------------------------------------------------------------
-
-class WXDLLEXPORT wxFileDropTarget: public wxDropTarget
-{
-  public:
-
-    wxFileDropTarget() {};
-
-    virtual bool OnDrop(long x, long y, const void *pData);
-    virtual bool OnDropFiles( long x, long y,
-                              size_t nFiles, const char * const aszFiles[]);
-
-  protected:
-
-    virtual size_t GetFormatCount() const;
-    virtual wxDataFormat GetFormat(size_t n) const;
-};
-
-//-------------------------------------------------------------------------
-// wxDropSource
-//-------------------------------------------------------------------------
-
-enum wxDragResult
-  {
-    wxDragError,    // error prevented the d&d operation from completing
-    wxDragNone,     // drag target didn't accept the data
-    wxDragCopy,     // the data was successfully copied
-    wxDragMove,     // the data was successfully moved
-    wxDragCancel    // the operation was cancelled by user (not an error)
-  };
-
-class WXDLLEXPORT wxDropSource: public wxObject
+class WXDLLEXPORT wxDropTarget: public wxDropTargetBase
 {
 {
-  public:
-
-    wxDropSource( wxWindow *win );
-    wxDropSource( wxDataObject &data, wxWindow *win );
-
-    ~wxDropSource(void);
+public:
+    wxDropTarget(wxDataObject *dataObject = (wxDataObject*)NULL);
+    virtual ~wxDropTarget();
 
 
-    void SetData( wxDataObject &data  );
-    wxDragResult DoDragDrop( bool bAllowMove = FALSE );
+    void Register(WXHWND hwnd);
+    void Revoke(WXHWND hwnd);
 
 
-    virtual bool GiveFeedback( wxDragResult WXUNUSED(effect), bool WXUNUSED(bScrolling) ) { return TRUE; };
+    virtual wxDragResult OnDragOver(wxCoord x, wxCoord y, wxDragResult def);
+    virtual bool OnDrop(wxCoord x, wxCoord y);
+    virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult vResult);
+    virtual bool GetData();
 
 
-  protected:
+  // implementation
+protected:
+    virtual bool IsAcceptable(DRAGINFO* pInfo);
 
 
-    wxDataObject  *m_data;
+    DRAGINFO*                       m_pDragInfo;
+    DRAGTRANSFER*                   m_pDragTransfer;
 };
 
 };
 
-#endif
-       //_WX_DND_H_
+#endif //__OS2DNDH__