8795498cd9
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.
|
|
|