git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32309 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			201 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| %% Name:        dataobj.tex
 | |
| %% Purpose:     wxDataObject documentation
 | |
| %% Author:      Vadim Zeitlin
 | |
| %% Modified by:
 | |
| %% Created:     18.10.99
 | |
| %% RCS-ID:      $Id$
 | |
| %% Copyright:   (c) wxWidgets team
 | |
| %% License:     wxWindows license
 | |
| %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | |
| 
 | |
| \section{\class{wxDataObject}}\label{wxdataobject}
 | |
| 
 | |
| A wxDataObject represents data that can be copied to or from the clipboard, or
 | |
| dragged and dropped. The important thing about wxDataObject is that this is a
 | |
| 'smart' piece of data unlike 'dumb' data containers such as memory
 | |
| buffers or files. Being 'smart' here means that the data object itself should
 | |
| know what data formats it supports and how to render itself in each of
 | |
| its supported formats.
 | |
| 
 | |
| A supported format, incidentally, is exactly the format in which the data can
 | |
| be requested from a data object or from which the data object may be set. In
 | |
| the general case, an object may support different formats on 'input' and
 | |
| 'output', i.e. it may be able to render itself in a given format but not be
 | |
| created from data on this format or vice versa. wxDataObject defines an
 | |
| enumeration type
 | |
| 
 | |
| \begin{verbatim}
 | |
| enum Direction
 | |
| {
 | |
|     Get  = 0x01,    // format is supported by GetDataHere()
 | |
|     Set  = 0x02     // format is supported by SetData()
 | |
| };
 | |
| \end{verbatim}
 | |
| 
 | |
| which distinguishes between them. See 
 | |
| \helpref{wxDataFormat}{wxdataformat} documentation for more about formats.
 | |
| 
 | |
| Not surprisingly, being 'smart' comes at a price of added complexity. This is
 | |
| reasonable for the situations when you really need to support multiple formats,
 | |
| but may be annoying if you only want to do something simple like cut and paste
 | |
| text.
 | |
| 
 | |
| To provide a solution for both cases, wxWidgets has two predefined classes
 | |
| which derive from wxDataObject: \helpref{wxDataObjectSimple}{wxdataobjectsimple} and 
 | |
| \helpref{wxDataObjectComposite}{wxdataobjectcomposite}. 
 | |
| \helpref{wxDataObjectSimple}{wxdataobjectsimple} is
 | |
| the simplest wxDataObject possible and only holds data in a single format (such
 | |
| as HTML or text) and \helpref{wxDataObjectComposite}{wxdataobjectcomposite} is
 | |
| the simplest way to implement a wxDataObject that does support multiple formats
 | |
| because it achieves this by simply holding several wxDataObjectSimple objects.
 | |
| 
 | |
| So, you have several solutions when you need a wxDataObject class (and you need
 | |
| one as soon as you want to transfer data via the clipboard or drag and drop):
 | |
| 
 | |
| \begin{twocollist}\itemsep=1cm
 | |
| \twocolitem{{\bf 1. Use one of the built-in classes}}{You may use wxTextDataObject,
 | |
| wxBitmapDataObject or wxFileDataObject in the simplest cases when you only need
 | |
| to support one format and your data is either text, bitmap or list of files.}
 | |
| \twocolitem{{\bf 2. Use wxDataObjectSimple}}{Deriving from wxDataObjectSimple is the simplest
 | |
| solution for custom data - you will only support one format and so probably
 | |
| won't be able to communicate with other programs, but data transfer will work
 | |
| in your program (or between different copies of it).}
 | |
| \twocolitem{{\bf 3. Use wxDataObjectComposite}}{This is a simple but powerful
 | |
| solution which allows you to support any number of formats (either
 | |
| standard or custom if you combine it with the previous solution).}
 | |
| \twocolitem{{\bf 4. Use wxDataObject directly}}{This is the solution for
 | |
| maximal flexibility and efficiency, but it is also the most difficult to
 | |
| implement.}
 | |
| \end{twocollist}
 | |
| 
 | |
| Please note that the easiest way to use drag and drop and the clipboard with
 | |
| multiple formats is by using wxDataObjectComposite, but it is not the most
 | |
| efficient one as each wxDataObjectSimple would contain the whole data in its
 | |
| respective formats. Now imagine that you want to paste 200 pages of text in
 | |
| your proprietary format, as well as Word, RTF, HTML, Unicode and plain text to
 | |
| the clipboard and even today's computers are in trouble. For this case, you
 | |
| will have to derive from wxDataObject directly and make it enumerate its
 | |
| formats and provide the data in the requested format on demand.
 | |
| 
 | |
| Note that neither the GTK+ data transfer mechanisms for clipboard and
 | |
| drag and drop, nor OLE data transfer, copy any data until another application
 | |
| actually requests the data. This is in contrast to the 'feel' offered to the
 | |
| user of a program who would normally think that the data resides in the
 | |
| clipboard after having pressed 'Copy' - in reality it is only declared to be
 | |
| available.
 | |
| 
 | |
| There are several predefined data object classes derived from
 | |
| wxDataObjectSimple: \helpref{wxFileDataObject}{wxfiledataobject}, 
 | |
| \helpref{wxTextDataObject}{wxtextdataobject} and 
 | |
| \helpref{wxBitmapDataObject}{wxbitmapdataobject} which can be used without
 | |
| change.
 | |
| 
 | |
| You may also derive your own data object classes from 
 | |
| \helpref{wxCustomDataObject}{wxcustomdataobject} for user-defined types. The
 | |
| format of user-defined data is given as a mime-type string literal, such as
 | |
| "application/word" or "image/png". These strings are used as they are under
 | |
| Unix (so far only GTK+) to identify a format and are translated into their
 | |
| Windows equivalent under Win32 (using the OLE IDataObject for data exchange to
 | |
| and from the clipboard and for drag and drop). Note that the format string
 | |
| translation under Windows is not yet finished.
 | |
| 
 | |
| \pythonnote{At this time this class is not directly usable from wxPython.
 | |
| Derive a class from \helpref{wxPyDataObjectSimple}{wxdataobjectsimple} 
 | |
| instead.}
 | |
| 
 | |
| \perlnote{This class is not currently usable from wxPerl; you may
 | |
| use \helpref{Wx::PlDataObjectSimple}{wxdataobjectsimple} instead.}
 | |
| 
 | |
| \wxheading{Virtual functions to override}
 | |
| 
 | |
| Each class derived directly from wxDataObject must override and implement all
 | |
| of its functions which are pure virtual in the base class.
 | |
| 
 | |
| The data objects which only render their data or only set it (i.e. work in
 | |
| only one direction), should return 0 from 
 | |
| \helpref{GetFormatCount}{wxdataobjectgetformatcount}.
 | |
| 
 | |
| \wxheading{Derived from}
 | |
| 
 | |
| None
 | |
| 
 | |
| \wxheading{Include files}
 | |
| 
 | |
| <wx/dataobj.h>
 | |
| 
 | |
| \wxheading{See also}
 | |
| 
 | |
| \helpref{Clipboard and drag and drop overview}{wxdndoverview}, 
 | |
| \helpref{DnD sample}{samplednd}, 
 | |
| \helpref{wxFileDataObject}{wxfiledataobject}, 
 | |
| \helpref{wxTextDataObject}{wxtextdataobject}, 
 | |
| \helpref{wxBitmapDataObject}{wxbitmapdataobject}, 
 | |
| \helpref{wxCustomDataObject}{wxcustomdataobject}, 
 | |
| \helpref{wxDropTarget}{wxdroptarget}, 
 | |
| \helpref{wxDropSource}{wxdropsource}, 
 | |
| \helpref{wxTextDropTarget}{wxtextdroptarget}, 
 | |
| \helpref{wxFileDropTarget}{wxfiledroptarget}
 | |
| 
 | |
| \latexignore{\rtfignore{\wxheading{Members}}}
 | |
| 
 | |
| \membersection{wxDataObject::wxDataObject}\label{wxdataobjectwxdataobject}
 | |
| 
 | |
| \func{}{wxDataObject}{\void}
 | |
| 
 | |
| Constructor.
 | |
| 
 | |
| \membersection{wxDataObject::\destruct{wxDataObject}}\label{wxdataobjectdtor}
 | |
| 
 | |
| \func{}{\destruct{wxDataObject}}{\void}
 | |
| 
 | |
| Destructor.
 | |
| 
 | |
| \membersection{wxDataObject::GetAllFormats}\label{wxdataobjectgetallformats}
 | |
| 
 | |
| \constfunc{virtual void}{GetAllFormats}{ \param{wxDataFormat *}{formats}, \param{Direction}{ dir = Get}}
 | |
| 
 | |
| Copy all supported formats in the given direction to the array pointed to by 
 | |
| {\it formats}. There is enough space for GetFormatCount(dir) formats in it.
 | |
| 
 | |
| \perlnote{In wxPerl this method only takes the {\tt dir} parameter. 
 | |
| In scalar context it returns the first format,
 | |
| in list context it returns a list containing all the supported formats.}
 | |
| 
 | |
| \membersection{wxDataObject::GetDataHere}\label{wxdataobjectgetdatahere}
 | |
| 
 | |
| \constfunc{virtual bool}{GetDataHere}{\param{const wxDataFormat\&}{ format}, \param{void }{*buf} }
 | |
| 
 | |
| The method will write the data of the format {\it format} in the buffer {\it
 | |
| buf} and return true on success, false on failure.
 | |
| 
 | |
| \membersection{wxDataObject::GetDataSize}\label{wxdataobjectgetdatasize}
 | |
| 
 | |
| \constfunc{virtual size\_t}{GetDataSize}{\param{const wxDataFormat\&}{ format} }
 | |
| 
 | |
| Returns the data size of the given format {\it format}.
 | |
| 
 | |
| \membersection{wxDataObject::GetFormatCount}\label{wxdataobjectgetformatcount}
 | |
| 
 | |
| \constfunc{virtual size\_t}{GetFormatCount}{\param{Direction}{ dir = Get}}
 | |
| 
 | |
| Returns the number of available formats for rendering or setting the data.
 | |
| 
 | |
| \membersection{wxDataObject::GetPreferredFormat}\label{wxdataobjectgetpreferredformat}
 | |
| 
 | |
| \constfunc{virtual wxDataFormat}{GetPreferredFormat}{\param{Direction}{ dir = Get}}
 | |
| 
 | |
| Returns the preferred format for either rendering the data (if {\it dir} is {\tt Get},
 | |
| its default value) or for setting it. Usually this will be the
 | |
| native format of the wxDataObject.
 | |
| 
 | |
| \membersection{wxDataObject::SetData}\label{wxdataobjectsetdata}
 | |
| 
 | |
| \func{virtual bool}{SetData}{ \param{const wxDataFormat\&}{ format}, \param{size\_t}{ len}, \param{const void }{*buf} }
 | |
| 
 | |
| Set the data in the format {\it format} of the length {\it len} provided in the
 | |
| buffer {\it buf}.
 | |
| 
 | |
| Returns true on success, false on failure.
 | |
| 
 |