]> git.saurik.com Git - wxWidgets.git/blame - docs/doxygen/overviews/dataobject.h
another batch of topic overviews reviewing (letters e,f)
[wxWidgets.git] / docs / doxygen / overviews / dataobject.h
CommitLineData
15b6757b 1/////////////////////////////////////////////////////////////////////////////
d54cf7ff 2// Name: dataobject.h
15b6757b
FM
3// Purpose: topic overview
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/*!
36c9828f 10
d54cf7ff 11 @page overview_dataobject wxDataObject overview
36c9828f 12
d54cf7ff
FM
13 Classes: #wxDataObject, #wxClipboard, #wxDataFormat, #wxDropSource, #wxDropTarget
14
15 See also: @ref overview_dnd and @ref overview_samplednd
16
17 This overview discusses data transfer through clipboard or drag and drop.
18 In wxWidgets, these two ways to transfer data (either between different
15b6757b
FM
19 applications or inside one and the same) are very similar which allows to
20 implement both of them using almost the same code - or, in other
21 words, if you implement drag and drop support for your application, you get
22 clipboard support for free and vice versa.
d54cf7ff 23
36c9828f 24 At the heart of both clipboard and drag and drop operations lies the
15b6757b
FM
25 #wxDataObject class. The objects of this class (or, to
26 be precise, classes derived from it) represent the data which is being carried
27 by the mouse during drag and drop operation or copied to or pasted from the
28 clipboard. wxDataObject is a "smart" piece of data because it knows which
29 formats it supports (see GetFormatCount and GetAllFormats) and knows how to
30 render itself in any of them (see GetDataHere). It can also receive its value
31 from the outside in a format it supports if it implements the SetData method.
32 Please see the documentation of this class for more details.
d54cf7ff 33
15b6757b
FM
34 Both clipboard and drag and drop operations have two sides: the source and
35 target, the data provider and the data receiver. These which may be in the same
36 application and even the same window when, for example, you drag some text from
37 one position to another in a word processor. Let us describe what each of them
38 should do.
d54cf7ff
FM
39
40 @li The data provider (source) duties
41 @li The data receiver (target) duties
36c9828f
FM
42
43
d54cf7ff
FM
44 @section overview_dataobject_source The data provider (source) duties
45
46 The data provider is responsible for creating a #wxDataObject containing the
47 data to be transferred. Then it should either pass it to the clipboard using
48 #SetData function or to #wxDropSource and call #DoDragDrop function.
36c9828f 49
15b6757b
FM
50 The only (but important) difference is that the object for the clipboard
51 transfer must always be created on the heap (i.e. using @c new) and it will
52 be freed by the clipboard when it is no longer needed (indeed, it is not known
53 in advance when, if ever, the data will be pasted from the clipboard). On the
36c9828f 54 other hand, the object for drag and drop operation must only exist while
d54cf7ff
FM
55 #DoDragDrop executes and may be safely deleted afterwards and so can be
56 created either on heap or on stack (i.e. as a local variable).
57
15b6757b
FM
58 Another small difference is that in the case of clipboard operation, the
59 application usually knows in advance whether it copies or cuts (i.e. copies and
60 deletes) data - in fact, this usually depends on which menu item the user
36c9828f 61 chose. But for drag and drop it can only know it after
15b6757b 62 #DoDragDrop returns (from its return value).
36c9828f 63
d54cf7ff
FM
64
65 @section overview_dataobject_target The data receiver (target) duties
36c9828f 66
15b6757b 67 To receive (paste in usual terminology) data from the clipboard, you should
d54cf7ff
FM
68 create a #wxDataObject derived class which supports the data formats you need
69 and pass it as argument to wxClipboard::GetData. If it returns @false,
70
71 no data in (any of) the supported format(s) is available. If it returns @true,
72 the data has been successfully transferred to wxDataObject.
73
74 For drag and drop case, the wxDropTarget::OnData virtual function will be called
75 when a data object is dropped, from which the data itself may be requested by calling
76 wxDropTarget::GetData method which fills the data object.
36c9828f 77
d54cf7ff 78*/
36c9828f 79