]> git.saurik.com Git - wxWidgets.git/commitdiff
fixes for unicode build, return values from event handlers (via
authorRobin Dunn <robin@alldunn.com>
Wed, 24 Mar 2004 23:06:01 +0000 (23:06 +0000)
committerRobin Dunn <robin@alldunn.com>
Wed, 24 Mar 2004 23:06:01 +0000 (23:06 +0000)
updated attributes)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26322 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/contrib/activex/activex.i
wxPython/contrib/activex/activex.py
wxPython/contrib/activex/activex_wrap.cpp
wxPython/contrib/activex/wxie/IEHtmlWin.cpp
wxPython/contrib/activex/wxie/wxactivex.cpp
wxPython/demo/ActiveX_IEHtmlWindow.py

index 426115880a75f38f1a9dfff2bf3dfe7dc24f748d..f77fead3ab1c2589b45a9baa5ebd0dd963ddfe90 100644 (file)
@@ -55,6 +55,7 @@ typedef unsigned short  VARTYPE;
 %{
 // Some conversion helpers
 static wxVariant _PyObj2Variant(PyObject* value);
 %{
 // Some conversion helpers
 static wxVariant _PyObj2Variant(PyObject* value);
+static bool  _PyObj2Variant(PyObject* value, wxVariant& wv);
 static PyObject* _Variant2PyObj(wxVariant& value, bool useNone=False);
 static wxString  _VARTYPEname(VARTYPE vt);
 
 static PyObject* _Variant2PyObj(wxVariant& value, bool useNone=False);
 static wxString  _VARTYPEname(VARTYPE vt);
 
@@ -62,9 +63,9 @@ static wxString  _VARTYPEname(VARTYPE vt);
 inline bool wxPyErr_Occurred()
 {
     bool rval;
 inline bool wxPyErr_Occurred()
 {
     bool rval;
-    wxPyBeginBlockThreads();
+    bool blocked = wxPyBeginBlockThreads();
     rval = PyErr_Occurred() != NULL;
     rval = PyErr_Occurred() != NULL;
-    wxPyEndBlockThreads();
+    wxPyEndBlockThreads(blocked);
     return rval;
 }
 
     return rval;
 }
 
@@ -292,7 +293,7 @@ public:
         NameMap::const_iterator it = m_methodNames.find(name);
         if (it == m_methodNames.end())     {
             wxString msg;
         NameMap::const_iterator it = m_methodNames.find(name);
         if (it == m_methodNames.end())     {
             wxString msg;
-            msg << "method <" << name << "> not found";
+            msg << _T("method <") << name << _T("> not found");
             wxPyErr_SetString(PyExc_KeyError, msg.mb_str());
             static wxFuncX BadVal;
             return BadVal;
             wxPyErr_SetString(PyExc_KeyError, msg.mb_str());
             static wxFuncX BadVal;
             return BadVal;
@@ -304,7 +305,7 @@ public:
         NameMap::const_iterator it = m_propNames.find(name);
         if (it == m_propNames.end())     {
             wxString msg;
         NameMap::const_iterator it = m_propNames.find(name);
         if (it == m_propNames.end())     {
             wxString msg;
-            msg << "property <" << name << "> not found";
+            msg << _T("property <") << name << _T("> not found");
             wxPyErr_SetString(PyExc_KeyError, msg.mb_str());
             static wxPropX BadVal;
             return BadVal;
             wxPyErr_SetString(PyExc_KeyError, msg.mb_str());
             static wxPropX BadVal;
             return BadVal;
@@ -324,11 +325,11 @@ public:
     void SetAXProp(const wxString& name, PyObject* value)
     {        
         const wxPropX& prop = GetAXPropDesc(name);
     void SetAXProp(const wxString& name, PyObject* value)
     {        
         const wxPropX& prop = GetAXPropDesc(name);
-        wxPyBeginBlockThreads();
+        bool blocked = wxPyBeginBlockThreads();
         if (! PyErr_Occurred() ) {
             if (! prop.CanSet()) {
                 wxString msg;
         if (! PyErr_Occurred() ) {
             if (! prop.CanSet()) {
                 wxString msg;
-                msg << "property <" << name << "> is readonly";
+                msg << _T("property <") << name << _T("> is readonly");
                 PyErr_SetString(PyExc_TypeError, msg.mb_str());
                 goto done;
             } else {
                 PyErr_SetString(PyExc_TypeError, msg.mb_str());
                 goto done;
             } else {
@@ -338,9 +339,9 @@ public:
                 VARIANT v = {prop.arg.vt};
                 if (!VariantToMSWVariant(wxV, v) || PyErr_Occurred()) {
                     wxString msg;
                 VARIANT v = {prop.arg.vt};
                 if (!VariantToMSWVariant(wxV, v) || PyErr_Occurred()) {
                     wxString msg;
-                    msg << "Unable to convert value to expected type: ("
-                        << _VARTYPEname(prop.arg.vt) << ") for property <"
-                        << name << ">";
+                    msg << _T("Unable to convert value to expected type: (")
+                        << _VARTYPEname(prop.arg.vt) << _T(") for property <")
+                        << name << _T(">");
                     PyErr_SetString(PyExc_TypeError, msg.mb_str());
                     goto done;
                 }
                     PyErr_SetString(PyExc_TypeError, msg.mb_str());
                     goto done;
                 }
@@ -351,7 +352,7 @@ public:
             }
         }
     done:
             }
         }
     done:
-        wxPyEndBlockThreads();
+        wxPyEndBlockThreads(blocked);
     }
 
     
     }
 
     
@@ -360,11 +361,11 @@ public:
     {        
         PyObject* rval = NULL;
         const wxPropX& prop = GetAXPropDesc(name);
     {        
         PyObject* rval = NULL;
         const wxPropX& prop = GetAXPropDesc(name);
-        wxPyBeginBlockThreads();
+        bool blocked = wxPyBeginBlockThreads();
         if (! PyErr_Occurred() ) {
             if (! prop.CanGet()) {
                 wxString msg;
         if (! PyErr_Occurred() ) {
             if (! prop.CanGet()) {
                 wxString msg;
-                msg << "property <" << name << "> is writeonly";
+                msg << _T("property <") << name << _T("> is writeonly");
                 PyErr_SetString(PyExc_TypeError, msg.mb_str());
                 goto done;
             } else {
                 PyErr_SetString(PyExc_TypeError, msg.mb_str());
                 goto done;
             } else {
@@ -374,9 +375,9 @@ public:
                 wxVariant wv;
                 if (!MSWVariantToVariant(v, wv) || PyErr_Occurred()) {
                     wxString msg;
                 wxVariant wv;
                 if (!MSWVariantToVariant(v, wv) || PyErr_Occurred()) {
                     wxString msg;
-                    msg << "Unable to convert value to expected type: ("
-                        << _VARTYPEname(prop.arg.vt) << ") for property <"
-                        << name << ">";
+                    msg << _T("Unable to convert value to expected type: (")
+                        << _VARTYPEname(prop.arg.vt) << _T(") for property <")
+                        << name << _T(">");
                     PyErr_SetString(PyExc_TypeError, msg.mb_str());
                     goto done;
                 }
                     PyErr_SetString(PyExc_TypeError, msg.mb_str());
                     goto done;
                 }
@@ -385,7 +386,7 @@ public:
             }
         }
     done:
             }
         }
     done:
-        wxPyEndBlockThreads();
+        wxPyEndBlockThreads(blocked);
         return rval;
     }
 
         return rval;
     }
 
@@ -406,7 +407,7 @@ public:
         PyObject* rval = NULL;
         const wxFuncX& func = GetAXMethodDesc(name);
         
         PyObject* rval = NULL;
         const wxFuncX& func = GetAXMethodDesc(name);
         
-        wxPyBeginBlockThreads();
+        bool blocked = wxPyBeginBlockThreads();
         if (! PyErr_Occurred() ) {
             nargs = func.params.size();
             if (nargs > 0)
         if (! PyErr_Occurred() ) {
             nargs = func.params.size();
             if (nargs > 0)
@@ -437,9 +438,9 @@ public:
                             goto done;
                         if (!VariantToMSWVariant(wxV, vargs[nargs - i - 1]) || PyErr_Occurred()) {
                             wxString msg;
                             goto done;
                         if (!VariantToMSWVariant(wxV, vargs[nargs - i - 1]) || PyErr_Occurred()) {
                             wxString msg;
-                            msg << "Unable to convert value to expected type: ("
+                            msg << _T("Unable to convert value to expected type: (")
                                 << _VARTYPEname(vargs[nargs - i - 1].vt)
                                 << _VARTYPEname(vargs[nargs - i - 1].vt)
-                                << ") for parameter " << i;
+                                << _T(") for parameter ") << i;
                             PyErr_SetString(PyExc_TypeError, msg.mb_str());
                             goto done;
                         }
                             PyErr_SetString(PyExc_TypeError, msg.mb_str());
                             goto done;
                         }
@@ -486,7 +487,7 @@ public:
                 PyErr_Clear();
         }
     done:
                 PyErr_Clear();
         }
     done:
-        wxPyEndBlockThreads();
+        wxPyEndBlockThreads(blocked);
         if (vargs) {
             for (int i = 0; i < nargs; i++)
                 VariantClear(&vargs[i]);
         if (vargs) {
             for (int i = 0; i < nargs; i++)
                 VariantClear(&vargs[i]);
@@ -627,25 +628,41 @@ public:
     wxString EventName();
 
     %extend {
     wxString EventName();
 
     %extend {
-        DocStr(_preInit,
-"This is called by the EventThunker before calling the handler.
-We'll convert and load the ActiveX event parameters into
-attributes of the Python event object.");
-        void _preInit(PyObject* pyself) {
-            wxPyBeginBlockThreads();
+
+        // This is called by the EventThunker before calling the
+        // handler. We'll convert and load the ActiveX event parameters into
+        // attributes of the Python event object.
+        void _preCallInit(PyObject* pyself) {
+            bool blocked = wxPyBeginBlockThreads();
             PyObject* pList = PyList_New(0);
             PyObject_SetAttrString(pyself, "paramList", pList);
             Py_DECREF(pList);
             for (int i=0; i<self->ParamCount(); i+=1) {
             PyObject* pList = PyList_New(0);
             PyObject_SetAttrString(pyself, "paramList", pList);
             Py_DECREF(pList);
             for (int i=0; i<self->ParamCount(); i+=1) {
-                PyObject* name = PyString_FromString((char*)self->ParamName(i).mb_str());
+                PyObject* name = PyString_FromString((char*)(const char*)self->ParamName(i).mb_str());
                 PyObject* val = _Variant2PyObj((*self)[i], True);
                 PyObject_SetAttr(pyself, name, val);
                 PyList_Append(pList, name);
                 Py_DECREF(val);
                 Py_DECREF(name);
             }
                 PyObject* val = _Variant2PyObj((*self)[i], True);
                 PyObject_SetAttr(pyself, name, val);
                 PyList_Append(pList, name);
                 Py_DECREF(val);
                 Py_DECREF(name);
             }
-            wxPyEndBlockThreads();
+            wxPyEndBlockThreads(blocked);
+        }
+
+        // This one is called by the EventThunker after calling the
+        // handler. It reloads any "out" parameters from the python attributes
+        // back into the wxVariant they came from.        
+        void _postCallCleanup(PyObject* pyself) {
+            bool blocked = wxPyBeginBlockThreads();
+            for (int i=0; i<self->ParamCount(); i+=1) {
+                PyObject* val = PyObject_GetAttrString(
+                    pyself, (char*)(const char*)self->ParamName(i).mb_str());
+                _PyObj2Variant(val, (*self)[i]);
+                Py_DECREF(val);
+            }
+            wxPyEndBlockThreads(blocked);
         }
         }
+        
+        
     }
 };    
 
     }
 };    
 
@@ -661,9 +678,11 @@ wxVariant _PyObj2Variant(PyObject* value)
     if (value == Py_None)
         return rval;
     
     if (value == Py_None)
         return rval;
     
+#if PYTHON_API_VERSION >= 1012  // Python 2.3+
     else if (PyBool_Check(value))
         rval = (value == Py_True) ? true : false;
     else if (PyBool_Check(value))
         rval = (value == Py_True) ? true : false;
-
+#endif
+    
     else if (PyInt_Check(value))
         rval = PyInt_AS_LONG(value);
 
     else if (PyInt_Check(value))
         rval = PyInt_AS_LONG(value);
 
@@ -676,6 +695,7 @@ wxVariant _PyObj2Variant(PyObject* value)
     // TODO:    PyList of strings --> wxArrayString
     //          wxDateTime
     //          list of objects
     // TODO:    PyList of strings --> wxArrayString
     //          wxDateTime
     //          list of objects
+    //          etc.
 
     else {
         PyErr_SetString(PyExc_TypeError, "Unsupported object type in _PyObj2Variant");
 
     else {
         PyErr_SetString(PyExc_TypeError, "Unsupported object type in _PyObj2Variant");
@@ -685,6 +705,26 @@ wxVariant _PyObj2Variant(PyObject* value)
     return rval;
 }
 
     return rval;
 }
 
+// This one uses the type of the variant to try and force the conversion
+bool  _PyObj2Variant(PyObject* value, wxVariant& wv)
+{
+    wxString type = wv.GetType();
+
+    if ( type == _T("long") || type == _T("bool") || type == _T("char") )
+        wv = PyInt_AsLong(value);
+
+    else if ( type == _T("string") )
+        wv = Py2wxString(value);
+
+    else if ( type == _T("double") )
+        wv  = PyFloat_AsDouble(value);
+
+    else {
+        // it's some other type that we dont' handle yet.  Log it?
+        return false;
+    }
+    return true;
+}
  
 // Caller should already have the GIL!
 PyObject* _Variant2PyObj(wxVariant& value, bool useNone)
  
 // Caller should already have the GIL!
 PyObject* _Variant2PyObj(wxVariant& value, bool useNone)
@@ -703,8 +743,10 @@ PyObject* _Variant2PyObj(wxVariant& value, bool useNone)
     else if (value.IsType(_T("double")))
         rval = PyFloat_FromDouble(value);
 
     else if (value.IsType(_T("double")))
         rval = PyFloat_FromDouble(value);
 
-    else if (value.IsType(_T("bool"))) 
-        rval = PyBool_FromLong((bool)value);
+    else if (value.IsType(_T("bool"))) {
+        rval = (bool)value ? Py_True : Py_False;
+        Py_INCREF(rval);
+    }
     
     else if (value.IsType(_T("string")))
         rval = wx2PyString(value);
     
     else if (value.IsType(_T("string")))
         rval = wx2PyString(value);
@@ -879,7 +921,11 @@ public:
         // need to prepend this as poxy MSHTML will not recognise a HTML comment
         // as starting a html document and treats it as plain text
         // Does nayone know how to force it to html mode ?
         // need to prepend this as poxy MSHTML will not recognise a HTML comment
         // as starting a html document and treats it as plain text
         // Does nayone know how to force it to html mode ?
-        pstrm->prepend = "<html>";
+#if wxUSE_UNICODE
+        // TODO: What to do in this case???
+#else
+        pstrm->prepend = _T("<html>");
+#endif
 
         // strip leading whitespace as it can confuse MSHTML
         wxAutoOleInterface<IStream> strm(pstrm);
 
         // strip leading whitespace as it can confuse MSHTML
         wxAutoOleInterface<IStream> strm(pstrm);
index e834d9e643906d7ab146ca2ab78820d68df53c6d..346ea8e180478c7e615aa71e2feeeb5994fd9cac 100644 (file)
@@ -367,15 +367,13 @@ class ActiveXEvent(core.CommandEvent):
         return "<%s.%s; proxy of C++ wxActiveXEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
     eventName = property(_activex.ActiveXEvent_EventName)
 
         return "<%s.%s; proxy of C++ wxActiveXEvent instance at %s>" % (self.__class__.__module__, self.__class__.__name__, self.this,)
     eventName = property(_activex.ActiveXEvent_EventName)
 
-    def _preInit(*args, **kwargs):
-        """
-        _preInit(PyObject pyself)
+    def _preCallInit(*args, **kwargs):
+        """_preCallInit(PyObject pyself)"""
+        return _activex.ActiveXEvent__preCallInit(*args, **kwargs)
 
 
-        This is called by the EventThunker before calling the handler.
-        We'll convert and load the ActiveX event parameters into
-        attributes of the Python event object.
-        """
-        return _activex.ActiveXEvent__preInit(*args, **kwargs)
+    def _postCallCleanup(*args, **kwargs):
+        """_postCallCleanup(PyObject pyself)"""
+        return _activex.ActiveXEvent__postCallCleanup(*args, **kwargs)
 
 
 class ActiveXEventPtr(ActiveXEvent):
 
 
 class ActiveXEventPtr(ActiveXEvent):
index f29fe40d8fb93c4b7e40b080526afeb778893942..7076c339a1253c49b094fa3280adba4cc62609c4 100644 (file)
@@ -299,6 +299,7 @@ static swig_type_info *swig_types[18];
 
 // Some conversion helpers
 static wxVariant _PyObj2Variant(PyObject* value);
 
 // Some conversion helpers
 static wxVariant _PyObj2Variant(PyObject* value);
+static bool  _PyObj2Variant(PyObject* value, wxVariant& wv);
 static PyObject* _Variant2PyObj(wxVariant& value, bool useNone=False);
 static wxString  _VARTYPEname(VARTYPE vt);
 
 static PyObject* _Variant2PyObj(wxVariant& value, bool useNone=False);
 static wxString  _VARTYPEname(VARTYPE vt);
 
@@ -306,9 +307,9 @@ static wxString  _VARTYPEname(VARTYPE vt);
 inline bool wxPyErr_Occurred()
 {
     bool rval;
 inline bool wxPyErr_Occurred()
 {
     bool rval;
-    wxPyBeginBlockThreads();
+    bool blocked = wxPyBeginBlockThreads();
     rval = PyErr_Occurred() != NULL;
     rval = PyErr_Occurred() != NULL;
-    wxPyEndBlockThreads();
+    wxPyEndBlockThreads(blocked);
     return rval;
 }
 
     return rval;
 }
 
@@ -517,7 +518,7 @@ public:
         NameMap::const_iterator it = m_methodNames.find(name);
         if (it == m_methodNames.end())     {
             wxString msg;
         NameMap::const_iterator it = m_methodNames.find(name);
         if (it == m_methodNames.end())     {
             wxString msg;
-            msg << "method <" << name << "> not found";
+            msg << _T("method <") << name << _T("> not found");
             wxPyErr_SetString(PyExc_KeyError, msg.mb_str());
             static wxFuncX BadVal;
             return BadVal;
             wxPyErr_SetString(PyExc_KeyError, msg.mb_str());
             static wxFuncX BadVal;
             return BadVal;
@@ -529,7 +530,7 @@ public:
         NameMap::const_iterator it = m_propNames.find(name);
         if (it == m_propNames.end())     {
             wxString msg;
         NameMap::const_iterator it = m_propNames.find(name);
         if (it == m_propNames.end())     {
             wxString msg;
-            msg << "property <" << name << "> not found";
+            msg << _T("property <") << name << _T("> not found");
             wxPyErr_SetString(PyExc_KeyError, msg.mb_str());
             static wxPropX BadVal;
             return BadVal;
             wxPyErr_SetString(PyExc_KeyError, msg.mb_str());
             static wxPropX BadVal;
             return BadVal;
@@ -549,11 +550,11 @@ public:
     void SetAXProp(const wxString& name, PyObject* value)
     {        
         const wxPropX& prop = GetAXPropDesc(name);
     void SetAXProp(const wxString& name, PyObject* value)
     {        
         const wxPropX& prop = GetAXPropDesc(name);
-        wxPyBeginBlockThreads();
+        bool blocked = wxPyBeginBlockThreads();
         if (! PyErr_Occurred() ) {
             if (! prop.CanSet()) {
                 wxString msg;
         if (! PyErr_Occurred() ) {
             if (! prop.CanSet()) {
                 wxString msg;
-                msg << "property <" << name << "> is readonly";
+                msg << _T("property <") << name << _T("> is readonly");
                 PyErr_SetString(PyExc_TypeError, msg.mb_str());
                 goto done;
             } else {
                 PyErr_SetString(PyExc_TypeError, msg.mb_str());
                 goto done;
             } else {
@@ -563,9 +564,9 @@ public:
                 VARIANT v = {prop.arg.vt};
                 if (!VariantToMSWVariant(wxV, v) || PyErr_Occurred()) {
                     wxString msg;
                 VARIANT v = {prop.arg.vt};
                 if (!VariantToMSWVariant(wxV, v) || PyErr_Occurred()) {
                     wxString msg;
-                    msg << "Unable to convert value to expected type: ("
-                        << _VARTYPEname(prop.arg.vt) << ") for property <"
-                        << name << ">";
+                    msg << _T("Unable to convert value to expected type: (")
+                        << _VARTYPEname(prop.arg.vt) << _T(") for property <")
+                        << name << _T(">");
                     PyErr_SetString(PyExc_TypeError, msg.mb_str());
                     goto done;
                 }
                     PyErr_SetString(PyExc_TypeError, msg.mb_str());
                     goto done;
                 }
@@ -576,7 +577,7 @@ public:
             }
         }
     done:
             }
         }
     done:
-        wxPyEndBlockThreads();
+        wxPyEndBlockThreads(blocked);
     }
 
     
     }
 
     
@@ -585,11 +586,11 @@ public:
     {        
         PyObject* rval = NULL;
         const wxPropX& prop = GetAXPropDesc(name);
     {        
         PyObject* rval = NULL;
         const wxPropX& prop = GetAXPropDesc(name);
-        wxPyBeginBlockThreads();
+        bool blocked = wxPyBeginBlockThreads();
         if (! PyErr_Occurred() ) {
             if (! prop.CanGet()) {
                 wxString msg;
         if (! PyErr_Occurred() ) {
             if (! prop.CanGet()) {
                 wxString msg;
-                msg << "property <" << name << "> is writeonly";
+                msg << _T("property <") << name << _T("> is writeonly");
                 PyErr_SetString(PyExc_TypeError, msg.mb_str());
                 goto done;
             } else {
                 PyErr_SetString(PyExc_TypeError, msg.mb_str());
                 goto done;
             } else {
@@ -599,9 +600,9 @@ public:
                 wxVariant wv;
                 if (!MSWVariantToVariant(v, wv) || PyErr_Occurred()) {
                     wxString msg;
                 wxVariant wv;
                 if (!MSWVariantToVariant(v, wv) || PyErr_Occurred()) {
                     wxString msg;
-                    msg << "Unable to convert value to expected type: ("
-                        << _VARTYPEname(prop.arg.vt) << ") for property <"
-                        << name << ">";
+                    msg << _T("Unable to convert value to expected type: (")
+                        << _VARTYPEname(prop.arg.vt) << _T(") for property <")
+                        << name << _T(">");
                     PyErr_SetString(PyExc_TypeError, msg.mb_str());
                     goto done;
                 }
                     PyErr_SetString(PyExc_TypeError, msg.mb_str());
                     goto done;
                 }
@@ -610,7 +611,7 @@ public:
             }
         }
     done:
             }
         }
     done:
-        wxPyEndBlockThreads();
+        wxPyEndBlockThreads(blocked);
         return rval;
     }
 
         return rval;
     }
 
@@ -631,7 +632,7 @@ public:
         PyObject* rval = NULL;
         const wxFuncX& func = GetAXMethodDesc(name);
         
         PyObject* rval = NULL;
         const wxFuncX& func = GetAXMethodDesc(name);
         
-        wxPyBeginBlockThreads();
+        bool blocked = wxPyBeginBlockThreads();
         if (! PyErr_Occurred() ) {
             nargs = func.params.size();
             if (nargs > 0)
         if (! PyErr_Occurred() ) {
             nargs = func.params.size();
             if (nargs > 0)
@@ -662,9 +663,9 @@ public:
                             goto done;
                         if (!VariantToMSWVariant(wxV, vargs[nargs - i - 1]) || PyErr_Occurred()) {
                             wxString msg;
                             goto done;
                         if (!VariantToMSWVariant(wxV, vargs[nargs - i - 1]) || PyErr_Occurred()) {
                             wxString msg;
-                            msg << "Unable to convert value to expected type: ("
+                            msg << _T("Unable to convert value to expected type: (")
                                 << _VARTYPEname(vargs[nargs - i - 1].vt)
                                 << _VARTYPEname(vargs[nargs - i - 1].vt)
-                                << ") for parameter " << i;
+                                << _T(") for parameter ") << i;
                             PyErr_SetString(PyExc_TypeError, msg.mb_str());
                             goto done;
                         }
                             PyErr_SetString(PyExc_TypeError, msg.mb_str());
                             goto done;
                         }
@@ -711,7 +712,7 @@ public:
                 PyErr_Clear();
         }
     done:
                 PyErr_Clear();
         }
     done:
-        wxPyEndBlockThreads();
+        wxPyEndBlockThreads(blocked);
         if (vargs) {
             for (int i = 0; i < nargs; i++)
                 VariantClear(&vargs[i]);
         if (vargs) {
             for (int i = 0; i < nargs; i++)
                 VariantClear(&vargs[i]);
@@ -734,20 +735,30 @@ SWIG_CheckLong(PyObject* obj)
   }
 }
 
   }
 }
 
-void wxActiveXEvent__preInit(wxActiveXEvent *self,PyObject *pyself){
-            wxPyBeginBlockThreads();
+void wxActiveXEvent__preCallInit(wxActiveXEvent *self,PyObject *pyself){
+            bool blocked = wxPyBeginBlockThreads();
             PyObject* pList = PyList_New(0);
             PyObject_SetAttrString(pyself, "paramList", pList);
             Py_DECREF(pList);
             for (int i=0; i<self->ParamCount(); i+=1) {
             PyObject* pList = PyList_New(0);
             PyObject_SetAttrString(pyself, "paramList", pList);
             Py_DECREF(pList);
             for (int i=0; i<self->ParamCount(); i+=1) {
-                PyObject* name = PyString_FromString((char*)self->ParamName(i).mb_str());
+                PyObject* name = PyString_FromString((char*)(const char*)self->ParamName(i).mb_str());
                 PyObject* val = _Variant2PyObj((*self)[i], True);
                 PyObject_SetAttr(pyself, name, val);
                 PyList_Append(pList, name);
                 Py_DECREF(val);
                 Py_DECREF(name);
             }
                 PyObject* val = _Variant2PyObj((*self)[i], True);
                 PyObject_SetAttr(pyself, name, val);
                 PyList_Append(pList, name);
                 Py_DECREF(val);
                 Py_DECREF(name);
             }
-            wxPyEndBlockThreads();
+            wxPyEndBlockThreads(blocked);
+        }
+void wxActiveXEvent__postCallCleanup(wxActiveXEvent *self,PyObject *pyself){
+            bool blocked = wxPyBeginBlockThreads();
+            for (int i=0; i<self->ParamCount(); i+=1) {
+                PyObject* val = PyObject_GetAttrString(
+                    pyself, (char*)(const char*)self->ParamName(i).mb_str());
+                _PyObj2Variant(val, (*self)[i]);
+                Py_DECREF(val);
+            }
+            wxPyEndBlockThreads(blocked);
         }
 
 
         }
 
 
@@ -759,9 +770,11 @@ wxVariant _PyObj2Variant(PyObject* value)
     if (value == Py_None)
         return rval;
     
     if (value == Py_None)
         return rval;
     
+#if PYTHON_API_VERSION >= 1012  // Python 2.3+
     else if (PyBool_Check(value))
         rval = (value == Py_True) ? true : false;
     else if (PyBool_Check(value))
         rval = (value == Py_True) ? true : false;
-
+#endif
+    
     else if (PyInt_Check(value))
         rval = PyInt_AS_LONG(value);
 
     else if (PyInt_Check(value))
         rval = PyInt_AS_LONG(value);
 
@@ -774,6 +787,7 @@ wxVariant _PyObj2Variant(PyObject* value)
     // TODO:    PyList of strings --> wxArrayString
     //          wxDateTime
     //          list of objects
     // TODO:    PyList of strings --> wxArrayString
     //          wxDateTime
     //          list of objects
+    //          etc.
 
     else {
         PyErr_SetString(PyExc_TypeError, "Unsupported object type in _PyObj2Variant");
 
     else {
         PyErr_SetString(PyExc_TypeError, "Unsupported object type in _PyObj2Variant");
@@ -783,6 +797,26 @@ wxVariant _PyObj2Variant(PyObject* value)
     return rval;
 }
 
     return rval;
 }
 
+// This one uses the type of the variant to try and force the conversion
+bool  _PyObj2Variant(PyObject* value, wxVariant& wv)
+{
+    wxString type = wv.GetType();
+
+    if ( type == _T("long") || type == _T("bool") || type == _T("char") )
+        wv = PyInt_AsLong(value);
+
+    else if ( type == _T("string") )
+        wv = Py2wxString(value);
+
+    else if ( type == _T("double") )
+        wv  = PyFloat_AsDouble(value);
+
+    else {
+        // it's some other type that we dont' handle yet.  Log it?
+        return false;
+    }
+    return true;
+}
  
 // Caller should already have the GIL!
 PyObject* _Variant2PyObj(wxVariant& value, bool useNone)
  
 // Caller should already have the GIL!
 PyObject* _Variant2PyObj(wxVariant& value, bool useNone)
@@ -801,8 +835,10 @@ PyObject* _Variant2PyObj(wxVariant& value, bool useNone)
     else if (value.IsType(_T("double")))
         rval = PyFloat_FromDouble(value);
 
     else if (value.IsType(_T("double")))
         rval = PyFloat_FromDouble(value);
 
-    else if (value.IsType(_T("bool"))) 
-        rval = PyBool_FromLong((bool)value);
+    else if (value.IsType(_T("bool"))) {
+        rval = (bool)value ? Py_True : Py_False;
+        Py_INCREF(rval);
+    }
     
     else if (value.IsType(_T("string")))
         rval = wx2PyString(value);
     
     else if (value.IsType(_T("string")))
         rval = wx2PyString(value);
@@ -971,7 +1007,11 @@ public:
         // need to prepend this as poxy MSHTML will not recognise a HTML comment
         // as starting a html document and treats it as plain text
         // Does nayone know how to force it to html mode ?
         // need to prepend this as poxy MSHTML will not recognise a HTML comment
         // as starting a html document and treats it as plain text
         // Does nayone know how to force it to html mode ?
-        pstrm->prepend = "<html>";
+#if wxUSE_UNICODE
+        // TODO: What to do in this case???
+#else
+        pstrm->prepend = _T("<html>");
+#endif
 
         // strip leading whitespace as it can confuse MSHTML
         wxAutoOleInterface<IStream> strm(pstrm);
 
         // strip leading whitespace as it can confuse MSHTML
         wxAutoOleInterface<IStream> strm(pstrm);
@@ -1279,7 +1319,9 @@ static PyObject *_wrap_ParamX_isPtr_get(PyObject *self, PyObject *args, PyObject
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->isPtr);
     
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->isPtr);
     
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1300,7 +1342,9 @@ static PyObject *_wrap_ParamX_isSafeArray_get(PyObject *self, PyObject *args, Py
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->isSafeArray);
     
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->isSafeArray);
     
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1321,7 +1365,9 @@ static PyObject *_wrap_ParamX_isOptional_get(PyObject *self, PyObject *args, PyO
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->isOptional);
     
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->isOptional);
     
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1427,7 +1473,9 @@ static PyObject *_wrap_ParamX_IsIn(PyObject *self, PyObject *args, PyObject *kwa
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1453,7 +1501,9 @@ static PyObject *_wrap_ParamX_IsOut(PyObject *self, PyObject *args, PyObject *kw
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1479,7 +1529,9 @@ static PyObject *_wrap_ParamX_IsRetVal(PyObject *self, PyObject *args, PyObject
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1555,7 +1607,9 @@ static PyObject *_wrap_FuncX_hasOut_get(PyObject *self, PyObject *args, PyObject
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->hasOut);
     
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->hasOut);
     
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1715,7 +1769,9 @@ static PyObject *_wrap_PropX_putByRef_get(PyObject *self, PyObject *args, PyObje
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->putByRef);
     
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     result = (bool) ((arg1)->putByRef);
     
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1741,7 +1797,9 @@ static PyObject *_wrap_PropX_CanGet(PyObject *self, PyObject *args, PyObject *kw
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1767,7 +1825,9 @@ static PyObject *_wrap_PropX_CanSet(PyObject *self, PyObject *args, PyObject *kw
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1800,7 +1860,9 @@ static PyObject *_wrap_ParamXArray___nonzero__(PyObject *self, PyObject *args, P
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1892,7 +1954,9 @@ static PyObject *_wrap_FuncXArray___nonzero__(PyObject *self, PyObject *args, Py
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -1984,7 +2048,9 @@ static PyObject *_wrap_PropXArray___nonzero__(PyObject *self, PyObject *args, Py
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     return resultobj;
     fail:
     return NULL;
     return resultobj;
     fail:
     return NULL;
@@ -2825,7 +2891,7 @@ static PyObject *_wrap_ActiveXEvent_EventName(PyObject *self, PyObject *args, Py
 }
 
 
 }
 
 
-static PyObject *_wrap_ActiveXEvent__preInit(PyObject *self, PyObject *args, PyObject *kwargs) {
+static PyObject *_wrap_ActiveXEvent__preCallInit(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject *resultobj;
     wxActiveXEvent *arg1 = (wxActiveXEvent *) 0 ;
     PyObject *arg2 = (PyObject *) 0 ;
     PyObject *resultobj;
     wxActiveXEvent *arg1 = (wxActiveXEvent *) 0 ;
     PyObject *arg2 = (PyObject *) 0 ;
@@ -2835,13 +2901,41 @@ static PyObject *_wrap_ActiveXEvent__preInit(PyObject *self, PyObject *args, PyO
         (char *) "self",(char *) "pyself", NULL 
     };
     
         (char *) "self",(char *) "pyself", NULL 
     };
     
-    if(!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ActiveXEvent__preInit",kwnames,&obj0,&obj1)) goto fail;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ActiveXEvent__preCallInit",kwnames,&obj0,&obj1)) goto fail;
     if ((SWIG_ConvertPtr(obj0,(void **)(&arg1),SWIGTYPE_p_wxActiveXEvent,
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     arg2 = obj1;
     {
         PyThreadState* __tstate = wxPyBeginAllowThreads();
     if ((SWIG_ConvertPtr(obj0,(void **)(&arg1),SWIGTYPE_p_wxActiveXEvent,
     SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
     arg2 = obj1;
     {
         PyThreadState* __tstate = wxPyBeginAllowThreads();
-        wxActiveXEvent__preInit(arg1,arg2);
+        wxActiveXEvent__preCallInit(arg1,arg2);
+        
+        wxPyEndAllowThreads(__tstate);
+        if (PyErr_Occurred()) SWIG_fail;
+    }
+    Py_INCREF(Py_None); resultobj = Py_None;
+    return resultobj;
+    fail:
+    return NULL;
+}
+
+
+static PyObject *_wrap_ActiveXEvent__postCallCleanup(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject *resultobj;
+    wxActiveXEvent *arg1 = (wxActiveXEvent *) 0 ;
+    PyObject *arg2 = (PyObject *) 0 ;
+    PyObject * obj0 = 0 ;
+    PyObject * obj1 = 0 ;
+    char *kwnames[] = {
+        (char *) "self",(char *) "pyself", NULL 
+    };
+    
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,(char *)"OO:ActiveXEvent__postCallCleanup",kwnames,&obj0,&obj1)) goto fail;
+    if ((SWIG_ConvertPtr(obj0,(void **)(&arg1),SWIGTYPE_p_wxActiveXEvent,
+    SWIG_POINTER_EXCEPTION | 0)) == -1) SWIG_fail;
+    arg2 = obj1;
+    {
+        PyThreadState* __tstate = wxPyBeginAllowThreads();
+        wxActiveXEvent__postCallCleanup(arg1,arg2);
         
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
         
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
@@ -3014,7 +3108,9 @@ static PyObject *_wrap_IEHtmlWindowBase_LoadString(PyObject *self, PyObject *arg
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     {
         if (temp2)
         delete arg2;
     {
         if (temp2)
         delete arg2;
@@ -3066,7 +3162,9 @@ static PyObject *_wrap_IEHtmlWindowBase_LoadStream(PyObject *self, PyObject *arg
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
         wxPyEndAllowThreads(__tstate);
         if (PyErr_Occurred()) SWIG_fail;
     }
-    resultobj = PyBool_FromLong((bool)result);
+    {
+        resultobj = result ? Py_True : Py_False; Py_INCREF(resultobj);
+    }
     {
         if (created2)
         delete arg2;
     {
         if (created2)
         delete arg2;
@@ -3220,7 +3318,8 @@ static PyMethodDef SwigMethods[] = {
         { (char *)"ActiveXWindow_swigregister", ActiveXWindow_swigregister, METH_VARARGS },
         { (char *)"RegisterActiveXEvent", (PyCFunction) _wrap_RegisterActiveXEvent, METH_VARARGS | METH_KEYWORDS },
         { (char *)"ActiveXEvent_EventName", (PyCFunction) _wrap_ActiveXEvent_EventName, METH_VARARGS | METH_KEYWORDS },
         { (char *)"ActiveXWindow_swigregister", ActiveXWindow_swigregister, METH_VARARGS },
         { (char *)"RegisterActiveXEvent", (PyCFunction) _wrap_RegisterActiveXEvent, METH_VARARGS | METH_KEYWORDS },
         { (char *)"ActiveXEvent_EventName", (PyCFunction) _wrap_ActiveXEvent_EventName, METH_VARARGS | METH_KEYWORDS },
-        { (char *)"ActiveXEvent__preInit", (PyCFunction) _wrap_ActiveXEvent__preInit, METH_VARARGS | METH_KEYWORDS },
+        { (char *)"ActiveXEvent__preCallInit", (PyCFunction) _wrap_ActiveXEvent__preCallInit, METH_VARARGS | METH_KEYWORDS },
+        { (char *)"ActiveXEvent__postCallCleanup", (PyCFunction) _wrap_ActiveXEvent__postCallCleanup, METH_VARARGS | METH_KEYWORDS },
         { (char *)"ActiveXEvent_swigregister", ActiveXEvent_swigregister, METH_VARARGS },
         { (char *)"new_IEHtmlWindowBase", (PyCFunction) _wrap_new_IEHtmlWindowBase, METH_VARARGS | METH_KEYWORDS },
         { (char *)"IEHtmlWindowBase_SetCharset", (PyCFunction) _wrap_IEHtmlWindowBase_SetCharset, METH_VARARGS | METH_KEYWORDS },
         { (char *)"ActiveXEvent_swigregister", ActiveXEvent_swigregister, METH_VARARGS },
         { (char *)"new_IEHtmlWindowBase", (PyCFunction) _wrap_new_IEHtmlWindowBase, METH_VARARGS | METH_KEYWORDS },
         { (char *)"IEHtmlWindowBase_SetCharset", (PyCFunction) _wrap_IEHtmlWindowBase_SetCharset, METH_VARARGS | METH_KEYWORDS },
index cab5efcdd7c0371fd7a07a226360137b1060e8ab..b157fb99286730d4422a78d81da4a1fbfa8c350e 100644 (file)
@@ -328,7 +328,7 @@ bool wxIEHtmlWin::GoHome()
 {
     try
     {
 {
     try
     {
-        CallMethod("GoHome");
+        CallMethod(_T("GoHome"));
         return true;
     }
     catch(exception&)
         return true;
     }
     catch(exception&)
index 4cdb00010f5f0f784fda26db5eea5d9e32763f14..7738d6ff57e29107e3b05add67266e39baddb9ae 100644 (file)
@@ -1029,12 +1029,12 @@ wxVariant& wxActiveXEvent::operator[] (wxString name)
             return m_params[i];
     };
 
             return m_params[i];
     };
 
-    wxString err = "wxActiveXEvent::operator[] invalid name <" + name + ">";
-    err += "\r\nValid Names = :\r\n";
+    wxString err = _T("wxActiveXEvent::operator[] invalid name <") + name + _T(">");
+    err += _T("\r\nValid Names = :\r\n");
     for (i = 0; i < m_params.GetCount(); i++)
     {
         err += m_params[i].GetName();
     for (i = 0; i < m_params.GetCount(); i++)
     {
         err += m_params[i].GetName();
-        err += "\r\n";
+        err += _T("\r\n");
     };
 
     wxASSERT_MSG(false, err);
     };
 
     wxASSERT_MSG(false, err);
@@ -1293,7 +1293,7 @@ const wxActiveX::PropX& wxActiveX::GetPropDesc(const wxString& name) const
     if (it == m_propNames.end())
     {
         wxString s;
     if (it == m_propNames.end())
     {
         wxString s;
-        s << "property <" << name << "> not found";
+        s << _T("property <") << name << _T("> not found");
         throw exception(s.mb_str());
     };
 
         throw exception(s.mb_str());
     };
 
@@ -1316,7 +1316,7 @@ const wxActiveX::FuncX& wxActiveX::GetMethodDesc(const wxString& name) const
     if (it == m_methodNames.end())
     {
         wxString s;
     if (it == m_methodNames.end())
     {
         wxString s;
-        s << "method <" << name << "> not found";
+        s << _T("method <") << name << _T("> not found");
         throw exception(s.mb_str());
     };
 
         throw exception(s.mb_str());
     };
 
@@ -1347,7 +1347,7 @@ void wxActiveX::SetProp(const wxString &name, const wxVariant &value)
     if (! prop.CanSet())
     {
         wxString s;
     if (! prop.CanSet())
     {
         wxString s;
-        s << "property <" << name << "> is readonly";
+        s << _T("property <") << name << _T("> is readonly");
         throw exception(s.mb_str());
     };
 
         throw exception(s.mb_str());
     };
 
@@ -1384,7 +1384,7 @@ VARIANT wxActiveX::GetPropAsVariant(const wxString& name)
     if (! prop.CanGet())
     {
         wxString s;
     if (! prop.CanGet())
     {
         wxString s;
-        s << "property <" << name << "> is writeonly";
+        s << _T("property <") << name << _T("> is writeonly");
         throw exception(s.mb_str());
     };
 
         throw exception(s.mb_str());
     };
 
@@ -2491,7 +2491,7 @@ wxOleInit::~wxOleInit()
 
 bool GetSysErrMessage(int err, wxString& s)
 {
 
 bool GetSysErrMessage(int err, wxString& s)
 {
-    char buf[256];
+    wxChar buf[256];
     if (FormatMessage(
         FORMAT_MESSAGE_FROM_SYSTEM, NULL,
         err,0, buf, sizeof(buf), NULL) == 0)
     if (FormatMessage(
         FORMAT_MESSAGE_FROM_SYSTEM, NULL,
         err,0, buf, sizeof(buf), NULL) == 0)
@@ -2512,73 +2512,73 @@ wxString OLEHResultToString(HRESULT hr)
     switch (hr)
     {
     case S_OK:
     switch (hr)
     {
     case S_OK:
-        return "";
+        return wxEmptyString;
 
     case CONNECT_E_CANNOTCONNECT:
 
     case CONNECT_E_CANNOTCONNECT:
-        return "Cannot connect to event interface (maybe not there ?) - see MSDN";
+        return _T("Cannot connect to event interface (maybe not there ?) - see MSDN");
 
     case DISP_E_MEMBERNOTFOUND:
 
     case DISP_E_MEMBERNOTFOUND:
-        return "The requested member does not exist, or the call to Invoke tried to set the value of a read-only property.";
+        return _T("The requested member does not exist, or the call to Invoke tried to set the value of a read-only property.");
 
     case DISP_E_BADVARTYPE:
 
     case DISP_E_BADVARTYPE:
-        return "One of the parameters in rgvarg is not a valid variant type.";
+        return _T("One of the parameters in rgvarg is not a valid variant type.");
 
     case DISP_E_BADPARAMCOUNT:
 
     case DISP_E_BADPARAMCOUNT:
-        return "The number of elements provided to DISPPARAMS is different from the number of parameters accepted by the method or property";
+        return _T("The number of elements provided to DISPPARAMS is different from the number of parameters accepted by the method or property");
 
     case DISP_E_EXCEPTION:
 
     case DISP_E_EXCEPTION:
-        return "The application needs to raise an exception. In this case, the structure passed in pExcepInfo should be filled in.";
+        return _T("The application needs to raise an exception. In this case, the structure passed in pExcepInfo should be filled in.");
 
     case DISP_E_TYPEMISMATCH:
 
     case DISP_E_TYPEMISMATCH:
-        return "One or more of the parameters could not be coerced. The index within rgvarg of the first parameter with the incorrect type is returned in the puArgErr parameter.";
+        return _T("One or more of the parameters could not be coerced. The index within rgvarg of the first parameter with the incorrect type is returned in the puArgErr parameter.");
 
     case DISP_E_PARAMNOTOPTIONAL:
 
     case DISP_E_PARAMNOTOPTIONAL:
-        return "A required parameter was omitted.";
+        return _T("A required parameter was omitted.");
 
     case DISP_E_PARAMNOTFOUND:
 
     case DISP_E_PARAMNOTFOUND:
-        return "One of the parameter DISPIDs does not correspond to a parameter on the method. In this case, puArgErr should be set to the first parameter that contains the error.";
+        return _T("One of the parameter DISPIDs does not correspond to a parameter on the method. In this case, puArgErr should be set to the first parameter that contains the error.");
 
     case OLECMDERR_E_UNKNOWNGROUP:
 
     case OLECMDERR_E_UNKNOWNGROUP:
-        return "The pguidCmdGroup parameter is not NULL but does not specify a recognized command group.";
+        return _T("The pguidCmdGroup parameter is not NULL but does not specify a recognized command group.");
 
     case OLECMDERR_E_NOTSUPPORTED:
 
     case OLECMDERR_E_NOTSUPPORTED:
-        return "The nCmdID parameter is not a valid command in the group identified by pguidCmdGroup.";
+        return _T("The nCmdID parameter is not a valid command in the group identified by pguidCmdGroup.");
 
     case OLECMDERR_E_DISABLED:
 
     case OLECMDERR_E_DISABLED:
-        return "The command identified by nCmdID is currently disabled and cannot be executed.";
+        return _T("The command identified by nCmdID is currently disabled and cannot be executed.");
 
     case OLECMDERR_E_NOHELP:
 
     case OLECMDERR_E_NOHELP:
-        return "The caller has asked for help on the command identified by nCmdID, but no help is available.";
+        return _T("The caller has asked for help on the command identified by nCmdID, but no help is available.");
 
     case OLECMDERR_E_CANCELED:
 
     case OLECMDERR_E_CANCELED:
-        return "The user canceled the execution of the command.";
+        return _T("The user canceled the execution of the command.");
 
     case E_INVALIDARG:
 
     case E_INVALIDARG:
-        return "E_INVALIDARG";
+        return _T("E_INVALIDARG");
 
     case E_OUTOFMEMORY:
 
     case E_OUTOFMEMORY:
-        return "E_OUTOFMEMORY";
+        return _T("E_OUTOFMEMORY");
 
     case E_NOINTERFACE:
 
     case E_NOINTERFACE:
-        return "E_NOINTERFACE";
+        return _T("E_NOINTERFACE");
 
     case E_UNEXPECTED:
 
     case E_UNEXPECTED:
-        return "E_UNEXPECTED";
+        return _T("E_UNEXPECTED");
 
     case STG_E_INVALIDFLAG:
 
     case STG_E_INVALIDFLAG:
-        return "STG_E_INVALIDFLAG";
+        return _T("STG_E_INVALIDFLAG");
 
     case E_FAIL:
 
     case E_FAIL:
-        return "E_FAIL";
+        return _T("E_FAIL");
 
     case E_NOTIMPL:
 
     case E_NOTIMPL:
-        return "E_NOTIMPL";
+        return _T("E_NOTIMPL");
 
     default:
         {
 
     default:
         {
-            char buf[64];
-            sprintf(buf, "Unknown - 0x%X", hr);
-            return wxString(buf);
+            wxString buf;
+            buf.Printf(_T("Unknown - 0x%X"), hr);
+            return buf;
         }
     };
 };
         }
     };
 };
@@ -2710,5 +2710,5 @@ wxString GetIIDName(REFIID riid)
       return s;
   }
   else
       return s;
   }
   else
-      return "StringFromIID() error";
+      return _T("StringFromIID() error");
 }
 }
index b3bc40fbf767f34162b7a96b6e03b69ef582c323..c55e5f8ff629e68b8ed96434c7b37f64101e6497 100644 (file)
@@ -160,7 +160,9 @@ class TestPanel(wx.Window):
 
     def OnNewWindow2(self, evt):
         self.logEvt(evt)
 
     def OnNewWindow2(self, evt):
         self.logEvt(evt)
-##        evt.Veto()   # TODO
+        # Veto the new window.  Cancel is defined as an "out" param
+        # for this event.  See iewin.py
+        evt.Cancel = True   
 
     def OnProgressChange(self, evt):
         self.logEvt(evt)
 
     def OnProgressChange(self, evt):
         self.logEvt(evt)