]> git.saurik.com Git - wxWidgets.git/blame_incremental - docs/latex/wx/tdnd.tex
CW5.2 Pro Adaptions, wxMac starting to move in
[wxWidgets.git] / docs / latex / wx / tdnd.tex
... / ...
CommitLineData
1\section{Drag-and-drop and clipboard overview}\label{wxdndoverview}
2
3Classes: \helpref{wxDataObject}{wxdataobject},
4\helpref{wxTextDataObject}{wxtextdataobject},
5\helpref{wxDropSource}{wxdropsource},
6\helpref{wxDropTarget}{wxdroptarget},
7\helpref{wxTextDropTarget}{wxtextdroptarget},
8\helpref{wxFileDropTarget}{wxfiledroptarget}
9
10Note that wxUSE\_DRAG\_AND\_DROP must be defined in setup.h in order
11to use Drag'n'Drop in wxWindows.
12
13This overview describes wxWindows support for drag and drop and clipboard
14operations. Both of these topics are discussed here because, in fact, they're
15quite related. Drag and drop and clipboard are just two ways of passing the
16data around and so the code required to implement both types of the operations
17is almost the same.
18
19Both operations involve passing some data from one program to another,
20although the data can be received in the same program as the source. In the case
21of clipboard transfer, the data is first placed on the clipboard and then
22pasted into the destination program, while for a drag-and-drop operation the
23data object is not stored anywhere but is created when the user starts
24dragging and is destroyed as soon as he ends it, whether the operation was
25ended successfully or cancelled.
26
27To be a {\it drag source}, i.e. to provide the data which may be dragged by
28user elsewhere, you should implement the following steps:
29
30\begin{itemize}\itemsep=0pt
31\item {\bf Preparation:} First of all, the data object must be created and
32initialized with the data you wish to drag. For example:
33
34\begin{verbatim}
35 wxDataObject *my_data = new wxTextDataObject data("This string will be dragged.");
36\end{verbatim}
37\item{\bf Drag start:} To start dragging process (typically in response to a
38mouse click) you must call \helpref{DoDragDrop}{wxdropsourcedodragdrop} function
39of wxDropSource object which should be constructed like this:
40
41\begin{verbatim}
42 wxDropSource dragSource( this );
43 dragSource.SetData( my_data );
44\end{verbatim}
45\item {\bf Dragging:} The call to DoDragDrop() blocks until the user release the
46mouse button (unless you override \helpref{GiveFeedback}{wxdropsourcegivefeedback} function
47to do something special). When the mouse moves in a window of a program which understands the
48same drag-and-drop protocol (any program under Windows or any program supporting the
49XDnD protocol under X Windows), the corresponding \helpref{wxDropTarget}{wxdroptarget} methods
50are called - see below.
51\item {\bf Processing the result:} DoDragDrop() returns an {\it effect code} which
52is one of the values of \helpref{wxDragResult}{wxdropsource} enum. Codes
53of wxDragError, wxDragNone and wxDragCancel have the obvious meaning and mean
54that there is nothing to do on the sending end (except of possibly logging the
55error in the first case). wxDragCopy means that the data has been successfully
56copied and doesn't require any specific actions neither. But wxDragMove is
57special because it means that the data must be deleted from where it was
58copied. If it doesn't make sense (dragging selected text from a read-only
59file) you should pass FALSE as parameter to DoDragDrop() in the previous step.
60\end{itemize}
61
62To be a {\it drop target}, i.e. to receive the data dropped by user you should
63follow the instructions below:
64
65\begin{itemize}\itemsep=0pt
66\item {\bf Initialization:} For a window to be drop target, it needs to have
67an associated \helpref{wxDropTarget}{wxdroptarget} object. Normally, you will
68call \helpref{wxWindow::SetDropTarget}{wxwindowsetdroptarget} during window
69creation associating you drop target with it. You must derive a class from
70wxDropTarget and override its pure virtual methods. Alternatively, you may
71derive from \helpref{wxTextDropTarget}{wxtextdroptarget} or
72\helpref{wxFileDropTarget}{wxfiledroptarget} and override their OnDropText()
73or OnDropFiles() method.
74\item {\bf Drop:} When the user releases the mouse over a window, wxWindows
75queries the associated wxDropTarget object if it accepts the data. For this,
76a \helpref{wxDataObject}{wxdataobject} must be associated with the drop target
77and this data object will be responsible for the format negotiation between
78the drag source and the drop target. If all goes well, then \helpref{OnData}{wxdroptargetondata}
79will get called and the wxDataObject belonging to the drop target can get
80filled with data.
81\item {\bf The end:} After processing the data, DoDragDrop() returns either
82wxDragCopy or wxDragMove depending on the state of the keys (<Ctrl>, <Shift>
83and <Alt>) at the moment of drop. There is currently no way for the drop
84target to change this return code.
85\end{itemize}
86