static HRESULT WINAPI XMLView_PersistMoniker_GetCurMoniker( IPersistMoniker *iface, IMoniker **ppimkName) { XMLView *This = impl_from_IPersistMoniker(iface); FIXME("(%p)->(%p)\n", This, ppimkName); return E_NOTIMPL; }
static HRESULT WINAPI PersistMoniker_Save(IPersistMoniker *iface, IMoniker *pimkName, LPBC pbc, BOOL fRemember) { HTMLDocument *This = impl_from_IPersistMoniker(iface); FIXME("(%p)->(%p %p %x)\n", This, pimkName, pbc, fRemember); return E_NOTIMPL; }
static HRESULT WINAPI XMLView_PersistMoniker_GetClassID( IPersistMoniker *iface, CLSID *pClassID) { XMLView *This = impl_from_IPersistMoniker(iface); FIXME("(%p)->(%p)\n", This, pClassID); return E_NOTIMPL; }
static HRESULT WINAPI XMLView_PersistMoniker_SaveCompleted( IPersistMoniker *iface, IMoniker *pimkName, LPBC pibc) { XMLView *This = impl_from_IPersistMoniker(iface); FIXME("(%p)->(%p %p)\n", This, pimkName, pibc); return E_NOTIMPL; }
static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable, IMoniker *pimkName, LPBC pibc, DWORD grfMode) { HTMLDocument *This = impl_from_IPersistMoniker(iface); IMoniker *mon; HRESULT hres; TRACE("(%p)->(%x %p %p %08x)\n", This, fFullyAvailable, pimkName, pibc, grfMode); if(pibc) { IUnknown *unk = NULL; /* FIXME: * Use params: * "__PrecreatedObject" * "BIND_CONTEXT_PARAM" * "__HTMLLOADOPTIONS" * "__DWNBINDINFO" * "URL Context" * "_ITransData_Object_" * "_EnumFORMATETC_" */ hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM, &unk); if(SUCCEEDED(hres) && unk) { IOleClientSite *client = NULL; hres = IUnknown_QueryInterface(unk, &IID_IOleClientSite, (void**)&client); if(SUCCEEDED(hres)) { TRACE("Got client site %p\n", client); IOleObject_SetClientSite(&This->IOleObject_iface, client); IOleClientSite_Release(client); } IUnknown_Release(unk); } } if(This->doc_obj->is_mhtml) { IUnknown *unk; hres = MimeOleObjectFromMoniker(0, pimkName, pibc, &IID_IUnknown, (void**)&unk, &mon); if(FAILED(hres)) return hres; IUnknown_Release(unk); pibc = NULL; }else { IMoniker_AddRef(mon = pimkName); } prepare_for_binding(This, mon, FALSE); call_docview_84(This->doc_obj); hres = set_moniker(This->window, mon, NULL, pibc, NULL, TRUE); IMoniker_Release(mon); if(FAILED(hres)) return hres; return start_binding(This->window->pending_window, (BSCallback*)This->window->pending_window->bscallback, pibc); }
static HRESULT WINAPI PersistMoniker_IsDirty(IPersistMoniker *iface) { HTMLDocument *This = impl_from_IPersistMoniker(iface); TRACE("(%p)\n", This); return IPersistStreamInit_IsDirty(&This->IPersistStreamInit_iface); }
static ULONG WINAPI XMLView_PersistMoniker_AddRef(IPersistMoniker *iface) { XMLView *This = impl_from_IPersistMoniker(iface); LONG ref = InterlockedIncrement(&This->ref); TRACE("(%p)->(%d)\n", This, ref); return ref; }
static HRESULT WINAPI PersistMoniker_GetCurMoniker(IPersistMoniker *iface, IMoniker **ppimkName) { HTMLDocument *This = impl_from_IPersistMoniker(iface); TRACE("(%p)->(%p)\n", This, ppimkName); if(!This->window || !This->window->mon) return E_UNEXPECTED; IMoniker_AddRef(This->window->mon); *ppimkName = This->window->mon; return S_OK; }
static ULONG WINAPI XMLView_PersistMoniker_Release(IPersistMoniker *iface) { XMLView *This = impl_from_IPersistMoniker(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p)->(%d)\n", This, ref); if(!ref) { if(This->mon) IMoniker_Release(This->mon); IUnknown_Release(This->html_doc); heap_free(This); } return ref; }
static HRESULT WINAPI XMLView_PersistMoniker_QueryInterface( IPersistMoniker *iface, REFIID riid, void **ppvObject) { XMLView *This = impl_from_IPersistMoniker(iface); TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject); if(IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IPersistMoniker)) *ppvObject = &This->IPersistMoniker_iface; else if(IsEqualGUID(riid, &IID_IPersistHistory) || IsEqualGUID(riid, &IID_IPersist)) *ppvObject = &This->IPersistHistory_iface; else if(IsEqualGUID(riid, &IID_IOleCommandTarget)) *ppvObject = &This->IOleCommandTarget_iface; else if(IsEqualGUID(riid, &IID_IOleObject)) *ppvObject = &This->IOleObject_iface; else return IUnknown_QueryInterface(This->html_doc, riid, ppvObject); IPersistMoniker_AddRef(&This->IPersistMoniker_iface); return S_OK; }
static HRESULT WINAPI PersistMoniker_GetClassID(IPersistMoniker *iface, CLSID *pClassID) { HTMLDocument *This = impl_from_IPersistMoniker(iface); return IPersistFile_GetClassID(&This->IPersistFile_iface, pClassID); }
static ULONG WINAPI PersistMoniker_Release(IPersistMoniker *iface) { HTMLDocument *This = impl_from_IPersistMoniker(iface); return htmldoc_release(This); }
static ULONG WINAPI PersistMoniker_AddRef(IPersistMoniker *iface) { HTMLDocument *This = impl_from_IPersistMoniker(iface); return htmldoc_addref(This); }
static HRESULT WINAPI PersistMoniker_QueryInterface(IPersistMoniker *iface, REFIID riid, void **ppv) { HTMLDocument *This = impl_from_IPersistMoniker(iface); return htmldoc_query_interface(This, riid, ppv); }
static HRESULT WINAPI XMLView_PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAvailable, IMoniker *pimkName, LPBC pibc, DWORD grfMode) { static const WCHAR XSLParametersW[] = {'X','S','L','P','a','r','a','m','e','t','e','r','s',0}; static const WCHAR XMLBufferStreamW[] = {'X','M','L','B','u','f','f','e','r','S','t','r','e','a','m',0}; static const WCHAR DWNBINDINFOW[] = {'_','_','D','W','N','B','I','N','D','I','N','F','O',0}; static const WCHAR HTMLLOADOPTIONSW[] = {'_','_','H','T','M','L','L','O','A','D','O','P','T','I','O','N','S',0}; static const WCHAR BSCBHolderW[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 }; XMLView *This = impl_from_IPersistMoniker(iface); IPersistMoniker *html_persist_mon; IBindStatusCallback *bsc, *bsc_html; IBindCtx *bindctx; IStream *stream; IMoniker *mon; IUnknown *unk; HRESULT hres; TRACE("(%p)->(%x %p %p %x)\n", This, fFullyAvailable, pimkName, pibc, grfMode); hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)XSLParametersW, &unk); if(SUCCEEDED(hres)) { FIXME("ignoring XSLParameters\n"); IUnknown_Release(unk); } hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)XMLBufferStreamW, &unk); if(SUCCEEDED(hres)) { FIXME("ignoring XMLBufferStream\n"); IUnknown_Release(unk); } hres = CreateBindCtx(0, &bindctx); if(FAILED(hres)) return hres; hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)DWNBINDINFOW, &unk); if(SUCCEEDED(hres)) { IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)DWNBINDINFOW, unk); IUnknown_Release(unk); } hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)HTMLLOADOPTIONSW, &unk); if(SUCCEEDED(hres)) { IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)HTMLLOADOPTIONSW, unk); IUnknown_Release(unk); } hres = IBindCtx_GetObjectParam(pibc, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM, &unk); if(SUCCEEDED(hres)) { IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM, unk); IUnknown_Release(unk); } hres = CreateStreamOnHGlobal(NULL, TRUE, &stream); if(FAILED(hres)) { IBindCtx_Release(bindctx); return hres; } if(This->mon) IMoniker_Release(This->mon); This->mon = pimkName; IMoniker_AddRef(This->mon); hres = XMLView_Moniker_Create(This->mon, stream, &mon); if(FAILED(hres)) { IStream_Release(stream); IBindCtx_Release(bindctx); return hres; } hres = IUnknown_QueryInterface(This->html_doc, &IID_IPersistMoniker, (void**)&html_persist_mon); if(FAILED(hres)) { IMoniker_Release(mon); IStream_Release(stream); IBindCtx_Release(bindctx); return hres; } hres = IPersistMoniker_Load(html_persist_mon, FALSE, mon, bindctx, 0); IPersistMoniker_Release(html_persist_mon); IMoniker_Release(mon); if(FAILED(hres)) { IStream_Release(stream); IBindCtx_Release(bindctx); return hres; } hres = IBindCtx_GetObjectParam(bindctx, (LPOLESTR)BSCBHolderW, &unk); IBindCtx_Release(bindctx); if(FAILED(hres)) { IStream_Release(stream); return hres; } hres = IUnknown_QueryInterface(unk, &IID_IBindStatusCallback, (void**)&bsc_html); IUnknown_Release(unk); if(FAILED(hres)) { IStream_Release(stream); return hres; } hres = XMLView_BindStatusCallback_Create(bsc_html, This->mon, stream, &bsc); IStream_Release(stream); if(FAILED(hres)) { IBindStatusCallback_OnStopBinding(bsc_html, hres, NULL); IBindStatusCallback_Release(bsc_html); return hres; } hres = RegisterBindStatusCallback(pibc, bsc, NULL, 0); IBindStatusCallback_Release(bsc); if(FAILED(hres)) { IBindStatusCallback_OnStopBinding(bsc_html, hres, NULL); IBindStatusCallback_Release(bsc_html); return hres; } hres = IMoniker_BindToStorage(pimkName, pibc, NULL, &IID_IStream, (void**)&stream); if(FAILED(hres)) { IBindStatusCallback_OnStopBinding(bsc_html, hres, NULL); IBindStatusCallback_Release(bsc_html); return hres; } if(stream) IStream_Release(stream); IBindStatusCallback_Release(bsc_html); return S_OK; }
static HRESULT WINAPI XMLView_PersistMoniker_IsDirty(IPersistMoniker *iface) { XMLView *This = impl_from_IPersistMoniker(iface); FIXME("(%p)\n", This); return E_NOTIMPL; }