From d3b55102350d3b1d85bef3e4a4ab8998bc487183 Mon Sep 17 00:00:00 2001 From: Robin Dunn Date: Sat, 20 Jul 2002 00:06:59 +0000 Subject: [PATCH] New wxActiveX code from Lindsay and added ability to load page from stream git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16220 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/contrib/iewin/IEHtmlWin.cpp | 118 +++++++++++++++----- wxPython/contrib/iewin/IEHtmlWin.h | 5 + wxPython/contrib/iewin/iewin.cpp | 51 +++++++++ wxPython/contrib/iewin/iewin.i | 4 +- wxPython/contrib/iewin/iewin.py | 3 + wxPython/contrib/iewin/wxactivex.cpp | 158 ++++++++++++++------------- wxPython/contrib/iewin/wxactivex.h | 6 +- 7 files changed, 240 insertions(+), 105 deletions(-) diff --git a/wxPython/contrib/iewin/IEHtmlWin.cpp b/wxPython/contrib/iewin/IEHtmlWin.cpp index 60640ab2cd..5aa4a8f87f 100644 --- a/wxPython/contrib/iewin/IEHtmlWin.cpp +++ b/wxPython/contrib/iewin/IEHtmlWin.cpp @@ -1,7 +1,9 @@ #include "IEHtmlWin.h" #include +#include #include #include +#include #include #include #include @@ -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 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 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 diff --git a/wxPython/contrib/iewin/IEHtmlWin.h b/wxPython/contrib/iewin/IEHtmlWin.h index 7dcfdb6852..b4c7eea2a1 100644 --- a/wxPython/contrib/iewin/IEHtmlWin.h +++ b/wxPython/contrib/iewin/IEHtmlWin.h @@ -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 m_webBrowser; }; diff --git a/wxPython/contrib/iewin/iewin.cpp b/wxPython/contrib/iewin/iewin.cpp index c85c531688..11fb5ef617 100644 --- a/wxPython/contrib/iewin/iewin.cpp +++ b/wxPython/contrib/iewin/iewin.cpp @@ -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 }, diff --git a/wxPython/contrib/iewin/iewin.i b/wxPython/contrib/iewin/iewin.i index 00de90791d..8a90a95c0c 100644 --- a/wxPython/contrib/iewin/iewin.i +++ b/wxPython/contrib/iewin/iewin.i @@ -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" diff --git a/wxPython/contrib/iewin/iewin.py b/wxPython/contrib/iewin/iewin.py index 363f76405c..9c3f24f122 100644 --- a/wxPython/contrib/iewin/iewin.py +++ b/wxPython/contrib/iewin/iewin.py @@ -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 diff --git a/wxPython/contrib/iewin/wxactivex.cpp b/wxPython/contrib/iewin/wxactivex.cpp index 9d4a0f2b3b..ac6df87513 100644 --- a/wxPython/contrib/iewin/wxactivex.cpp +++ b/wxPython/contrib/iewin/wxactivex.cpp @@ -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 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; } diff --git a/wxPython/contrib/iewin/wxactivex.h b/wxPython/contrib/iewin/wxactivex.h index aa1f16788a..f62ac9830e 100644 --- a/wxPython/contrib/iewin/wxactivex.h +++ b/wxPython/contrib/iewin/wxactivex.h @@ -50,7 +50,7 @@ template class wxAutoOleInterface }; // copy constructor - explicit wxAutoOleInterface(const wxAutoOleInterface& ti) : m_interface(NULL) + wxAutoOleInterface(const wxAutoOleInterface& 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); -- 2.45.2