| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: dnd.h
- // Purpose: interface of wxDropSource and wx*DropTarget
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- Possible flags for drag and drop operations.
- */
- enum
- {
- wxDrag_CopyOnly = 0, ///< Allow only copying.
- wxDrag_AllowMove = 1, ///< Allow moving too (copying is always allowed).
- wxDrag_DefaultMove = 3 ///< Allow moving and make it default operation.
- };
- /**
- Result returned from a wxDropSource::DoDragDrop() call.
- */
- 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 (MSW only).
- wxDragLink, ///< Operation is a drag-link.
- wxDragCancel ///< The operation was cancelled by user (not an error).
- };
- /**
- @class wxDropTarget
- This class represents a target for a drag and drop operation. A
- wxDataObject can be associated with it and by default, this object will be
- filled with the data from the drag source, if the data formats supported by
- the data object match the drag source data format.
- There are various virtual handler functions defined in this class which may
- be overridden to give visual feedback or react in a more fine-tuned way,
- e.g. by not accepting data on the whole window area, but only a small
- portion of it. The normal sequence of calls is OnEnter(), OnDragOver()
- possibly many times, OnDrop() and finally OnData().
- @library{wxcore}
- @category{dnd}
- @see @ref overview_dnd, @ref overview_dataobject, wxDropSource,
- wxTextDropTarget, wxFileDropTarget, wxDataFormat, wxDataObject
- */
- class wxDropTarget
- {
- public:
- /**
- Constructor. @a data is the data to be associated with the drop target.
- */
- wxDropTarget(wxDataObject* data = NULL);
- /**
- Destructor. Deletes the associated data object, if any.
- */
- virtual ~wxDropTarget();
- /**
- This method may only be called from within OnData(). By default, this
- method copies the data from the drop source to the wxDataObject
- associated with this drop target, calling its wxDataObject::SetData()
- method.
- */
- virtual bool GetData();
- /**
- Called after OnDrop() returns @true. By default this will usually
- GetData() and will return the suggested default value @a defResult.
- */
- virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult defResult) = 0;
- /**
- Called when the mouse is being dragged over the drop target. By
- default, this calls functions return the suggested return value @a defResult.
- @param x
- The x coordinate of the mouse.
- @param y
- The y coordinate of the mouse.
- @param defResult
- Suggested value for return value. Determined by SHIFT or CONTROL
- key states.
- @return The desired operation or wxDragNone. This is used for optical
- feedback from the side of the drop source, typically in form
- of changing the icon.
- */
- virtual wxDragResult OnDragOver(wxCoord x, wxCoord y, wxDragResult defResult);
- /**
- Called when the user drops a data object on the target. Return @false
- to veto the operation.
- @param x
- The x coordinate of the mouse.
- @param y
- The y coordinate of the mouse.
- @return @true to accept the data, or @false to veto the operation.
- */
- virtual bool OnDrop(wxCoord x, wxCoord y);
- /**
- Called when the mouse enters the drop target. By default, this calls
- OnDragOver().
- @param x
- The x coordinate of the mouse.
- @param y
- The y coordinate of the mouse.
- @param defResult
- Suggested default for return value. Determined by SHIFT or CONTROL
- key states.
- @return The desired operation or wxDragNone. This is used for optical
- feedback from the side of the drop source, typically in form
- of changing the icon.
- */
- virtual wxDragResult OnEnter(wxCoord x, wxCoord y, wxDragResult defResult);
- /**
- Called when the mouse leaves the drop target.
- */
- virtual void OnLeave();
- /**
- Returns the data wxDataObject associated with the drop target
- */
- wxDataObject *GetDataObject() const;
- /**
- Sets the data wxDataObject associated with the drop target and deletes
- any previously associated data object.
- */
- void SetDataObject(wxDataObject* data);
- /**
- Sets the default action for drag and drop. Use wxDragMove or
- wxDragCopy to set default action to move or copy and use wxDragNone
- (default) to set default action specified by initialization of draging
- (see wxDropSource::DoDragDrop())
- */
- void SetDefaultAction(wxDragResult action);
- /**
- Returns default action for drag and drop or wxDragNone if this not
- specified.
- */
- wxDragResult GetDefaultAction();
- };
- /**
- @class wxDropSource
- This class represents a source for a drag and drop operation.
- @library{wxcore}
- @category{dnd}
- @see @ref overview_dnd, @ref overview_dataobject, wxDropTarget,
- wxTextDropTarget, wxFileDropTarget
- */
- class wxDropSource
- {
- public:
- /**
- This constructor requires that you must call SetData() later.
- Note that the type of @a iconCopy and subsequent parameters
- differs between different ports: these are cursors under Windows and OS
- X but icons for GTK. You should use the macro wxDROP_ICON() in portable
- programs instead of directly using either of these types.
- @onlyfor{wxmsw,wxosx}
- @param win
- The window which initiates the drag and drop operation.
- @param iconCopy
- The icon or cursor used for feedback for copy operation.
- @param iconMove
- The icon or cursor used for feedback for move operation.
- @param iconNone
- The icon or cursor used for feedback when operation can't be done.
- */
- wxDropSource(wxWindow* win = NULL,
- const wxCursor& iconCopy = wxNullCursor,
- const wxCursor& iconMove = wxNullCursor,
- const wxCursor& iconNone = wxNullCursor);
- /**
- The constructor taking a wxDataObject.
- Note that the type of @a iconCopy and subsequent parameters
- differs between different ports: these are cursors under Windows and OS
- X but icons for GTK. You should use the macro wxDROP_ICON() in portable
- programs instead of directly using either of these types.
- @onlyfor{wxmsw,wxosx}
- @param data
- The data associated with the drop source.
- @param win
- The window which initiates the drag and drop operation.
- @param iconCopy
- The icon or cursor used for feedback for copy operation.
- @param iconMove
- The icon or cursor used for feedback for move operation.
- @param iconNone
- The icon or cursor used for feedback when operation can't be done.
- */
- wxDropSource(wxDataObject& data, wxWindow* win = NULL,
- const wxCursor& iconCopy = wxNullCursor,
- const wxCursor& iconMove = wxNullCursor,
- const wxCursor& iconNone = wxNullCursor);
- /**
- This constructor requires that you must call SetData() later.
- This is the wxGTK-specific version of the constructor taking wxIcon
- instead of wxCursor as the other ports.
- @onlyfor{wxgtk}
- @param win
- The window which initiates the drag and drop operation.
- @param iconCopy
- The icon or cursor used for feedback for copy operation.
- @param iconMove
- The icon or cursor used for feedback for move operation.
- @param iconNone
- The icon or cursor used for feedback when operation can't be done.
- */
- wxDropSource(wxWindow* win = NULL,
- const wxIcon& iconCopy = wxNullIcon,
- const wxIcon& iconMove = wxNullIcon,
- const wxIcon& iconNone = wxNullIcon);
- /**
- The constructor taking a wxDataObject.
- This is the wxGTK-specific version of the constructor taking wxIcon
- instead of wxCursor as the other ports.
- @onlyfor{wxgtk}
- @param data
- The data associated with the drop source.
- @param win
- The window which initiates the drag and drop operation.
- @param iconCopy
- The icon or cursor used for feedback for copy operation.
- @param iconMove
- The icon or cursor used for feedback for move operation.
- @param iconNone
- The icon or cursor used for feedback when operation can't be done.
- */
- wxDropSource(wxDataObject& data, wxWindow* win = NULL,
- const wxIcon& iconCopy = wxNullIcon,
- const wxIcon& iconMove = wxNullIcon,
- const wxIcon& iconNone = wxNullIcon);
- /**
- Starts the drag-and-drop operation which will terminate when the user
- releases the mouse. Call this in response to a mouse button press, for
- example.
- @param flags
- If ::wxDrag_AllowMove is included in the flags, data may be moved
- and not only copied as is the case for the default
- ::wxDrag_CopyOnly. If ::wxDrag_DefaultMove is specified
- (which includes the previous flag), moving is not only possible but
- becomes the default operation.
- @return The operation requested by the user, may be ::wxDragCopy,
- ::wxDragMove, ::wxDragLink, ::wxDragCancel or ::wxDragNone if
- an error occurred.
- */
- virtual wxDragResult DoDragDrop(int flags = wxDrag_CopyOnly);
- /**
- Returns the wxDataObject object that has been assigned previously.
- */
- wxDataObject* GetDataObject();
- /**
- You may give some custom UI feedback during the drag and drop operation
- by overriding this function. It is called on each mouse move, so your
- implementation must not be too slow.
- @param effect
- The effect to implement. One of ::wxDragCopy, ::wxDragMove,
- ::wxDragLink and ::wxDragNone.
- @return @false if you want default feedback, or @true if you implement
- your own feedback. The return value is ignored under GTK.
- */
- virtual bool GiveFeedback(wxDragResult effect);
- /**
- Set the icon to use for a certain drag result.
- @param res
- The drag result to set the icon for.
- @param cursor
- The icon to show when this drag result occurs.
- @onlyfor{wxmsw,wxosx}
- */
- void SetCursor(wxDragResult res, const wxCursor& cursor);
- /**
- Set the icon to use for a certain drag result.
- @param res
- The drag result to set the icon for.
- @param icon
- The icon to show when this drag result occurs.
- @onlyfor{wxgtk}
- */
- void SetIcon(wxDragResult res, const wxIcon& icon);
- /**
- Sets the data wxDataObject associated with the drop source. This will
- not delete any previously associated data.
- */
- void SetData(wxDataObject& data);
- };
- /**
- @class wxTextDropTarget
- A predefined drop target for dealing with text data.
- @library{wxcore}
- @category{dnd}
- @see @ref overview_dnd, wxDropSource, wxDropTarget, wxFileDropTarget
- */
- class wxTextDropTarget : public wxDropTarget
- {
- public:
- /**
- Constructor.
- */
- wxTextDropTarget();
- /**
- See wxDropTarget::OnDrop(). This function is implemented appropriately
- for text, and calls OnDropText().
- */
- virtual bool OnDrop(wxCoord x, wxCoord y);
- /**
- Override this function to receive dropped text.
- @param x
- The x coordinate of the mouse.
- @param y
- The y coordinate of the mouse.
- @param data
- The data being dropped: a wxString.
- Return @true to accept the data, or @false to veto the operation.
- */
- virtual bool OnDropText(wxCoord x, wxCoord y, const wxString& data) = 0;
- };
- /**
- @class wxFileDropTarget
- This is a drop target which accepts files (dragged from File Manager or
- Explorer).
- @library{wxcore}
- @category{dnd}
- @see @ref overview_dnd, wxDropSource, wxDropTarget, wxTextDropTarget
- */
- class wxFileDropTarget : public wxDropTarget
- {
- public:
- /**
- Constructor.
- */
- wxFileDropTarget();
- /**
- See wxDropTarget::OnDrop(). This function is implemented appropriately
- for files, and calls OnDropFiles().
- */
- virtual bool OnDrop(wxCoord x, wxCoord y);
- /**
- Override this function to receive dropped files.
- @param x
- The x coordinate of the mouse.
- @param y
- The y coordinate of the mouse.
- @param filenames
- An array of filenames.
- Return @true to accept the data, or @false to veto the operation.
- */
- virtual bool OnDropFiles(wxCoord x, wxCoord y,
- const wxArrayString& filenames) = 0;
- };
- // ============================================================================
- // Global functions/macros
- // ============================================================================
- /** @addtogroup group_funcmacro_gdi */
- //@{
- /**
- This macro creates either a cursor (MSW) or an icon (elsewhere) with the
- given @a name (of type <tt>const char*</tt>). Under MSW, the cursor is
- loaded from the resource file and the icon is loaded from XPM file under
- other platforms.
- This macro should be used with wxDropSource::wxDropSource().
- @return wxCursor on MSW, otherwise returns a wxIcon
- @header{wx/dnd.h}
- */
- #define wxDROP_ICON(name)
- /**
- Returns true if res indicates that something was done during a DnD operation,
- i.e. is neither error nor none nor cancel.
- */
- bool wxIsDragResultOk(wxDragResult res);
- //@}
|