]> git.saurik.com Git - wxWidgets.git/commitdiff
call OnExec() taking wxString argument from OnExecute() by default
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 12 Jan 2008 21:04:10 +0000 (21:04 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 12 Jan 2008 21:04:10 +0000 (21:04 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51185 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/ipcconn.tex
include/wx/ipcbase.h
src/common/ipcbase.cpp

index 9228db687bf1e3e2c5684710eacaa9e41e82357a..ebe250a96d668e61ef7b03054ac7ec79ffc55643 100644 (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.
 - 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
 
 
 Major new features in this release
index 88e791ef7943d6f4e6515bbf775a2fd1f6c8eb3a..fee3d59ff990cf279c40b7796d3085a0728e2162 100644 (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
 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}
 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.
 
 (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}.
 
 Message sent to the server application when the client notifies
 it to execute the given data, using \helpref{Execute}{wxconnectionexecute}.
index f3987ac4afd333fbbf59f83322fc3944b5cbcf0e..56de3c8d35fc720f595910d818e84f9218bb4007 100644 (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),
-                         const void *WXUNUSED(data),
-                         size_t WXUNUSED(size),
-                         wxIPCFormat WXUNUSED(format))
+  virtual bool OnExec(const wxString& WXUNUSED(topic),
+                      const wxString& WXUNUSED(data))
       { 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),
                                 const wxString& WXUNUSED(item),
                                 size_t *size,
   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; }
 
 
   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);
   // 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);
@@ -184,7 +202,7 @@ private:
   bool          m_deletebufferwhendone;
 
 protected:
   bool          m_deletebufferwhendone;
 
 protected:
-  bool          m_connected;   
+  bool          m_connected;
 
   DECLARE_NO_ASSIGN_CLASS(wxConnectionBase)
   DECLARE_CLASS(wxConnectionBase)
 
   DECLARE_NO_ASSIGN_CLASS(wxConnectionBase)
   DECLARE_CLASS(wxConnectionBase)
index 0de6f3b045204f938ad5675f830f09502a3d1d57..ee7e34278f476aa8ade3961f13d5afce635bc042 100644 (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 )
 {
   if ( m_buffersize >= bytes )
 void *wxConnectionBase::GetBufferAtLeast( size_t bytes )
 {
   if ( m_buffersize >= bytes )