X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fc9c7c09bd464f9d0685df1660a3a810ce4cf5dc..e63f19ba93dad9ffe386e442e86d38e07345df7b:/docs/latex/wx/dataobj.tex?ds=sidebyside diff --git a/docs/latex/wx/dataobj.tex b/docs/latex/wx/dataobj.tex index 024b7a2de8..a1ef802a82 100644 --- a/docs/latex/wx/dataobj.tex +++ b/docs/latex/wx/dataobj.tex @@ -1,38 +1,124 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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. There are two classes directly derived from wxDataObject: -wxDataObjectSimple and wxDataObjectComposite. As you will guess, wxDataObjectSimple -holds data for a single format (such as HTML or text) and wxDataObjectComposite -can hold any number of wxDataObjectSimple classes. Please note that this is an -easy way to use Drag'n'Drop and the clipboard with multiple formats, but not the -most efficient one as each wxDataObjectSimple would contain the whole data in its -respective formars. 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 the clipboard and Drag'n'Drop -nor the OLE data transfer copies 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}{wxprivatedataobject} -for user-defined types. The format of user-defined data is given as 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'n'Drop). -Note that the format string translation under Windows is not yet finnished. +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} -\helpref{wxObject}{wxobject} +None \wxheading{Include files} @@ -40,13 +126,16 @@ Note that the format string translation under Windows is not yet finnished. \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{wxPrivateDataObject}{wxprivatedataobject}, -\helpref{Drag and drop overview}{wxdndoverview}, \helpref{wxDropTarget}{wxdroptarget}, +\helpref{wxCustomDataObject}{wxcustomdataobject}, +\helpref{wxDropTarget}{wxdroptarget}, \helpref{wxDropSource}{wxdropsource}, -\helpref{wxTextDropTarget}{wxtextdroptarget}, \helpref{wxFileDropTarget}{wxfiledroptarget} +\helpref{wxTextDropTarget}{wxtextdroptarget}, +\helpref{wxFileDropTarget}{wxfiledroptarget} \latexignore{\rtfignore{\wxheading{Members}}} @@ -62,17 +151,23 @@ Constructor. Destructor. -\membersection{wxDataObject::GetFormatCount}\label{wxdataobjectgetformatcount} +\membersection{wxDataObject::GetAllFormats}\label{wxdataobjectgetallformats} -\constfunc{virtual size_t}{GetFormatCount}{\void} +\constfunc{virtual void}{GetAllFormats}{ \param{wxDataFormat *}{formats}, \param{Direction}{ dir = Get}} -Return the number of available formats. +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} } +\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}. +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} @@ -80,16 +175,26 @@ The method will write the data of the format {\it format} in the buffer {\it buf 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}{\void} +\constfunc{virtual wxDataFormat}{GetPreferredFormat}{\param{Direction}{ dir = Get}} -Returns the preferred format. Usually the first format in the list of available formats. +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} } +\func{virtual bool}{SetData}{ \param{const wxDataFormat\&}{ format}, \param{size\_t}{ len}, \param{const void }{*buf} } -Set the data of the format {\it format} and the size {\it len} provided in the buffer {\it 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.