call OnExec() taking wxString argument from OnExecute() by default

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51185 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-01-12 21:04:10 +00:00
parent f312f981b5
commit 022a8a5af2
4 changed files with 77 additions and 10 deletions

View File

@@ -157,6 +157,8 @@ Deprecated methods and their replacements
- wxXmlProperty class was renamed to wxXmlAttribute in order to use standard
terminology. Corresponding wxXmlNode methods were renamed to use
"Attribute" instead of "Property" or "Prop" in their names.
- wxConnection::OnExecute() is not formally deprecated yet but new code should
use simpler OnExec() version which is called with wxString argument
Major new features in this release

View File

@@ -117,7 +117,7 @@ to be called. Returns true if successful.
Called by the client application to execute a command on the
server. Can also be used to transfer arbitrary data to the server
(similar to \helpref{wxConnection::Poke}{wxconnectionpoke} in
that respect). Causes the server connection's \helpref{wxConnection::OnExecute}{wxconnectiononexecute}
that respect). Causes the server connection's \helpref{wxConnection::OnExec}{wxconnectiononexec}
member to be called. Returns true if successful.
\membersection{wxConnection::Disconnect}\label{wxconnectiondisconnect}
@@ -150,9 +150,9 @@ applications should generally override {\bf OnDisconnect}
(finally calling the inherited method as well) so that they know
the connection object is no longer available.
\membersection{wxConnection::OnExecute}\label{wxconnectiononexecute}
\membersection{wxConnection::OnExec}\label{wxconnectiononexec}
\func{virtual bool}{OnExecute}{\param{const wxString\& }{topic}, \param{const void* }{data}, \param{size\_t }{size}, \param{wxIPCFormat}{ format}}
\func{virtual bool}{OnExec}{\param{const wxString\& }{topic}, \param{const wxString\& }{data}}
Message sent to the server application when the client notifies
it to execute the given data, using \helpref{Execute}{wxconnectionexecute}.

View File

@@ -127,12 +127,19 @@ public:
// Callbacks to SERVER - override at will
virtual bool OnExecute(const wxString& WXUNUSED(topic),
const void *WXUNUSED(data),
size_t WXUNUSED(size),
wxIPCFormat WXUNUSED(format))
virtual bool OnExec(const wxString& WXUNUSED(topic),
const wxString& WXUNUSED(data))
{ return false; }
// deprecated function kept for backwards compatibility: usually you will
// want to override OnExec() above instead which receives its data in a more
// convenient format
virtual bool OnExecute(const wxString& topic,
const void *data,
size_t size,
wxIPCFormat format)
{ return OnExec(topic, GetTextFromData(data, size, format)); }
virtual const void *OnRequest(const wxString& WXUNUSED(topic),
const wxString& WXUNUSED(item),
size_t *size,
@@ -166,6 +173,17 @@ public:
virtual bool OnDisconnect() { delete this; return true; }
// converts from the data and format into a wxString automatically
//
// this function accepts data in all of wxIPC_TEXT, wxIPC_UNICODETEXT, and
// wxIPC_UTF8TEXT formats but asserts if the format is anything else
//
// notice that the size parameter here contains the total size of the data,
// including the terminating '\0' or L'\0'
static
wxString GetTextFromData(const void *data, size_t size, wxIPCFormat format);
// return a buffer at least this size, reallocating buffer if needed
// returns NULL if using an inadequate user buffer which can't be resized
void *GetBufferAtLeast(size_t bytes);

View File

@@ -59,12 +59,59 @@ wxConnectionBase::wxConnectionBase(const wxConnectionBase& copy)
}
wxConnectionBase::~wxConnectionBase(void)
wxConnectionBase::~wxConnectionBase()
{
if ( m_deletebufferwhendone && m_buffer )
if ( m_deletebufferwhendone )
delete m_buffer;
}
/* static */
wxString wxConnectionBase::GetTextFromData(const void* data,
size_t size,
wxIPCFormat fmt)
{
wxString s;
switch ( fmt )
{
case wxIPC_TEXT:
// normally the string should be NUL-terminated and size should
// include the total size of the buffer, including NUL -- but don't
// crash (by trying to access (size_t)-1 bytes) if it doesn't
if ( size )
size--;
s = wxString(wx_static_cast(const char *, data), size);
break;
#if wxUSE_UNICODE
// TODO: we should handle both wxIPC_UTF16TEXT and wxIPC_UTF32TEXT here
// for inter-platform IPC
case wxIPC_UNICODETEXT:
wxASSERT_MSG( !(size % sizeof(wchar_t)), "invalid buffer size" );
if ( size )
{
size /= sizeof(wchar_t);
size--;
}
s = wxString(wx_static_cast(const wchar_t *, data), size);
break;
case wxIPC_UTF8TEXT:
if ( size )
size--;
s = wxString::FromUTF8(wx_static_cast(const char *, data), size);
break;
#endif // wxUSE_UNICODE
default:
wxFAIL_MSG( "non-string IPC format in GetTextFromData()" );
}
return s;
}
void *wxConnectionBase::GetBufferAtLeast( size_t bytes )
{
if ( m_buffersize >= bytes )