]> git.saurik.com Git - wxWidgets.git/commitdiff
New wxActiveX code from Lindsay and added ability to load page from stream
authorRobin Dunn <robin@alldunn.com>
Sat, 20 Jul 2002 00:06:59 +0000 (00:06 +0000)
committerRobin Dunn <robin@alldunn.com>
Sat, 20 Jul 2002 00:06:59 +0000 (00:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16220 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/contrib/iewin/IEHtmlWin.cpp
wxPython/contrib/iewin/IEHtmlWin.h
wxPython/contrib/iewin/iewin.cpp
wxPython/contrib/iewin/iewin.i
wxPython/contrib/iewin/iewin.py
wxPython/contrib/iewin/wxactivex.cpp
wxPython/contrib/iewin/wxactivex.h

index 60640ab2cd5258a5278db5a282d21c7d98eeffff..5aa4a8f87f8e115e9cc40df41ad8c6896d5594b4 100644 (file)
@@ -1,7 +1,9 @@
 #include "IEHtmlWin.h"
 #include <wx/strconv.h>
+#include <wx/string.h>
 #include <wx/event.h>
 #include <wx/listctrl.h>
+#include <wx/mstream.h>
 #include <oleidl.h>
 #include <winerror.h>
 #include <exdispid.h>
@@ -35,23 +37,23 @@ private:
 
 public:
     FS_DWebBrowserEvents2(wxIEHtmlWin *iewin) : m_iewin(iewin) {}
-       ~FS_DWebBrowserEvents2()
+       ~FS_DWebBrowserEvents2() 
     {
     }
 
        //IDispatch
        STDMETHODIMP GetIDsOfNames(REFIID r, OLECHAR** o, unsigned int i, LCID l, DISPID* d)
-       {
+       { 
         return E_NOTIMPL;
     };
 
        STDMETHODIMP GetTypeInfo(unsigned int i, LCID l, ITypeInfo** t)
-       {
+       { 
         return E_NOTIMPL;
     };
 
        STDMETHODIMP GetTypeInfoCount(unsigned int* i)
-       {
+       { 
         return E_NOTIMPL;
     };
 
@@ -114,7 +116,7 @@ public:
                                                  WORD wFlags, DISPPARAMS * pDispParams,
                                                  VARIANT * pVarResult, EXCEPINFO * pExcepInfo,
                                                  unsigned int * puArgErr)
-       {
+       { 
            if (wFlags & DISPATCH_PROPERTYGET)
             return E_NOTIMPL;
 
@@ -123,21 +125,21 @@ public:
                    case DISPID_BEFORENAVIGATE2:
                                if (Process(wxEVT_COMMAND_MSHTML_BEFORENAVIGATE2, STR_ARG(5)))
                                        *pDispParams->rgvarg->pboolVal = VARIANT_FALSE;
-                               else
+                               else 
                                        *pDispParams->rgvarg->pboolVal = VARIANT_TRUE;
                                break;
 
                    case DISPID_NEWWINDOW2:
                                if (Process(wxEVT_COMMAND_MSHTML_NEWWINDOW2))
                                        *pDispParams->rgvarg->pboolVal = VARIANT_FALSE;
-                               else
+                               else 
                                        *pDispParams->rgvarg->pboolVal = VARIANT_TRUE;
                                break;
 
             case DISPID_PROGRESSCHANGE:
                                Post(wxEVT_COMMAND_MSHTML_PROGRESSCHANGE, "", LONG_ARG(1), LONG_ARG(0));
                                break;
-
+                   
             case DISPID_DOCUMENTCOMPLETE:
                                Post(wxEVT_COMMAND_MSHTML_DOCUMENTCOMPLETE, STR_ARG(0));
                                break;
@@ -181,7 +183,7 @@ wxIEHtmlWin::wxIEHtmlWin(wxWindow * parent, wxWindowID id,
         const wxPoint& pos,
         const wxSize& size,
         long style,
-        const wxString& name) :
+        const wxString& name) : 
     wxActiveX(parent, PROGID, id, pos, size, style, name)
 {
     SetupBrowser();
@@ -242,7 +244,8 @@ void wxIEHtmlWin::SetCharset(wxString charset)
        {
                wxAutoOleInterface<IHTMLDocument2> doc(IID_IHTMLDocument2, disp);
                if (doc.Ok())
-            doc->put_charset((BSTR) (const wchar_t*)charset.wc_str(wxConvUTF8));
+            doc->put_charset((BSTR) (const wchar_t *) charset.wc_str(wxConvUTF8));
+                       //doc->put_charset((BSTR) wxConvUTF8.cMB2WC(charset).data());
        };
 };
 
@@ -284,12 +287,12 @@ private:
     istream *m_is;
 
 public:
-
-    IStreamAdaptor(istream *is)        : IStreamAdaptorBase(), m_is(is)
+    
+    IStreamAdaptor(istream *is)        : IStreamAdaptorBase(), m_is(is) 
     {
         wxASSERT(m_is != NULL);
     }
-    ~IStreamAdaptor()
+    ~IStreamAdaptor()  
     {
         delete m_is;
     }
@@ -305,11 +308,37 @@ public:
        };
 };
 
+class IwxStreamAdaptor : public IStreamAdaptorBase
+{
+private:
+    wxInputStream *m_is;
+
+public:
+    
+    IwxStreamAdaptor(wxInputStream *is)        : IStreamAdaptorBase(), m_is(is) 
+    {
+        wxASSERT(m_is != NULL);
+    }
+    ~IwxStreamAdaptor()        
+    {
+        delete m_is;
+    }
+
+    // ISequentialStream
+    HRESULT STDMETHODCALLTYPE Read(void __RPC_FAR *pv, ULONG cb, ULONG __RPC_FAR *pcbRead)
+       {
+               m_is->Read((char *) pv, cb);
+               if (pcbRead)
+                       *pcbRead = m_is->LastRead();
+
+               return S_OK;
+       };
+};
 
 void wxIEHtmlWin::LoadUrl(const wxString& url)
 {
        VARIANTARG navFlag, targetFrame, postData, headers;
-       navFlag.vt = VT_EMPTY;
+       navFlag.vt = VT_EMPTY; 
        navFlag.vt = VT_I2;
        navFlag.iVal = navNoReadFromCache;
        targetFrame.vt = VT_EMPTY;
@@ -317,24 +346,38 @@ void wxIEHtmlWin::LoadUrl(const wxString& url)
        headers.vt = VT_EMPTY;
 
        HRESULT hret = 0;
-       hret = m_webBrowser->Navigate((BSTR) (const wchar_t*)url.wc_str(wxConvUTF8),
-               &navFlag, &targetFrame, &postData, &headers);
+       hret = m_webBrowser->Navigate((BSTR) (const wchar_t *) url.wc_str(wxConvUTF8), 
+               &navFlag, &targetFrame, &postData, &headers);   
 };
 
+class wxOwnedMemInputStream : public wxMemoryInputStream
+{
+public:
+    char *m_data;
+
+    wxOwnedMemInputStream(char *data, size_t len) :
+        wxMemoryInputStream(data, len), m_data(data)
+    {}
+    ~wxOwnedMemInputStream() 
+    {
+        free(m_data);
+    }
+};
 
 bool  wxIEHtmlWin::LoadString(wxString html)
 {
-       string s = html.mb_str(wxConvUTF8);
-       istringstream *is = new istringstream(s);
-       return LoadStream(is);
+    char *data = NULL;
+    size_t len = html.length();
+#ifdef UNICODE
+    len *= 2;
+#endif
+    data = (char *) malloc(len);
+    memcpy(data, html.c_str(), len);
+       return LoadStream(new wxOwnedMemInputStream(data, len));
 };
 
-bool  wxIEHtmlWin::LoadStream(istream *is)
+bool wxIEHtmlWin::LoadStream(IStreamAdaptorBase *pstrm)
 {
-       // wrap reference around stream
-    IStreamAdaptor *pstrm = new IStreamAdaptor(is);
-       pstrm->AddRef();
-
        wxAutoOleInterface<IStream>     strm(pstrm);
 
     // Document Interface
@@ -361,6 +404,25 @@ bool  wxIEHtmlWin::LoadStream(istream *is)
            return false;
 };
 
+bool  wxIEHtmlWin::LoadStream(istream *is)
+{
+       // wrap reference around stream
+    IStreamAdaptor *pstrm = new IStreamAdaptor(is);
+       pstrm->AddRef();
+
+    return LoadStream(pstrm);
+};
+
+bool wxIEHtmlWin::LoadStream(wxInputStream *is)
+{
+       // wrap reference around stream
+    IwxStreamAdaptor *pstrm = new IwxStreamAdaptor(is);
+       pstrm->AddRef();
+
+    return LoadStream(pstrm);
+};
+
+
 bool wxIEHtmlWin::GoBack()
 {
     HRESULT hret = 0;
@@ -466,7 +528,7 @@ wxString wxIEHtmlWin::GetStringSelection(bool asHTML)
 
     BSTR text = NULL;
     HRESULT hr = E_FAIL;
-
+       
        if (asHTML)
                hr = tr->get_htmlText(&text);
        else
@@ -508,7 +570,7 @@ wxString wxIEHtmlWin::GetText(bool asHTML)
        // get inner text
     BSTR text = NULL;
     hr = E_FAIL;
-
+       
        if (asHTML)
                hr = body->get_innerHTML(&text);
        else
@@ -519,5 +581,5 @@ wxString wxIEHtmlWin::GetText(bool asHTML)
     wxString s = text;
     SysFreeString(text);
 
-    return s;
-};
+    return s;  
+};
\ No newline at end of file
index 7dcfdb685287583a58f439a6b13b4d1a4997940c..b4c7eea2a1d56ffb85408ed32f499d6e65a453b1 100644 (file)
@@ -61,8 +61,11 @@ enum wxIEHtmlRefreshLevel
        wxIEHTML_REFRESH_COMPLETELY = 3
 };
 
+class IStreamAdaptorBase;
+
 class wxIEHtmlWin : public wxActiveX
 {
+
 public:
     wxIEHtmlWin(wxWindow * parent, wxWindowID id = -1,
         const wxPoint& pos = wxDefaultPosition,
@@ -74,6 +77,7 @@ public:
        void LoadUrl(const wxString&);
     bool LoadString(wxString html);
     bool LoadStream(istream *strm);
+    bool LoadStream(wxInputStream *is);
 
        void SetCharset(wxString charset);
     void SetEditMode(bool seton);
@@ -92,6 +96,7 @@ public:
 
 protected:
     void SetupBrowser();
+    bool LoadStream(IStreamAdaptorBase *pstrm);
 
        wxAutoOleInterface<IWebBrowser2>                m_webBrowser;
 };
index c85c531688c8e76ccf5b8c3929183ec8275c9193..11fb5ef617497d6ec3095ee33b922b7fbd6b3404 100644 (file)
@@ -57,6 +57,7 @@ extern PyObject *SWIG_newvarlink(void);
 
 #include "wxPython.h"
 #include "IEHtmlWin.h"
+#include "pyistream.h"
 
 
 static PyObject* t_output_helper(PyObject* target, PyObject* o) {
@@ -412,6 +413,55 @@ static PyObject *_wrap_wxIEHtmlWin_LoadString(PyObject *self, PyObject *args, Py
     return _resultobj;
 }
 
+#define wxIEHtmlWin_LoadStream(_swigobj,_swigarg0)  (_swigobj->LoadStream(_swigarg0))
+static PyObject *_wrap_wxIEHtmlWin_LoadStream(PyObject *self, PyObject *args, PyObject *kwargs) {
+    PyObject * _resultobj;
+    bool  _result;
+    wxIEHtmlWin * _arg0;
+    wxInputStream * _arg1;
+    PyObject * _argo0 = 0;
+    wxPyInputStream * temp;
+    bool  created;
+    PyObject * _obj1 = 0;
+    char *_kwnames[] = { "self","is", NULL };
+
+    self = self;
+    if(!PyArg_ParseTupleAndKeywords(args,kwargs,"OO:wxIEHtmlWin_LoadStream",_kwnames,&_argo0,&_obj1)) 
+        return NULL;
+    if (_argo0) {
+        if (_argo0 == Py_None) { _arg0 = NULL; }
+        else if (SWIG_GetPtrObj(_argo0,(void **) &_arg0,"_wxIEHtmlWin_p")) {
+            PyErr_SetString(PyExc_TypeError,"Type error in argument 1 of wxIEHtmlWin_LoadStream. Expected _wxIEHtmlWin_p.");
+        return NULL;
+        }
+    }
+{
+    if (SWIG_GetPtrObj(_obj1, (void **) &temp, "_wxPyInputStream_p") == 0) {
+        _arg1 = temp->m_wxis;
+        created = FALSE;
+    } else {
+        _arg1 = wxPyCBInputStream_create(_obj1, FALSE);
+        if (_arg1 == NULL) {
+            PyErr_SetString(PyExc_TypeError,"Expected _wxInputStream_p or Python file-like object.");
+            return NULL;
+        }
+        created = TRUE;
+    }
+}
+{
+    PyThreadState* __tstate = wxPyBeginAllowThreads();
+    _result = (bool )wxIEHtmlWin_LoadStream(_arg0,_arg1);
+
+    wxPyEndAllowThreads(__tstate);
+    if (PyErr_Occurred()) return NULL;
+}    _resultobj = Py_BuildValue("i",_result);
+{
+    if (created)
+        delete _arg1;
+}
+    return _resultobj;
+}
+
 #define wxIEHtmlWin_SetCharset(_swigobj,_swigarg0)  (_swigobj->SetCharset(_swigarg0))
 static PyObject *_wrap_wxIEHtmlWin_SetCharset(PyObject *self, PyObject *args, PyObject *kwargs) {
     PyObject * _resultobj;
@@ -771,6 +821,7 @@ static PyMethodDef iewincMethods[] = {
         { "wxIEHtmlWin_GetEditMode", (PyCFunction) _wrap_wxIEHtmlWin_GetEditMode, METH_VARARGS | METH_KEYWORDS },
         { "wxIEHtmlWin_SetEditMode", (PyCFunction) _wrap_wxIEHtmlWin_SetEditMode, METH_VARARGS | METH_KEYWORDS },
         { "wxIEHtmlWin_SetCharset", (PyCFunction) _wrap_wxIEHtmlWin_SetCharset, METH_VARARGS | METH_KEYWORDS },
+        { "wxIEHtmlWin_LoadStream", (PyCFunction) _wrap_wxIEHtmlWin_LoadStream, METH_VARARGS | METH_KEYWORDS },
         { "wxIEHtmlWin_LoadString", (PyCFunction) _wrap_wxIEHtmlWin_LoadString, METH_VARARGS | METH_KEYWORDS },
         { "wxIEHtmlWin_LoadUrl", (PyCFunction) _wrap_wxIEHtmlWin_LoadUrl, METH_VARARGS | METH_KEYWORDS },
         { "new_wxIEHtmlWin", (PyCFunction) _wrap_new_wxIEHtmlWin, METH_VARARGS | METH_KEYWORDS },
index 00de90791dc063286eaee36fe1f83a84539cbb9f..8a90a95c0cee2ac5e3ba80dbb43239d6314b4d4c 100644 (file)
@@ -16,6 +16,7 @@
 %{
 #include "wxPython.h"
 #include "IEHtmlWin.h"
+#include "pyistream.h"
 %}
 
 //---------------------------------------------------------------------------
@@ -28,6 +29,7 @@
 %extern _defs.i
 %extern misc.i
 %extern events.i
+%extern streams.i
 
 %pragma(python) code = "import wx"
 
@@ -101,7 +103,7 @@ public:
 
     void LoadUrl(const wxString&);
     bool LoadString(wxString html);
-    /* bool LoadStream(istream *strm); */
+    bool LoadStream(wxInputStream *is);
 
     %pragma(python) addtoclass = "Navigate = LoadUrl"
 
index 363f76405cff41eb63bb9385d58ddfb9a6b4c96a..9c3f24f12221a73ba53f246f12c3b3bdf3165327 100644 (file)
@@ -95,6 +95,9 @@ class wxIEHtmlWinPtr(wxWindowPtr):
     def LoadString(self, *_args, **_kwargs):
         val = apply(iewinc.wxIEHtmlWin_LoadString,(self,) + _args, _kwargs)
         return val
+    def LoadStream(self, *_args, **_kwargs):
+        val = apply(iewinc.wxIEHtmlWin_LoadStream,(self,) + _args, _kwargs)
+        return val
     def SetCharset(self, *_args, **_kwargs):
         val = apply(iewinc.wxIEHtmlWin_SetCharset,(self,) + _args, _kwargs)
         return val
index 9d4a0f2b3b54c80f29ddf42aa59bce66fe30026c..ac6df87513b0063a5e6648e2e3705689871cc742 100644 (file)
@@ -31,7 +31,7 @@ END_EVENT_TABLE()
 
 class wxActiveX;
 
-class FrameSite :
+class FrameSite : 
     public IOleClientSite,
     public IOleInPlaceSiteEx,
     public IOleInPlaceFrame,
@@ -58,7 +58,7 @@ public:
        STDMETHODIMP RequestBorderSpace(LPCBORDERWIDTHS);
        STDMETHODIMP SetBorderSpace(LPCBORDERWIDTHS);
        STDMETHODIMP SetActiveObject(IOleInPlaceActiveObject*, LPCOLESTR);
-
+       
     //IOleInPlaceFrame
        STDMETHODIMP InsertMenus(HMENU, LPOLEMENUGROUPWIDTHS);
        STDMETHODIMP SetMenu(HMENU, HOLEMENU, HWND);
@@ -71,7 +71,7 @@ public:
        STDMETHODIMP CanInPlaceActivate();
        STDMETHODIMP OnInPlaceActivate();
        STDMETHODIMP OnUIActivate();
-       STDMETHODIMP GetWindowContext(IOleInPlaceFrame**, IOleInPlaceUIWindow**,
+       STDMETHODIMP GetWindowContext(IOleInPlaceFrame**, IOleInPlaceUIWindow**, 
                LPRECT, LPRECT, LPOLEINPLACEFRAMEINFO);
        STDMETHODIMP Scroll(SIZE);
        STDMETHODIMP OnUIDeactivate(BOOL);
@@ -117,7 +117,7 @@ public:
        STDMETHODIMP GetObject(LPOLESTR, DWORD, IBindCtx*, REFIID, void**);
        STDMETHODIMP GetObjectStorage(LPOLESTR, IBindCtx*, REFIID, void**);
        STDMETHODIMP IsRunning(LPOLESTR);
-
+    
        //IDispatch
        STDMETHODIMP GetIDsOfNames(REFIID, OLECHAR**, unsigned int, LCID, DISPID*);
        STDMETHODIMP GetTypeInfo(unsigned int, LCID, ITypeInfo**);
@@ -146,7 +146,7 @@ protected:
        bool m_bInPlaceActive;
        bool m_bUIActive;
        bool m_bWindowless;
-
+    
 
 
        LCID m_nAmbientLocale;
@@ -207,7 +207,7 @@ wxActiveX::wxActiveX(wxWindow * parent, wxString progId, wxWindowID id,
 {
     m_bAmbientUserMode = true;
     m_docAdviseCookie = 0;
-    CreateActiveX((LPOLESTR) (const wchar_t*)progId.wc_str(wxConvUTF8));
+    CreateActiveX((LPOLESTR) (const wchar_t *) progId.wc_str(wxConvUTF8));
 }
 
 wxActiveX::~wxActiveX()
@@ -223,14 +223,14 @@ wxActiveX::~wxActiveX()
        };
        m_connections.clear();
 
-    if (m_oleInPlaceObject.Ok())
+    if (m_oleInPlaceObject.Ok()) 
        {
                m_oleInPlaceObject->InPlaceDeactivate();
                m_oleInPlaceObject->UIDeactivate();
        }
 
 
-       if (m_oleObject.Ok())
+       if (m_oleObject.Ok()) 
        {
            if (m_docAdviseCookie != 0)
                m_oleObject->Unadvise(m_docAdviseCookie);
@@ -266,9 +266,19 @@ void wxActiveX::CreateActiveX(REFCLSID clsid)
        GetTypeInfo();
 
        // Get IOleObject interface
-       hret = m_oleObject.QueryInterface(IID_IOleObject, m_ActiveX);
+       hret = m_oleObject.QueryInterface(IID_IOleObject, m_ActiveX); 
        wxASSERT(SUCCEEDED(hret));
-       // Get IOleInPlaceObject interface
+
+    // document advise
+    m_docAdviseCookie = 0;
+    hret = m_oleObject->Advise(adviseSink, &m_docAdviseCookie);
+    WXOLE_WARN(hret, "m_oleObject->Advise(adviseSink, &m_docAdviseCookie),\"Advise\")");
+    m_oleObject->SetHostNames(L"wxActiveXContainer", NULL);
+       OleSetContainedObject(m_oleObject, TRUE);
+    OleRun(m_oleObject);
+
+
+    // Get IOleInPlaceObject interface
        hret = m_oleInPlaceObject.QueryInterface(IID_IOleInPlaceObject, m_ActiveX);
        wxASSERT(SUCCEEDED(hret));
 
@@ -292,13 +302,6 @@ void wxActiveX::CreateActiveX(REFCLSID clsid)
         WXOLE_WARN(hret, "CreateActiveX::pPersistStreamInit->InitNew()");
     };
 
-    // document advise
-    m_docAdviseCookie = 0;
-    hret = m_oleObject->Advise(adviseSink, &m_docAdviseCookie);
-    WXOLE_WARN(hret, "m_oleObject->Advise(adviseSink, &m_docAdviseCookie),\"Advise\")");
-    m_oleObject->SetHostNames(L"wxActiveXContainer", NULL);
-       OleSetContainedObject(m_oleObject, TRUE);
-
     if (! (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST))
                m_oleObject->SetClientSite(m_clientSite);
 
@@ -312,22 +315,26 @@ void wxActiveX::CreateActiveX(REFCLSID clsid)
        posRect.bottom = h;
 
     m_oleObjectHWND = 0;
-       hret = m_oleInPlaceObject->GetWindow(&m_oleObjectHWND);
-       WXOLE_WARN(hret, "m_oleInPlaceObject->GetWindow(&m_oleObjectHWND)");
-    if (SUCCEEDED(hret))
-           ::SetActiveWindow(m_oleObjectHWND);
+
+    if (m_oleInPlaceObject.Ok())
+    {
+       hret = m_oleInPlaceObject->GetWindow(&m_oleObjectHWND);
+           WXOLE_WARN(hret, "m_oleInPlaceObject->GetWindow(&m_oleObjectHWND)");
+        if (SUCCEEDED(hret))
+               ::SetActiveWindow(m_oleObjectHWND);
+    };
 
 
     if (! (dwMiscStatus & OLEMISC_INVISIBLEATRUNTIME))
     {
-               if (w > 0 && h > 0)
+               if (w > 0 && h > 0 && m_oleInPlaceObject.Ok())
                        m_oleInPlaceObject->SetObjectRects(&posRect, &posRect);
 
                hret = m_oleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, m_clientSite, 0, (HWND)GetHWND(), &posRect);
         hret = m_oleObject->DoVerb(OLEIVERB_SHOW, 0, m_clientSite, 0, (HWND)GetHWND(), &posRect);
     };
 
-       if (! m_oleObjectHWND)
+       if (! m_oleObjectHWND && m_oleInPlaceObject.Ok())
        {
                hret = m_oleInPlaceObject->GetWindow(&m_oleObjectHWND);
                WXOLE_WARN(hret, "m_oleInPlaceObject->GetWindow(&m_oleObjectHWND)");
@@ -385,13 +392,14 @@ public:
 
 static ActiveXEventMapFlusher s_dummyActiveXEventMapFlusher;
 
-const wxEventType& RegisterActiveXEvent(wxString eventName)
+const wxEventType& RegisterActiveXEvent(wxChar *eventName)
 {
-    ActiveXEventMap::iterator it = sg_eventMap.find(eventName);
+    wxString ev = eventName;
+    ActiveXEventMap::iterator it = sg_eventMap.find(ev);
     if (it == sg_eventMap.end())
     {
         wxEventType  *et = new wxEventType(wxNewEventType());
-        sg_eventMap[eventName] = et;
+        sg_eventMap[ev] = et;
 
         return *et;
     };
@@ -479,23 +487,23 @@ private:
 
 public:
     wxActiveXEvents(wxActiveX *ax) : m_activeX(ax) {}
-       ~wxActiveXEvents()
+       ~wxActiveXEvents() 
     {
     }
 
        //IDispatch
        STDMETHODIMP GetIDsOfNames(REFIID r, OLECHAR** o, unsigned int i, LCID l, DISPID* d)
-       {
+       { 
         return E_NOTIMPL;
     };
 
        STDMETHODIMP GetTypeInfo(unsigned int i, LCID l, ITypeInfo** t)
-       {
+       { 
         return E_NOTIMPL;
     };
 
        STDMETHODIMP GetTypeInfoCount(unsigned int* i)
-       {
+       { 
         return E_NOTIMPL;
     };
 
@@ -505,7 +513,7 @@ public:
                                                  WORD wFlags, DISPPARAMS * pDispParams,
                                                  VARIANT * pVarResult, EXCEPINFO * pExcepInfo,
                                                  unsigned int * puArgErr)
-       {
+       { 
            if (wFlags & (DISPATCH_PROPERTYGET | DISPATCH_PROPERTYPUT | DISPATCH_PROPERTYPUTREF))
             return E_NOTIMPL;
 
@@ -516,7 +524,7 @@ public:
 
         int idx = mid->second;
 
-
+        
         wxActiveX::FuncX &func = m_activeX->m_events[idx];
 
         ActiveXEventMap::iterator it = sg_eventMap.find(func.name);
@@ -555,7 +563,7 @@ public:
                                if (px.IsOut())
                                {
                                        wxVariant& vx = event.m_params[pDispParams->cArgs - i - 1];
-
+                                       
                                        VariantToMSWVariant(vx, va);
                                };
                        };
@@ -622,15 +630,15 @@ wxVariant& wxActiveXEvent::operator[] (wxString name)
 void wxActiveX::GetTypeInfo()
 {
        /*
-       We are currently only interested in the IDispatch interface
+       We are currently only interested in the IDispatch interface 
        to the control. For dual interfaces (TypeKind = TKIND_INTERFACE)
-       we should drill down through the inheritance
+       we should drill down through the inheritance 
        (using TYPEATTR->cImplTypes) and GetRefTypeOfImplType(n)
-       and retrieve all the func names etc that way, then generate a C++
+       and retrieve all the func names etc that way, then generate a C++ 
        header  file for it.
 
-       But we don't do this and probably never will, so if we have a DUAL
-       interface then we query for the IDispatch
+       But we don't do this and probably never will, so if we have a DUAL 
+       interface then we query for the IDispatch 
        via GetRefTypeOfImplType(-1).
        */
 
@@ -792,11 +800,11 @@ HRESULT wxActiveX::ConnectAdvise(REFIID riid, IUnknown *events)
        wxAutoOleInterface<IConnectionPointContainer> cpContainer(IID_IConnectionPointContainer, m_ActiveX);
        if (! cpContainer.Ok())
                return E_FAIL;
-
+       
        HRESULT hret = cpContainer->FindConnectionPoint(riid, cp.GetRef());
        if (! SUCCEEDED(hret))
                return hret;
-
+       
        hret = cp->Advise(events, &adviseCookie);
 
        if (SUCCEEDED(hret))
@@ -857,28 +865,32 @@ void wxActiveX::OnSize(wxSizeEvent& event)
        if (w <= 0 && h <= 0)
                return;
 
-       if (m_oleInPlaceObject)
+       if (m_oleInPlaceObject.Ok()) 
                m_oleInPlaceObject->SetObjectRects(&posRect, &posRect);
 
        // extents are in HIMETRIC units
-    SIZEL sz = {w, h};
-       PixelsToHimetric(sz);
+    if (m_oleObject.Ok())
+    {
+        SIZEL sz = {w, h};
+           PixelsToHimetric(sz);
 
-    SIZEL sz2;
-    m_oleObject->GetExtent(DVASPECT_CONTENT, &sz2);
-    if (sz2.cx !=  sz.cx || sz.cy != sz2.cy)
-        m_oleObject->SetExtent(DVASPECT_CONTENT, &sz);
+        SIZEL sz2;
+
+        m_oleObject->GetExtent(DVASPECT_CONTENT, &sz2);
+        if (sz2.cx !=  sz.cx || sz.cy != sz2.cy)
+            m_oleObject->SetExtent(DVASPECT_CONTENT, &sz);
+    };
 }
 
 void wxActiveX::OnSetFocus(wxFocusEvent& event)
 {
-       if (m_oleInPlaceActiveObject.Ok())
+       if (m_oleInPlaceActiveObject.Ok()) 
         m_oleInPlaceActiveObject->OnFrameWindowActivate(TRUE);
 }
 
 void wxActiveX::OnKillFocus(wxFocusEvent& event)
 {
-       if (m_oleInPlaceActiveObject.Ok())
+       if (m_oleInPlaceActiveObject.Ok()) 
         m_oleInPlaceActiveObject->OnFrameWindowActivate(FALSE);
 }
 
@@ -898,7 +910,7 @@ FrameSite::FrameSite(wxActiveX * win)
        m_bAmbientShowHatching = true;
        m_bAmbientShowGrabHandles = true;
        m_bAmbientAppearance = true;
-
        m_hDCBuffer = NULL;
        m_hWndParent = (HWND)m_window->GetHWND();
 }
@@ -941,7 +953,7 @@ HRESULT FrameSite::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid,
 
     HRESULT hr;
 
-       if (pVarResult == NULL)
+       if (pVarResult == NULL) 
                return E_INVALIDARG;
 
     //The most common case is boolean, use as an initial type
@@ -1017,7 +1029,7 @@ HRESULT FrameSite::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid,
 HRESULT FrameSite::GetWindow(HWND * phwnd)
 {
        WXOLE_TRACE("IOleWindow::GetWindow");
-       if (phwnd == NULL)
+       if (phwnd == NULL) 
         return E_INVALIDARG;
        (*phwnd) = m_hWndParent;
        return S_OK;
@@ -1034,7 +1046,7 @@ HRESULT FrameSite::ContextSensitiveHelp(BOOL fEnterMode)
 HRESULT FrameSite::GetBorder(LPRECT lprectBorder)
 {
        WXOLE_TRACE("IOleInPlaceUIWindow::GetBorder");
-       if (lprectBorder == NULL)
+       if (lprectBorder == NULL) 
         return E_INVALIDARG;
        return INPLACE_E_NOTOOLSPACE;
 }
@@ -1042,7 +1054,7 @@ HRESULT FrameSite::GetBorder(LPRECT lprectBorder)
 HRESULT FrameSite::RequestBorderSpace(LPCBORDERWIDTHS pborderwidths)
 {
        WXOLE_TRACE("IOleInPlaceUIWindow::RequestBorderSpace");
-       if (pborderwidths == NULL)
+       if (pborderwidths == NULL) 
         return E_INVALIDARG;
        return INPLACE_E_NOTOOLSPACE;
 }
@@ -1139,9 +1151,9 @@ HRESULT FrameSite::GetWindowContext(IOleInPlaceFrame **ppFrame,
        if (ppFrame == NULL || ppDoc == NULL || lprcPosRect == NULL ||
                lprcClipRect == NULL || lpFrameInfo == NULL)
        {
-               if (ppFrame != NULL)
+               if (ppFrame != NULL) 
             (*ppFrame) = NULL;
-               if (ppDoc != NULL)
+               if (ppDoc != NULL) 
             (*ppDoc) = NULL;
                return E_INVALIDARG;
        }
@@ -1231,7 +1243,7 @@ HRESULT FrameSite::OnInPlaceActivateEx(BOOL * pfNoRedraw, DWORD dwFlags)
 {
        WXOLE_TRACE("IOleInPlaceSiteEx::OnInPlaceActivateEx");
        OleLockRunning(m_window->m_ActiveX, TRUE, FALSE);
-    if (pfNoRedraw)
+    if (pfNoRedraw) 
         (*pfNoRedraw) = FALSE;
        return S_OK;
 }
@@ -1268,9 +1280,9 @@ HRESULT FrameSite::GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker,
 HRESULT FrameSite::GetContainer(LPOLECONTAINER * ppContainer)
 {
        WXOLE_TRACE("IOleClientSite::GetContainer");
-       if (ppContainer == NULL)
+       if (ppContainer == NULL) 
         return E_INVALIDARG;
-
+       
     HRESULT hr = QueryInterface(IID_IOleContainer, (void**)(ppContainer));
     wxASSERT(SUCCEEDED(hr));
 
@@ -1323,26 +1335,26 @@ HRESULT FrameSite::LockContainer(BOOL fLock)
 
 //IOleItemContainer
 
-HRESULT FrameSite::GetObject(LPOLESTR pszItem, DWORD dwSpeedNeeded,
+HRESULT FrameSite::GetObject(LPOLESTR pszItem, DWORD dwSpeedNeeded, 
                                                         IBindCtx * pbc, REFIID riid, void ** ppvObject)
 {
        WXOLE_TRACE("IOleItemContainer::GetObject");
-       if (pszItem == NULL)
+       if (pszItem == NULL) 
         return E_INVALIDARG;
-       if (ppvObject == NULL)
+       if (ppvObject == NULL) 
         return E_INVALIDARG;
 
        *ppvObject = NULL;
        return MK_E_NOOBJECT;
 }
 
-HRESULT FrameSite::GetObjectStorage(LPOLESTR pszItem, IBindCtx * pbc,
+HRESULT FrameSite::GetObjectStorage(LPOLESTR pszItem, IBindCtx * pbc, 
                                                                        REFIID riid, void ** ppvStorage)
 {
        WXOLE_TRACE("IOleItemContainer::GetObjectStorage");
-       if (pszItem == NULL)
+       if (pszItem == NULL) 
         return E_INVALIDARG;
-       if (ppvStorage == NULL)
+       if (ppvStorage == NULL) 
         return E_INVALIDARG;
 
        *ppvStorage = NULL;
@@ -1352,7 +1364,7 @@ HRESULT FrameSite::GetObjectStorage(LPOLESTR pszItem, IBindCtx * pbc,
 HRESULT FrameSite::IsRunning(LPOLESTR pszItem)
 {
        WXOLE_TRACE("IOleItemContainer::IsRunning");
-       if (pszItem == NULL)
+       if (pszItem == NULL) 
         return E_INVALIDARG;
 
        return MK_E_NOOBJECT;
@@ -1417,7 +1429,7 @@ HRESULT FrameSite::ShowPropertyFrame()
 
 //IOleCommandTarget
 
-HRESULT FrameSite::QueryStatus(const GUID * pguidCmdGroup, ULONG cCmds,
+HRESULT FrameSite::QueryStatus(const GUID * pguidCmdGroup, ULONG cCmds, 
                                                           OLECMD * prgCmds, OLECMDTEXT * pCmdTet)
 {
        WXOLE_TRACE("IOleCommandTarget::QueryStatus");
@@ -1436,8 +1448,8 @@ HRESULT FrameSite::QueryStatus(const GUID * pguidCmdGroup, ULONG cCmds,
        return S_OK;
 }
 
-HRESULT FrameSite::Exec(const GUID * pguidCmdGroup, DWORD nCmdID,
-                                               DWORD nCmdExecOpt, VARIANTARG * pVaIn,
+HRESULT FrameSite::Exec(const GUID * pguidCmdGroup, DWORD nCmdID, 
+                                               DWORD nCmdExecOpt, VARIANTARG * pVaIn, 
                                                VARIANTARG * pVaOut)
 {
        WXOLE_TRACE("IOleCommandTarget::Exec");
@@ -1592,7 +1604,7 @@ wxString OLEHResultToString(HRESULT hr)
 wxString GetIIDName(REFIID riid)
 {
   // an association between symbolic name and numeric value of an IID
-  struct KNOWN_IID
+  struct KNOWN_IID 
   {
     const IID  *pIid;
     const wxChar *szName;
@@ -1602,7 +1614,7 @@ wxString GetIIDName(REFIID riid)
   #define ADD_KNOWN_IID(name) { &IID_I##name, _T(#name) }
   #define ADD_KNOWN_GUID(name) { &name, _T(#name) }
 
-  static const KNOWN_IID aKnownIids[] =
+  static const KNOWN_IID aKnownIids[] = 
   {
     ADD_KNOWN_IID(AdviseSink),
     ADD_KNOWN_IID(AdviseSink2),
@@ -1696,9 +1708,9 @@ wxString GetIIDName(REFIID riid)
   #undef ADD_KNOWN_GUID
 
   // try to find the interface in the table
-  for ( size_t ui = 0; ui < WXSIZEOF(aKnownIids); ui++ )
+  for ( size_t ui = 0; ui < WXSIZEOF(aKnownIids); ui++ ) 
   {
-    if ( riid == *aKnownIids[ui].pIid )
+    if ( riid == *aKnownIids[ui].pIid ) 
     {
       return aKnownIids[ui].szName;
     }
index aa1f16788aeab68718b002c0e999aacf1d779f44..f62ac9830e7824534b4e04417e5221f38e8d8b5d 100644 (file)
@@ -50,7 +50,7 @@ template <class I> class wxAutoOleInterface
        };
 
        // copy constructor
-    explicit wxAutoOleInterface(const wxAutoOleInterface<I>& ti) : m_interface(NULL)
+    wxAutoOleInterface(const wxAutoOleInterface<I>& ti) : m_interface(NULL)
     {
                operator = (ti);
     }
@@ -362,11 +362,11 @@ public:
     wxVariant& operator[] (wxString name);
 };
 
-const wxEventType& RegisterActiveXEvent(wxString eventName);
+const wxEventType& RegisterActiveXEvent(wxChar *eventName);
 
 typedef void (wxEvtHandler::*wxActiveXEventFunction)(wxActiveXEvent&);
 
-#define EVT_ACTIVEX(id, eventName, fn) DECLARE_EVENT_TABLE_ENTRY(RegisterActiveXEvent(eventName), id, -1, (wxObjectEventFunction) (wxEventFunction) (wxActiveXEventFunction) & fn, (wxObject *) NULL ),
+#define EVT_ACTIVEX(id, eventName, fn) DECLARE_EVENT_TABLE_ENTRY(RegisterActiveXEvent(wxT(eventName)), id, -1, (wxObjectEventFunction) (wxEventFunction) (wxActiveXEventFunction) & fn, (wxObject *) NULL ),
 
 //util
 bool MSWVariantToVariant(VARIANTARG& va, wxVariant& vx);