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