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 - wxXmlProperty class was renamed to wxXmlAttribute in order to use standard
terminology. Corresponding wxXmlNode methods were renamed to use terminology. Corresponding wxXmlNode methods were renamed to use
"Attribute" instead of "Property" or "Prop" in their names. "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 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 Called by the client application to execute a command on the
server. Can also be used to transfer arbitrary data to the server server. Can also be used to transfer arbitrary data to the server
(similar to \helpref{wxConnection::Poke}{wxconnectionpoke} in (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. member to be called. Returns true if successful.
\membersection{wxConnection::Disconnect}\label{wxconnectiondisconnect} \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 (finally calling the inherited method as well) so that they know
the connection object is no longer available. 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 Message sent to the server application when the client notifies
it to execute the given data, using \helpref{Execute}{wxconnectionexecute}. it to execute the given data, using \helpref{Execute}{wxconnectionexecute}.

View File

@@ -127,12 +127,19 @@ public:
// Callbacks to SERVER - override at will // Callbacks to SERVER - override at will
virtual bool OnExecute(const wxString& WXUNUSED(topic), virtual bool OnExec(const wxString& WXUNUSED(topic),
const void *WXUNUSED(data), const wxString& WXUNUSED(data))
size_t WXUNUSED(size),
wxIPCFormat WXUNUSED(format))
{ return false; } { 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), virtual const void *OnRequest(const wxString& WXUNUSED(topic),
const wxString& WXUNUSED(item), const wxString& WXUNUSED(item),
size_t *size, size_t *size,
@@ -166,6 +173,17 @@ public:
virtual bool OnDisconnect() { delete this; return true; } 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 // return a buffer at least this size, reallocating buffer if needed
// returns NULL if using an inadequate user buffer which can't be resized // returns NULL if using an inadequate user buffer which can't be resized
void *GetBufferAtLeast(size_t bytes); void *GetBufferAtLeast(size_t bytes);
@@ -184,7 +202,7 @@ private:
bool m_deletebufferwhendone; bool m_deletebufferwhendone;
protected: protected:
bool m_connected; bool m_connected;
DECLARE_NO_ASSIGN_CLASS(wxConnectionBase) DECLARE_NO_ASSIGN_CLASS(wxConnectionBase)
DECLARE_CLASS(wxConnectionBase) DECLARE_CLASS(wxConnectionBase)

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; 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 ) void *wxConnectionBase::GetBufferAtLeast( size_t bytes )
{ {
if ( m_buffersize >= bytes ) if ( m_buffersize >= bytes )