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