]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/tclipbrd.tex
readding
[wxWidgets.git] / docs / latex / wx / tclipbrd.tex
CommitLineData
23d277e6
VZ
1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2%% Name: tclipbrd.tex
3%% Purpose: Data transfer (clipboard and drag and drop) overview
4%% Author: Vadim Zeitlin
5%% Modified by:
6%% Created: 18.10.99
7%% RCS-ID: $Id$
8%% Copyright: (c) Vadim Zeitlin
9%% Licence: wxWindows licence
10%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11
12\section{Clipboard and drag and drop overview}\label{wxclipboardonfigoverview}
13
14Classes: \helpref{wxDataObject}{wxdataobject},
15 \helpref{wxClipboard}{wxclipboard},
16 \helpref{wxDataFormat}{wxdataformat},
17 \helpref{wxDropSource}{wxdropsource},
18 \helpref{wxDropTarget}{wxdroptarget}
19
20This overview discusses data transfer through clipboard or drag and drop. In
21wxWindows, these two ways to transfer data (either between different
22applications or inside one and the same) are very similar which allows to
23implement both of them using almost the same code - or, to say it in other
24words, if you implement drag and drop support for your application, you get
25clipboard support for free and vice versa.
26
27In the heart of both clipboard and drag and drop operations lies the
28\helpref{wxDataObject}{wxdataobject} class. The objects of this (or, to be
29precise, derived from it) class represent the data which is being carried by
30the mouse during drag and drop operation or copied to or pasted from the
31clipboard. \helpref{wxDataObject}{wxdataobject} is a "smart" piece of data
32because it knows which \helpref{formats}{wxdataformat} it supports (see
33\helpref{GetFormatCount}{wxdataobjectgetformatcount} and
34\helpref{GetAllFormats}{wxdataobjectgetallformats}) and knows how to render
35itself in any of them (see \helpref{GetDataHere.}{wxdataobjectgetdatahere}).
36It can also receive its value from the outside in a format it supports if it
37implements \helpref{SetData}{wxdataobjectsetdata} method.
38
39Both clipboard and drag and drop operations have two sides: the source and
40target, the data provider and the data receiver (which may be the same
41application and even the same window when, for example, you drag some text from
42one position to another in a word processor). Let us describe what each of them
43should do.
44
45\subsection{The data provider (source) duties}{wxdataobjectsource}
46
47The data provider is responsible for creating a
48\helpref{wxDataObject}{wxdataobjectwxdataobject} containing the data to be
49transfered. Then it should either pass it to the clipboard using
50\helpref{AddData}{wxclipboardadddata} or \helpref{SetData}{wxclipboardsetdata}
51functions or to \helpref{wxDropSource}{wxdropsource} and call
52\helpref{DoDragDrop}{wxdropsourcedodragdrop} function.
53
54The only (but important) difference is that the object for the clipboard
55transfer must always be created on the heap (i.e. using {\tt new}) and it will
56be freed by the clipboard when it is no longer needed (indeed, it is not known
57in advance when, if ever, the data will be pasted from the clipboard). On the
58other hand, the object for drag and drop operation must only exist while
59\helpref{DoDragDrop}{wxdropsourcedodragdrop} executes and may be safely deleted
60afterwards and so can be created either on heap or on stack (i.e. as a local
61variable).
62
63Another small difference si that in the case of clipboard operation, the
64application usually knows in advance whether it copies or cuts (i.e. copies and
65deletes) data - in fact, this usually depends on which menu item the user
66chose. But for drag and drop it can only know it after
67\helpref{DoDragDrop}{wxdropsourcedodragdrop} returns (from its return value).
68
69\subsection{The data receiver (target) duties}{wxdataobjecttarget}
70
71To receive (paste in usual terminology) data from the clipboard, you should
72create a \helpref{wxDataObject}{wxdataobject} derived class which supports the
73data formats you need and pass it as argument to
74\helpref{wxClipboard::GetData}{wxclipboardgetdata}. If it returns {\tt FALSE},
75no data in (any of) the supported format(s) is available. If it returns {\tt
76TRUE}, the data has been successfully transfered to wxDataObject.
77
78{\bf TODO} document drag and drop side when the API is finalised