- 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
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}
(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}.
// 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,
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);
bool m_deletebufferwhendone;
protected:
- bool m_connected;
+ bool m_connected;
DECLARE_NO_ASSIGN_CLASS(wxConnectionBase)
DECLARE_CLASS(wxConnectionBase)
}
-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 )