//------------------------------------------------------------------------------ // ioleobj.cpp // Copyright (c)1997-1999 Microsoft Corporation, All Rights Reserved // // Author // bash // // History // 6-27-97 created (bash) // // Implementation of IOleObject. // // We mostly just delegate to Trident's IOleObject, except // for GetUserClassID and GetUserType. We also cache the // host's clientsite and uihandler interfaces in SetClientSite. //------------------------------------------------------------------------------ #include "stdafx.h" #include "triedit.h" #include "document.h" STDMETHODIMP CTriEditDocument::SetClientSite(IOleClientSite *pClientSite) { ATLTRACE(_T("IOleObjectImpl::SetClientSite\n")); HRESULT hr; ICustomDoc *pCustomDoc = NULL; _ASSERTE(m_pOleObjTrident); SAFERELEASE(m_pClientSiteHost); SAFERELEASE(m_pUIHandlerHost); SAFERELEASE(m_pDragDropHandlerHost); m_pClientSiteHost = pClientSite; if (NULL != m_pClientSiteHost) { m_pClientSiteHost->AddRef(); m_pClientSiteHost->QueryInterface(IID_IDocHostUIHandler, (void **) &m_pUIHandlerHost); m_pClientSiteHost->QueryInterface(IID_IDocHostDragDropHandler, (void **) &m_pDragDropHandlerHost); } hr = m_pOleObjTrident->SetClientSite(pClientSite); if (!m_fUIHandlerSet) { // Give Trident the pointer to our IDocHostUIHandler // This has to be done after the SetClientSite call due to a Trident bug hr = m_pUnkTrident->QueryInterface(IID_ICustomDoc, (void **) &pCustomDoc); if (SUCCEEDED(hr) && m_pUIHandler) { hr = pCustomDoc->SetUIHandler(static_cast(m_pUIHandler)); pCustomDoc->Release(); } m_fUIHandlerSet = TRUE; // We can only call this after SetClientSite or else Trident will crash SetUpDefaults(); } #ifdef IE5_SPACING // instantiate the sink if (NULL != m_pClientSiteHost) { CComPtr pHTMLDocument2; m_pTridentEventSink = NULL; hr = m_pUnkTrident->QueryInterface(IID_IHTMLDocument2, (void**)&pHTMLDocument2); if (hr == S_OK && pHTMLDocument2 != NULL) { m_pTridentEventSink = new CComObject; if (m_pTridentEventSink != NULL) { m_pTridentEventSink->m_pHTMLDocument2 = pHTMLDocument2; m_pTridentEventSink->m_pTriEditDocument = this; hr = m_pTridentEventSink->AddRef(); hr = m_pTridentEventSink->Advise(m_pTridentEventSink->m_pHTMLDocument2, DIID_HTMLDocumentEvents); } } } else { if (m_pTridentEventSink) { m_pTridentEventSink->Unadvise(); hr = m_pTridentEventSink->Release(); } } #endif //IE5_SPACING return hr; } STDMETHODIMP CTriEditDocument::GetClientSite(IOleClientSite **ppClientSite) { ATLTRACE(_T("IOleObjectImpl::GetClientSite\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->GetClientSite(ppClientSite); } STDMETHODIMP CTriEditDocument::SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj) { ATLTRACE(_T("IOleObjectImpl::SetHostNames\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->SetHostNames(szContainerApp, szContainerObj); } STDMETHODIMP CTriEditDocument::Close(DWORD dwSaveOption) { ATLTRACE(_T("IOleObjectImpl::Close\n")); _ASSERTE(m_pOleObjTrident); ReleaseElement(); return m_pOleObjTrident->Close(dwSaveOption); } STDMETHODIMP CTriEditDocument::SetMoniker(DWORD dwWhichMoniker, IMoniker* pmk) { ATLTRACE(_T("IOleObjectImpl::SetMoniker\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->SetMoniker(dwWhichMoniker, pmk); } STDMETHODIMP CTriEditDocument::GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker** ppmk ) { ATLTRACE(_T("IOleObjectImpl::GetMoniker\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->GetMoniker(dwAssign, dwWhichMoniker, ppmk); } STDMETHODIMP CTriEditDocument::InitFromData(IDataObject* pDataObject, BOOL fCreation, DWORD dwReserved) { ATLTRACE(_T("IOleObjectImpl::InitFromData\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->InitFromData(pDataObject, fCreation, dwReserved ); } STDMETHODIMP CTriEditDocument::GetClipboardData(DWORD dwReserved, IDataObject** ppDataObject) { ATLTRACE(_T("IOleObjectImpl::GetClipboardData\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->GetClipboardData(dwReserved, ppDataObject); } STDMETHODIMP CTriEditDocument::DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite* pActiveSite , LONG lindex , HWND hwndParent, LPCRECT lprcPosRect) { ATLTRACE(_T("IOleObjectImpl::DoVerb\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->DoVerb(iVerb, lpmsg, pActiveSite, lindex, hwndParent, lprcPosRect); } STDMETHODIMP CTriEditDocument::EnumVerbs(IEnumOLEVERB **ppEnumOleVerb) { ATLTRACE(_T("IOleObjectImpl::EnumVerbs\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->EnumVerbs(ppEnumOleVerb); } STDMETHODIMP CTriEditDocument::Update(void) { ATLTRACE(_T("IOleObjectImpl::Update\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->Update(); } STDMETHODIMP CTriEditDocument::IsUpToDate(void) { ATLTRACE(_T("IOleObjectImpl::IsUpToDate\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->IsUpToDate(); } STDMETHODIMP CTriEditDocument::GetUserClassID(CLSID *pClsid) { ATLTRACE(_T("IOleObjectImpl::GetUserClassID\n")); _ASSERTE(m_pOleObjTrident); *pClsid = GetObjectCLSID(); return S_OK; } STDMETHODIMP CTriEditDocument::GetUserType(DWORD dwFormOfType, LPOLESTR *pszUserType) { ATLTRACE(_T("IOleObjectImpl::GetUserType\n")); _ASSERTE(m_pOleObjTrident); return OleRegGetUserType(GetObjectCLSID(), dwFormOfType, pszUserType); } STDMETHODIMP CTriEditDocument::SetExtent(DWORD dwDrawAspect, SIZEL *psizel) { ATLTRACE(_T("IOleObjectImpl::SetExtent\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->SetExtent(dwDrawAspect, psizel); } STDMETHODIMP CTriEditDocument::GetExtent(DWORD dwDrawAspect, SIZEL *psizel) { ATLTRACE(_T("IOleObjectImpl::GetExtent\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->GetExtent(dwDrawAspect, psizel); } STDMETHODIMP CTriEditDocument::Advise(IAdviseSink *pAdvSink, DWORD *pdwConnection) { ATLTRACE(_T("IOleObjectImpl::Advise\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->Advise(pAdvSink, pdwConnection); } STDMETHODIMP CTriEditDocument::Unadvise(DWORD dwConnection) { ATLTRACE(_T("IOleObjectImpl::Unadvise\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->Unadvise(dwConnection); } STDMETHODIMP CTriEditDocument::EnumAdvise(IEnumSTATDATA **ppenumAdvise) { ATLTRACE(_T("IOleObjectImpl::EnumAdvise\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->EnumAdvise(ppenumAdvise); } STDMETHODIMP CTriEditDocument::GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus) { ATLTRACE(_T("IOleObjectImpl::GetMiscStatus\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->GetMiscStatus(dwAspect, pdwStatus); } STDMETHODIMP CTriEditDocument::SetColorScheme(LOGPALETTE* pLogpal) { ATLTRACE(_T("IOleObjectImpl::SetColorScheme\n")); _ASSERTE(m_pOleObjTrident); return m_pOleObjTrident->SetColorScheme(pLogpal); }