]>
Commit | Line | Data |
---|---|---|
1 | ///////////////////////////////////////////////////////////////////////////// | |
2 | // Name: dataobj.h | |
3 | // Purpose: interface of wxCustomDataObject | |
4 | // Author: wxWidgets team | |
5 | // RCS-ID: $Id$ | |
6 | // Licence: wxWindows license | |
7 | ///////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | /** | |
10 | @class wxCustomDataObject | |
11 | @wxheader{dataobj.h} | |
12 | ||
13 | wxCustomDataObject is a specialization of | |
14 | wxDataObjectSimple for some | |
15 | application-specific data in arbitrary (either custom or one of the standard | |
16 | ones). The only restriction is that it is supposed that this data can be | |
17 | copied bitwise (i.e. with @c memcpy()), so it would be a bad idea to make | |
18 | it contain a C++ object (though C struct is fine). | |
19 | ||
20 | By default, wxCustomDataObject stores the data inside in a buffer. To put the | |
21 | data into the buffer you may use either | |
22 | wxCustomDataObject::SetData or | |
23 | wxCustomDataObject::TakeData depending on whether you want | |
24 | the object to make a copy of data or not. | |
25 | ||
26 | If you already store the data in another place, it may be more convenient and | |
27 | efficient to provide the data on-demand which is possible too if you override | |
28 | the virtual functions mentioned below. | |
29 | ||
30 | @library{wxcore} | |
31 | @category{dnd} | |
32 | ||
33 | @see wxDataObject | |
34 | */ | |
35 | class wxCustomDataObject : public wxDataObjectSimple | |
36 | { | |
37 | public: | |
38 | /** | |
39 | The constructor accepts a @a format argument which specifies the (single) | |
40 | format supported by this object. If it isn't set here, | |
41 | wxDataObjectSimple::SetFormat should be used. | |
42 | */ | |
43 | wxCustomDataObject(const wxDataFormat& format = wxFormatInvalid); | |
44 | ||
45 | /** | |
46 | The destructor will free the data hold by the object. Notice that although it | |
47 | calls a virtual Free() function, the base | |
48 | class version will always be called (C++ doesn't allow calling virtual | |
49 | functions from constructors or destructors), so if you override @c Free(), you | |
50 | should override the destructor in your class as well (which would probably | |
51 | just call the derived class' version of @c Free()). | |
52 | */ | |
53 | ~wxCustomDataObject(); | |
54 | ||
55 | /** | |
56 | This function is called to allocate @a size bytes of memory from SetData(). | |
57 | The default version just uses the operator new. | |
58 | */ | |
59 | virtual void* Alloc(size_t size); | |
60 | ||
61 | /** | |
62 | This function is called when the data is freed, you may override it to anything | |
63 | you want (or may be nothing at all). The default version calls operator | |
64 | delete[] on the data. | |
65 | */ | |
66 | virtual void Free(); | |
67 | ||
68 | /** | |
69 | Returns a pointer to the data. | |
70 | */ | |
71 | virtual void* GetData() const; | |
72 | ||
73 | /** | |
74 | Returns the data size in bytes. | |
75 | */ | |
76 | virtual size_t GetSize() const; | |
77 | ||
78 | /** | |
79 | Set the data. The data object will make an internal copy. | |
80 | */ | |
81 | virtual void SetData(size_t size, const void data); | |
82 | ||
83 | /** | |
84 | Like SetData(), but doesn't copy the data - | |
85 | instead the object takes ownership of the pointer. | |
86 | @b wxPython note: This method expects a string in wxPython. You can pass | |
87 | nearly any object by pickling it first. | |
88 | */ | |
89 | virtual void TakeData(size_t size, const void data); | |
90 | }; | |
91 | ||
92 | ||
93 | ||
94 | /** | |
95 | @class wxDataObjectComposite | |
96 | @wxheader{dataobj.h} | |
97 | ||
98 | wxDataObjectComposite is the simplest | |
99 | wxDataObject derivation which may be used to support | |
100 | multiple formats. It contains several | |
101 | wxDataObjectSimple objects and supports any | |
102 | format supported by at least one of them. Only one of these data objects is | |
103 | @e preferred (the first one if not explicitly changed by using the second | |
104 | parameter of wxDataObjectComposite::Add) and its format determines | |
105 | the preferred format of the composite data object as well. | |
106 | ||
107 | See wxDataObject documentation for the reasons why you | |
108 | might prefer to use wxDataObject directly instead of wxDataObjectComposite for | |
109 | efficiency reasons. | |
110 | ||
111 | @library{wxcore} | |
112 | @category{FIXME} | |
113 | ||
114 | @see @ref overview_wxdndoverview "Clipboard and drag and drop overview", | |
115 | wxDataObject, wxDataObjectSimple, wxFileDataObject, wxTextDataObject, wxBitmapDataObject | |
116 | */ | |
117 | class wxDataObjectComposite : public wxDataObject | |
118 | { | |
119 | public: | |
120 | /** | |
121 | The default constructor. | |
122 | */ | |
123 | wxDataObjectComposite(); | |
124 | ||
125 | /** | |
126 | Adds the @a dataObject to the list of supported objects and it becomes the | |
127 | preferred object if @a preferred is @true. | |
128 | */ | |
129 | void Add(wxDataObjectSimple dataObject, bool preferred = false); | |
130 | ||
131 | /** | |
132 | Report the format passed to the SetData method. This should be the | |
133 | format of the data object within the composite that recieved data from | |
134 | the clipboard or the DnD operation. You can use this method to find | |
135 | out what kind of data object was recieved. | |
136 | */ | |
137 | wxDataFormat GetReceivedFormat() const; | |
138 | }; | |
139 | ||
140 | ||
141 | ||
142 | /** | |
143 | @class wxDataObjectSimple | |
144 | @wxheader{dataobj.h} | |
145 | ||
146 | This is the simplest possible implementation of the | |
147 | wxDataObject class. The data object of (a class derived | |
148 | from) this class only supports one format, so the number of virtual functions | |
149 | to be implemented is reduced. | |
150 | ||
151 | Notice that this is still an abstract base class and cannot be used but should | |
152 | be derived from. | |
153 | ||
154 | @b wxPython note: If you wish to create a derived wxDataObjectSimple class in | |
155 | wxPython you should derive the class from wxPyDataObjectSimple | |
156 | in order to get Python-aware capabilities for the various virtual | |
157 | methods. | |
158 | ||
159 | @b wxPerl note: In wxPerl, you need to derive your data object class | |
160 | from Wx::PlDataObjectSimple. | |
161 | ||
162 | @library{wxcore} | |
163 | @category{FIXME} | |
164 | ||
165 | @see @ref overview_wxdndoverview "Clipboard and drag and drop overview", @ref | |
166 | overview_samplednd "DnD sample", wxFileDataObject, wxTextDataObject, wxBitmapDataObject | |
167 | */ | |
168 | class wxDataObjectSimple : public wxDataObject | |
169 | { | |
170 | public: | |
171 | /** | |
172 | Constructor accepts the supported format (none by default) which may also be | |
173 | set later with SetFormat(). | |
174 | */ | |
175 | wxDataObjectSimple(const wxDataFormat& format = wxFormatInvalid); | |
176 | ||
177 | /** | |
178 | Copy the data to the buffer, return @true on success. Must be implemented in the | |
179 | derived class if the object supports rendering its data. | |
180 | */ | |
181 | virtual bool GetDataHere(void buf) const; | |
182 | ||
183 | /** | |
184 | Gets the size of our data. Must be implemented in the derived class if the | |
185 | object supports rendering its data. | |
186 | */ | |
187 | virtual size_t GetDataSize() const; | |
188 | ||
189 | /** | |
190 | Returns the (one and only one) format supported by this object. It is supposed | |
191 | that the format is supported in both directions. | |
192 | */ | |
193 | const wxDataFormat GetFormat() const; | |
194 | ||
195 | /** | |
196 | Copy the data from the buffer, return @true on success. Must be implemented in | |
197 | the derived class if the object supports setting its data. | |
198 | @b wxPython note: When implementing this method in wxPython, the data comes | |
199 | as a single string parameter rather than the two shown here. | |
200 | */ | |
201 | virtual bool SetData(size_t len, const void buf); | |
202 | ||
203 | /** | |
204 | Sets the supported format. | |
205 | */ | |
206 | void SetFormat(const wxDataFormat& format); | |
207 | }; | |
208 | ||
209 | ||
210 | ||
211 | /** | |
212 | @class wxBitmapDataObject | |
213 | @wxheader{dataobj.h} | |
214 | ||
215 | wxBitmapDataObject is a specialization of wxDataObject for bitmap data. It can | |
216 | be used without change to paste data into the | |
217 | wxClipboard or a wxDropSource. A | |
218 | user may wish to derive a new class from this class for providing a bitmap | |
219 | on-demand in order to minimize memory consumption when offering data in several | |
220 | formats, such as a bitmap and GIF. | |
221 | ||
222 | @b wxPython note: If you wish to create a derived wxBitmapDataObject class in | |
223 | wxPython you should derive the class from wxPyBitmapDataObject | |
224 | in order to get Python-aware capabilities for the various virtual | |
225 | methods. | |
226 | ||
227 | @library{wxcore} | |
228 | @category{dnd} | |
229 | ||
230 | @see @ref overview_wxdndoverview "Clipboard and drag and drop overview", | |
231 | wxDataObject, wxDataObjectSimple, wxFileDataObject, wxTextDataObject, wxDataObject | |
232 | */ | |
233 | class wxBitmapDataObject : public wxDataObjectSimple | |
234 | { | |
235 | public: | |
236 | /** | |
237 | Constructor, optionally passing a bitmap (otherwise use | |
238 | SetBitmap() later). | |
239 | */ | |
240 | wxBitmapDataObject(const wxBitmap& bitmap = wxNullBitmap); | |
241 | ||
242 | /** | |
243 | Returns the bitmap associated with the data object. You may wish to override | |
244 | this method when offering data on-demand, but this is not required by | |
245 | wxWidgets' internals. Use this method to get data in bitmap form from | |
246 | the wxClipboard. | |
247 | */ | |
248 | virtual wxBitmap GetBitmap() const; | |
249 | ||
250 | /** | |
251 | Sets the bitmap associated with the data object. This method is called when the | |
252 | data object receives data. Usually there will be no reason to override this | |
253 | function. | |
254 | */ | |
255 | virtual void SetBitmap(const wxBitmap& bitmap); | |
256 | }; | |
257 | ||
258 | ||
259 | ||
260 | /** | |
261 | @class wxDataFormat | |
262 | @wxheader{dataobj.h} | |
263 | ||
264 | A wxDataFormat is an encapsulation of a platform-specific format handle which | |
265 | is used by the system for the clipboard and drag and drop operations. The | |
266 | applications are usually only interested in, for example, pasting data from the | |
267 | clipboard only if the data is in a format the program understands and a data | |
268 | format is something which uniquely identifies this format. | |
269 | ||
270 | On the system level, a data format is usually just a number (@c CLIPFORMAT | |
271 | under Windows or @c Atom under X11, for example) and the standard formats | |
272 | are, indeed, just numbers which can be implicitly converted to wxDataFormat. | |
273 | The standard formats are: | |
274 | ||
275 | ||
276 | ||
277 | wxDF_INVALID | |
278 | ||
279 | ||
280 | An invalid format - used as default argument for | |
281 | functions taking a wxDataFormat argument sometimes | |
282 | ||
283 | ||
284 | wxDF_TEXT | |
285 | ||
286 | ||
287 | Text format (wxString) | |
288 | ||
289 | ||
290 | wxDF_BITMAP | |
291 | ||
292 | ||
293 | A bitmap (wxBitmap) | |
294 | ||
295 | ||
296 | wxDF_METAFILE | |
297 | ||
298 | ||
299 | A metafile (wxMetafile, Windows only) | |
300 | ||
301 | ||
302 | wxDF_FILENAME | |
303 | ||
304 | ||
305 | A list of filenames | |
306 | ||
307 | ||
308 | wxDF_HTML | |
309 | ||
310 | ||
311 | An HTML string. This is only valid when passed to wxSetClipboardData | |
312 | when compiled with Visual C++ in non-Unicode mode | |
313 | ||
314 | ||
315 | ||
316 | As mentioned above, these standard formats may be passed to any function taking | |
317 | wxDataFormat argument because wxDataFormat has an implicit conversion from | |
318 | them (or, to be precise from the type @c wxDataFormat::NativeFormat which is | |
319 | the type used by the underlying platform for data formats). | |
320 | ||
321 | Aside the standard formats, the application may also use custom formats which | |
322 | are identified by their names (strings) and not numeric identifiers. Although | |
323 | internally custom format must be created (or @e registered) first, you | |
324 | shouldn't care about it because it is done automatically the first time the | |
325 | wxDataFormat object corresponding to a given format name is created. The only | |
326 | implication of this is that you should avoid having global wxDataFormat objects | |
327 | with non-default constructor because their constructors are executed before the | |
328 | program has time to perform all necessary initialisations and so an attempt to | |
329 | do clipboard format registration at this time will usually lead to a crash! | |
330 | ||
331 | @library{wxbase} | |
332 | @category{dnd} | |
333 | ||
334 | @see @ref overview_wxdndoverview "Clipboard and drag and drop overview", @ref | |
335 | overview_samplednd "DnD sample", wxDataObject | |
336 | */ | |
337 | class wxDataFormat | |
338 | { | |
339 | public: | |
340 | /** | |
341 | Constructs a data format object for a custom format identified by its name | |
342 | @e format. | |
343 | */ | |
344 | wxDataFormat(const wxChar format); | |
345 | ||
346 | /** | |
347 | Returns the name of a custom format (this function will fail for a standard | |
348 | format). | |
349 | */ | |
350 | wxString GetId() const; | |
351 | ||
352 | /** | |
353 | Returns the platform-specific number identifying the format. | |
354 | */ | |
355 | NativeFormat GetType() const; | |
356 | ||
357 | /** | |
358 | Sets the format to be the custom format identified by the given name. | |
359 | */ | |
360 | void SetId(const wxChar format); | |
361 | ||
362 | /** | |
363 | Sets the format to the given value, which should be one of wxDF_XXX constants. | |
364 | */ | |
365 | void SetType(NativeFormat format); | |
366 | ||
367 | /** | |
368 | Returns @true if the formats are different. | |
369 | */ | |
370 | bool operator !=(const wxDataFormat& format) const; | |
371 | ||
372 | /** | |
373 | Returns @true if the formats are equal. | |
374 | */ | |
375 | bool operator ==(const wxDataFormat& format) const; | |
376 | }; | |
377 | ||
378 | ||
379 | ||
380 | /** | |
381 | @class wxURLDataObject | |
382 | @wxheader{dataobj.h} | |
383 | ||
384 | wxURLDataObject is a wxDataObject containing an URL | |
385 | and can be used e.g. when you need to put an URL on or retrieve it from the | |
386 | clipboard: | |
387 | ||
388 | @code | |
389 | wxTheClipboard-SetData(new wxURLDataObject(url)); | |
390 | @endcode | |
391 | ||
392 | @library{wxcore} | |
393 | @category{dnd} | |
394 | ||
395 | @see @ref overview_wxdndoverview "Clipboard and drag and drop overview", | |
396 | wxDataObject | |
397 | */ | |
398 | class wxURLDataObject | |
399 | { | |
400 | public: | |
401 | /** | |
402 | Constructor, may be used to initialize the URL. If @a url is empty, | |
403 | SetURL() can be used later. | |
404 | */ | |
405 | wxURLDataObject(const wxString& url = wxEmptyString); | |
406 | ||
407 | /** | |
408 | Returns the URL stored by this object, as a string. | |
409 | */ | |
410 | wxString GetURL() const; | |
411 | ||
412 | /** | |
413 | Sets the URL stored by this object. | |
414 | */ | |
415 | void SetURL(const wxString& url); | |
416 | }; | |
417 | ||
418 | ||
419 | ||
420 | /** | |
421 | @class wxDataObject | |
422 | @wxheader{dataobj.h} | |
423 | ||
424 | A wxDataObject represents data that can be copied to or from the clipboard, or | |
425 | dragged and dropped. The important thing about wxDataObject is that this is a | |
426 | 'smart' piece of data unlike 'dumb' data containers such as memory | |
427 | buffers or files. Being 'smart' here means that the data object itself should | |
428 | know what data formats it supports and how to render itself in each of | |
429 | its supported formats. | |
430 | ||
431 | A supported format, incidentally, is exactly the format in which the data can | |
432 | be requested from a data object or from which the data object may be set. In | |
433 | the general case, an object may support different formats on 'input' and | |
434 | 'output', i.e. it may be able to render itself in a given format but not be | |
435 | created from data on this format or vice versa. wxDataObject defines an | |
436 | enumeration type | |
437 | ||
438 | @code | |
439 | enum Direction | |
440 | { | |
441 | Get = 0x01, // format is supported by GetDataHere() | |
442 | Set = 0x02 // format is supported by SetData() | |
443 | }; | |
444 | @endcode | |
445 | ||
446 | which distinguishes between them. See | |
447 | wxDataFormat documentation for more about formats. | |
448 | ||
449 | Not surprisingly, being 'smart' comes at a price of added complexity. This is | |
450 | reasonable for the situations when you really need to support multiple formats, | |
451 | but may be annoying if you only want to do something simple like cut and paste | |
452 | text. | |
453 | ||
454 | To provide a solution for both cases, wxWidgets has two predefined classes | |
455 | which derive from wxDataObject: wxDataObjectSimple and | |
456 | wxDataObjectComposite. | |
457 | wxDataObjectSimple is | |
458 | the simplest wxDataObject possible and only holds data in a single format (such | |
459 | as HTML or text) and wxDataObjectComposite is | |
460 | the simplest way to implement a wxDataObject that does support multiple formats | |
461 | because it achieves this by simply holding several wxDataObjectSimple objects. | |
462 | ||
463 | So, you have several solutions when you need a wxDataObject class (and you need | |
464 | one as soon as you want to transfer data via the clipboard or drag and drop): | |
465 | ||
466 | ||
467 | ||
468 | @b 1. Use one of the built-in classes | |
469 | ||
470 | ||
471 | You may use wxTextDataObject, | |
472 | wxBitmapDataObject or wxFileDataObject in the simplest cases when you only need | |
473 | to support one format and your data is either text, bitmap or list of files. | |
474 | ||
475 | ||
476 | @b 2. Use wxDataObjectSimple | |
477 | ||
478 | ||
479 | Deriving from wxDataObjectSimple is the simplest | |
480 | solution for custom data - you will only support one format and so probably | |
481 | won't be able to communicate with other programs, but data transfer will work | |
482 | in your program (or between different copies of it). | |
483 | ||
484 | ||
485 | @b 3. Use wxDataObjectComposite | |
486 | ||
487 | ||
488 | This is a simple but powerful | |
489 | solution which allows you to support any number of formats (either | |
490 | standard or custom if you combine it with the previous solution). | |
491 | ||
492 | ||
493 | @b 4. Use wxDataObject directly | |
494 | ||
495 | ||
496 | This is the solution for | |
497 | maximal flexibility and efficiency, but it is also the most difficult to | |
498 | implement. | |
499 | ||
500 | ||
501 | ||
502 | Please note that the easiest way to use drag and drop and the clipboard with | |
503 | multiple formats is by using wxDataObjectComposite, but it is not the most | |
504 | efficient one as each wxDataObjectSimple would contain the whole data in its | |
505 | respective formats. Now imagine that you want to paste 200 pages of text in | |
506 | your proprietary format, as well as Word, RTF, HTML, Unicode and plain text to | |
507 | the clipboard and even today's computers are in trouble. For this case, you | |
508 | will have to derive from wxDataObject directly and make it enumerate its | |
509 | formats and provide the data in the requested format on demand. | |
510 | ||
511 | Note that neither the GTK+ data transfer mechanisms for clipboard and | |
512 | drag and drop, nor OLE data transfer, copy any data until another application | |
513 | actually requests the data. This is in contrast to the 'feel' offered to the | |
514 | user of a program who would normally think that the data resides in the | |
515 | clipboard after having pressed 'Copy' - in reality it is only declared to be | |
516 | available. | |
517 | ||
518 | There are several predefined data object classes derived from | |
519 | wxDataObjectSimple: wxFileDataObject, | |
520 | wxTextDataObject, | |
521 | wxBitmapDataObject and | |
522 | wxURLDataObject | |
523 | which can be used without change. | |
524 | ||
525 | You may also derive your own data object classes from | |
526 | wxCustomDataObject for user-defined types. The | |
527 | format of user-defined data is given as a mime-type string literal, such as | |
528 | "application/word" or "image/png". These strings are used as they are under | |
529 | Unix (so far only GTK+) to identify a format and are translated into their | |
530 | Windows equivalent under Win32 (using the OLE IDataObject for data exchange to | |
531 | and from the clipboard and for drag and drop). Note that the format string | |
532 | translation under Windows is not yet finished. | |
533 | ||
534 | @b wxPython note: At this time this class is not directly usable from wxPython. | |
535 | Derive a class from wxPyDataObjectSimple() | |
536 | instead. | |
537 | ||
538 | @b wxPerl note: This class is not currently usable from wxPerl; you may | |
539 | use Wx::PlDataObjectSimple instead. | |
540 | ||
541 | @library{wxcore} | |
542 | @category{dnd} | |
543 | ||
544 | @see @ref overview_wxdndoverview "Clipboard and drag and drop overview", @ref | |
545 | overview_samplednd "DnD sample", wxFileDataObject, wxTextDataObject, wxBitmapDataObject, wxCustomDataObject, wxDropTarget, wxDropSource, wxTextDropTarget, wxFileDropTarget | |
546 | */ | |
547 | class wxDataObject | |
548 | { | |
549 | public: | |
550 | /** | |
551 | Constructor. | |
552 | */ | |
553 | wxDataObject(); | |
554 | ||
555 | /** | |
556 | Destructor. | |
557 | */ | |
558 | ~wxDataObject(); | |
559 | ||
560 | /** | |
561 | Copy all supported formats in the given direction to the array pointed to by | |
562 | @e formats. There is enough space for GetFormatCount(dir) formats in it. | |
563 | */ | |
564 | virtual void GetAllFormats(wxDataFormat* formats, | |
565 | Direction dir = Get) const; | |
566 | ||
567 | /** | |
568 | The method will write the data of the format @a format in the buffer @a buf and | |
569 | return @true on success, @false on failure. | |
570 | */ | |
571 | virtual bool GetDataHere(const wxDataFormat& format, void buf) const; | |
572 | ||
573 | /** | |
574 | Returns the data size of the given format @e format. | |
575 | */ | |
576 | virtual size_t GetDataSize(const wxDataFormat& format) const; | |
577 | ||
578 | /** | |
579 | Returns the number of available formats for rendering or setting the data. | |
580 | */ | |
581 | virtual size_t GetFormatCount(Direction dir = Get) const; | |
582 | ||
583 | /** | |
584 | Returns the preferred format for either rendering the data (if @a dir is @c Get, | |
585 | its default value) or for setting it. Usually this will be the | |
586 | native format of the wxDataObject. | |
587 | */ | |
588 | virtual wxDataFormat GetPreferredFormat(Direction dir = Get) const; | |
589 | ||
590 | /** | |
591 | Set the data in the format @a format of the length @a len provided in the | |
592 | buffer @e buf. | |
593 | Returns @true on success, @false on failure. | |
594 | */ | |
595 | virtual bool SetData(const wxDataFormat& format, size_t len, | |
596 | const void buf); | |
597 | }; | |
598 | ||
599 | ||
600 | ||
601 | /** | |
602 | @class wxTextDataObject | |
603 | @wxheader{dataobj.h} | |
604 | ||
605 | wxTextDataObject is a specialization of wxDataObject for text data. It can be | |
606 | used without change to paste data into the wxClipboard | |
607 | or a wxDropSource. A user may wish to derive a new | |
608 | class from this class for providing text on-demand in order to minimize memory | |
609 | consumption when offering data in several formats, such as plain text and RTF | |
610 | because by default the text is stored in a string in this class, but it might | |
611 | as well be generated when requested. For this, | |
612 | wxTextDataObject::GetTextLength and | |
613 | wxTextDataObject::GetText will have to be overridden. | |
614 | ||
615 | Note that if you already have the text inside a string, you will not achieve | |
616 | any efficiency gain by overriding these functions because copying wxStrings is | |
617 | already a very efficient operation (data is not actually copied because | |
618 | wxStrings are reference counted). | |
619 | ||
620 | @b wxPython note: If you wish to create a derived wxTextDataObject class in | |
621 | wxPython you should derive the class from wxPyTextDataObject | |
622 | in order to get Python-aware capabilities for the various virtual | |
623 | methods. | |
624 | ||
625 | @library{wxcore} | |
626 | @category{dnd} | |
627 | ||
628 | @see @ref overview_wxdndoverview "Clipboard and drag and drop overview", | |
629 | wxDataObject, wxDataObjectSimple, wxFileDataObject, wxBitmapDataObject | |
630 | */ | |
631 | class wxTextDataObject : public wxDataObjectSimple | |
632 | { | |
633 | public: | |
634 | /** | |
635 | Constructor, may be used to initialise the text (otherwise | |
636 | SetText() should be used later). | |
637 | */ | |
638 | wxTextDataObject(const wxString& text = wxEmptyString); | |
639 | ||
640 | /** | |
641 | Returns the text associated with the data object. You may wish to override | |
642 | this method when offering data on-demand, but this is not required by | |
643 | wxWidgets' internals. Use this method to get data in text form from | |
644 | the wxClipboard. | |
645 | */ | |
646 | virtual wxString GetText() const; | |
647 | ||
648 | /** | |
649 | Returns the data size. By default, returns the size of the text data | |
650 | set in the constructor or using SetText(). | |
651 | This can be overridden to provide text size data on-demand. It is recommended | |
652 | to return the text length plus 1 for a trailing zero, but this is not | |
653 | strictly required. | |
654 | */ | |
655 | virtual size_t GetTextLength() const; | |
656 | ||
657 | /** | |
658 | Sets the text associated with the data object. This method is called | |
659 | when the data object receives the data and, by default, copies the text into | |
660 | the member variable. If you want to process the text on the fly you may wish to | |
661 | override this function. | |
662 | */ | |
663 | virtual void SetText(const wxString& strText); | |
664 | }; | |
665 | ||
666 | ||
667 | ||
668 | /** | |
669 | @class wxFileDataObject | |
670 | @wxheader{dataobj.h} | |
671 | ||
672 | wxFileDataObject is a specialization of wxDataObject | |
673 | for file names. The program works with it just as if it were a list of absolute | |
674 | file | |
675 | names, but internally it uses the same format as | |
676 | Explorer and other compatible programs under Windows or GNOME/KDE filemanager | |
677 | under Unix which makes it possible to receive files from them using this | |
678 | class. | |
679 | ||
680 | @b Warning: Under all non-Windows platforms this class is currently | |
681 | "input-only", i.e. you can receive the files from another application, but | |
682 | copying (or dragging) file(s) from a wxWidgets application is not currently | |
683 | supported. PS: GTK2 should work as well. | |
684 | ||
685 | @library{wxcore} | |
686 | @category{dnd} | |
687 | ||
688 | @see wxDataObject, wxDataObjectSimple, wxTextDataObject, wxBitmapDataObject, | |
689 | wxDataObject | |
690 | */ | |
691 | class wxFileDataObject : public wxDataObjectSimple | |
692 | { | |
693 | public: | |
694 | /** | |
695 | Constructor. | |
696 | */ | |
697 | wxFileDataObject(); | |
698 | ||
699 | /** | |
700 | @b MSW only: adds a file to the file list represented by this data object. | |
701 | */ | |
702 | virtual void AddFile(const wxString& file); | |
703 | ||
704 | /** | |
705 | Returns the array() of file names. | |
706 | */ | |
707 | const wxArrayString GetFilenames() const; | |
708 | }; | |
709 |