75 lines
3.4 KiB
TeX
75 lines
3.4 KiB
TeX
|
\section{Drag-and-drop and clipboard overview}\label{wxdndoverview}
|
||
|
|
||
|
Classes: \helpref{wxDataObject}wxdataobject
|
||
|
|
||
|
% \helpref{wxTextDataObject}wxtextdataobject
|
||
|
% \helpref{wxDropSource}wxdropsource
|
||
|
% \helpref{wxDropTarget}{wxdroptarget}
|
||
|
% \helpref{wxTextDropTarget}{wxtextdroptarget}
|
||
|
% \helpref{wxFileDropTarget}{wxfiledroptarget}
|
||
|
|
||
|
Samples: see the dnd sample.
|
||
|
|
||
|
This overview describes wxWindows support for drag and drop and clipboard
|
||
|
operations. Both of these topics are discussed here because, in fact, they're
|
||
|
quite related. Drag and drop and clipboard are just too ways of passing the
|
||
|
data around and so the code required to implement both types of the operations
|
||
|
is almost the same.
|
||
|
|
||
|
In any case, you work with some data which is represented by the
|
||
|
\helpref{wxDataObject}{wxdataobject} class. It is capable to contain any kind
|
||
|
data in one of any of predefined formats (see enum
|
||
|
\helpref{StdFormatand}{stdformat}) and is smart enough to describe the format
|
||
|
of data it contains. There is also a specialization of this class which stores
|
||
|
only text - the only difference between
|
||
|
\helpref{wxTextDataObject}{wxtextdataobject} and wxDataObject is that the
|
||
|
first one is easily constructed from wxString.
|
||
|
|
||
|
Also, for both kinds of operations, there is a sender which provides data and
|
||
|
a receiver who gets it. The sender is responsible for constructing the
|
||
|
wxDataObject and the receiver can query it and process the data it contains
|
||
|
in any way he likes.
|
||
|
|
||
|
In the case of a drag and drop operation, the sender is called a {\it drop
|
||
|
source} while the receiver is a {\it dtop target}. There are several steps in
|
||
|
the dragging process:
|
||
|
\begin{itemize}\itemsep=0pt
|
||
|
\item{preparation} First of all, the data object must be created and
|
||
|
initilized with the data you wish to drag. For example:
|
||
|
\begin{verbatim}
|
||
|
wxTextDataObject data("This string will be dragged.");
|
||
|
\end{verbatim}. Of course, the data object may contain arbitrary data of any
|
||
|
type.
|
||
|
\item{drag start} This happens when you call
|
||
|
\helpref{DoDragDrop}{wxdropsourcedodragdrop} function. For this you must first
|
||
|
construct a wxDropSource object and associate the data object from the
|
||
|
previous step with it like this:
|
||
|
\begin{verbatim}
|
||
|
wxDropSource dragSource(data, this);
|
||
|
|
||
|
// or also:
|
||
|
wxDropSource dragSource(this);
|
||
|
dragSource.SetData(data);
|
||
|
\end{verbatim},
|
||
|
\item{dragging} The call to DoDragDrop() blocks until the user release the
|
||
|
mouse button (unless you override
|
||
|
\helpref{GiveFeedback}{wxdropsourcegivefeedback} function to do something
|
||
|
special). When the mouse moves in a window of a wxWindows program, the
|
||
|
corresponding wxDropTarget methods are called (the data can be also dragged to
|
||
|
any other program under Windows or to any program supporting the same protocol
|
||
|
under X Windows).
|
||
|
\item{drop} When the user releases the mouse over a window, wxWindows verifies
|
||
|
if the wxDropTarget object associated (with
|
||
|
\helpref{SetDropTarget}{setdroptarget}) with this window accepts the data. For
|
||
|
this, \helpref{GetFormatCount}{wxdroptargetgetformatcount} and
|
||
|
\helpref{GetFormat}{wxdroptargetgetformat} are used and if the format is
|
||
|
supported (i.e. is one of returned by GetFormat()), then
|
||
|
\helpref{OnDrop}{wxdroptargetondrop} is called. Otherwise, wxDragNone is
|
||
|
returned by DoDragDrop() and nothing happens.
|
||
|
\item{the end} Finally, the receiver processes the data (e.g. pastes the text
|
||
|
in it's window). DoDragDrop() returns either wxDragCopy or wxDragMove
|
||
|
depending on the state of the keys (<Ctrl>, <Shift> and <Alt>) at the moment
|
||
|
of drop.
|
||
|
\end{itemize}
|
||
|
|