2 * Copyright 2012 Piotr Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #define NONAMELESSUNION
33 #include "wine/debug.h"
34 #include "wine/unicode.h"
36 #include "msxml_dispex.h"
38 WINE_DEFAULT_DEBUG_CHANNEL(msxml
);
42 IPersistMoniker IPersistMoniker_iface
;
43 IPersistHistory IPersistHistory_iface
;
44 IOleCommandTarget IOleCommandTarget_iface
;
45 IOleObject IOleObject_iface
;
55 IMoniker IMoniker_iface
;
64 IBindStatusCallback IBindStatusCallback_iface
;
66 IBindStatusCallback
*bsc
;
74 IBinding IBinding_iface
;
79 static inline Binding
* impl_from_IBinding(IBinding
*iface
)
81 return CONTAINING_RECORD(iface
, Binding
, IBinding_iface
);
84 static HRESULT WINAPI
XMLView_Binding_QueryInterface(
85 IBinding
*iface
, REFIID riid
, void **ppvObject
)
87 Binding
*This
= impl_from_IBinding(iface
);
89 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
91 if(IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IBinding
)) {
93 IBinding_AddRef(iface
);
101 static ULONG WINAPI
XMLView_Binding_AddRef(IBinding
*iface
)
103 Binding
*This
= impl_from_IBinding(iface
);
104 LONG ref
= InterlockedIncrement(&This
->ref
);
106 TRACE("(%p)->(%d)\n", This
, ref
);
111 static ULONG WINAPI
XMLView_Binding_Release(IBinding
*iface
)
113 Binding
*This
= impl_from_IBinding(iface
);
114 ULONG ref
= InterlockedDecrement(&This
->ref
);
116 TRACE("(%p)->(%d)\n", This
, ref
);
119 IBinding_Release(This
->binding
);
125 static HRESULT WINAPI
XMLView_Binding_Abort(IBinding
*iface
)
127 Binding
*This
= impl_from_IBinding(iface
);
128 TRACE("(%p)\n", This
);
130 return IBinding_Abort(This
->binding
);
133 static HRESULT WINAPI
XMLView_Binding_Suspend(IBinding
*iface
)
135 Binding
*This
= impl_from_IBinding(iface
);
136 FIXME("(%p)\n", This
);
140 static HRESULT WINAPI
XMLView_Binding_Resume(IBinding
*iface
)
142 Binding
*This
= impl_from_IBinding(iface
);
143 FIXME("(%p)\n", This
);
147 static HRESULT WINAPI
XMLView_Binding_SetPriority(
148 IBinding
*iface
, LONG nPriority
)
150 Binding
*This
= impl_from_IBinding(iface
);
151 TRACE("(%p)->(%d)\n", This
, nPriority
);
153 return IBinding_SetPriority(This
->binding
, nPriority
);
156 static HRESULT WINAPI
XMLView_Binding_GetPriority(
157 IBinding
*iface
, LONG
*pnPriority
)
159 Binding
*This
= impl_from_IBinding(iface
);
160 TRACE("(%p)->(%p)\n", This
, pnPriority
);
162 return IBinding_GetPriority(This
->binding
, pnPriority
);
165 static HRESULT WINAPI
XMLView_Binding_GetBindResult(IBinding
*iface
,
166 CLSID
*pclsidProtocol
, DWORD
*pdwResult
, LPOLESTR
*pszResult
,
169 Binding
*This
= impl_from_IBinding(iface
);
170 FIXME("(%p)->(%s %p %p %p)\n", This
, debugstr_guid(pclsidProtocol
),
171 pdwResult
, pszResult
, pdwReserved
);
175 static IBindingVtbl XMLView_BindingVtbl
= {
176 XMLView_Binding_QueryInterface
,
177 XMLView_Binding_AddRef
,
178 XMLView_Binding_Release
,
179 XMLView_Binding_Abort
,
180 XMLView_Binding_Suspend
,
181 XMLView_Binding_Resume
,
182 XMLView_Binding_SetPriority
,
183 XMLView_Binding_GetPriority
,
184 XMLView_Binding_GetBindResult
187 static inline HRESULT
XMLView_Binding_Create(IBinding
*binding
, IBinding
**ret
)
191 bind
= heap_alloc_zero(sizeof(Binding
));
193 return E_OUTOFMEMORY
;
195 bind
->IBinding_iface
.lpVtbl
= &XMLView_BindingVtbl
;
198 bind
->binding
= binding
;
199 IBinding_AddRef(binding
);
201 *ret
= &bind
->IBinding_iface
;
205 static inline BindStatusCallback
* impl_from_IBindStatusCallback(
206 IBindStatusCallback
*iface
)
208 return CONTAINING_RECORD(iface
, BindStatusCallback
,
209 IBindStatusCallback_iface
);
212 static HRESULT WINAPI
XMLView_BindStatusCallback_QueryInterface(
213 IBindStatusCallback
*iface
, REFIID riid
, void **ppvObject
)
215 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
217 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
219 if(IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IBindStatusCallback
)) {
221 IBindStatusCallback_AddRef(iface
);
226 return E_NOINTERFACE
;
229 static ULONG WINAPI
XMLView_BindStatusCallback_AddRef(
230 IBindStatusCallback
*iface
)
232 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
233 LONG ref
= InterlockedIncrement(&This
->ref
);
235 TRACE("(%p)->(%d)\n", This
, ref
);
240 static ULONG WINAPI
XMLView_BindStatusCallback_Release(
241 IBindStatusCallback
*iface
)
243 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
244 ULONG ref
= InterlockedDecrement(&This
->ref
);
246 TRACE("(%p)->(%d)\n", This
, ref
);
250 IStream_Release(This
->stream
);
251 IBindStatusCallback_Release(This
->bsc
);
252 IMoniker_Release(This
->mon
);
258 static HRESULT WINAPI
XMLView_BindStatusCallback_OnStartBinding(
259 IBindStatusCallback
*iface
, DWORD dwReserved
, IBinding
*pib
)
261 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
265 TRACE("(%p)->(%x %p)\n", This
, dwReserved
, pib
);
267 hres
= XMLView_Binding_Create(pib
, &binding
);
273 hres
= IBindStatusCallback_OnStartBinding(This
->bsc
, dwReserved
, binding
);
275 IBinding_Abort(binding
);
279 IBinding_Release(binding
);
283 static HRESULT WINAPI
XMLView_BindStatusCallback_GetPriority(
284 IBindStatusCallback
*iface
, LONG
*pnPriority
)
286 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
287 FIXME("(%p)->(%p)\n", This
, pnPriority
);
291 static HRESULT WINAPI
XMLView_BindStatusCallback_OnLowResource(
292 IBindStatusCallback
*iface
, DWORD reserved
)
294 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
295 FIXME("(%p)->(%x)\n", This
, reserved
);
299 static HRESULT WINAPI
XMLView_BindStatusCallback_OnProgress(
300 IBindStatusCallback
*iface
, ULONG ulProgress
, ULONG ulProgressMax
,
301 ULONG ulStatusCode
, LPCWSTR szStatusText
)
303 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
304 TRACE("(%p)->(%d %d %x %s)\n", This
, ulProgress
, ulProgressMax
,
305 ulStatusCode
, debugstr_w(szStatusText
));
307 switch(ulStatusCode
) {
308 case BINDSTATUS_BEGINDOWNLOADDATA
:
309 return IBindStatusCallback_OnProgress(This
->bsc
, ulProgress
,
310 ulProgressMax
, ulStatusCode
, szStatusText
);
311 case BINDSTATUS_MIMETYPEAVAILABLE
:
314 FIXME("ulStatusCode: %d\n", ulStatusCode
);
319 static HRESULT WINAPI
XMLView_BindStatusCallback_OnStopBinding(
320 IBindStatusCallback
*iface
, HRESULT hresult
, LPCWSTR szError
)
322 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
323 TRACE("(%p)->(%x %s)\n", This
, hresult
, debugstr_w(szError
));
324 return IBindStatusCallback_OnStopBinding(This
->bsc
, hresult
, szError
);
327 static HRESULT WINAPI
XMLView_BindStatusCallback_GetBindInfo(
328 IBindStatusCallback
*iface
, DWORD
*grfBINDF
, BINDINFO
*pbindinfo
)
330 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
331 TRACE("(%p)->(%p %p)\n", This
, grfBINDF
, pbindinfo
);
332 return IBindStatusCallback_GetBindInfo(This
->bsc
, grfBINDF
, pbindinfo
);
335 static inline HRESULT
report_data(BindStatusCallback
*This
)
337 FORMATETC formatetc
= {0, NULL
, 1, -1, TYMED_ISTREAM
};
344 hres
= IStream_Seek(This
->stream
, off
, STREAM_SEEK_CUR
, &size
);
348 hres
= IStream_Seek(This
->stream
, off
, STREAM_SEEK_SET
, NULL
);
352 stgmedium
.tymed
= TYMED_ISTREAM
;
353 stgmedium
.u
.pstm
= This
->stream
;
354 stgmedium
.pUnkForRelease
= NULL
;
356 hres
= IBindStatusCallback_OnDataAvailable(This
->bsc
,
357 BSCF_FIRSTDATANOTIFICATION
|BSCF_LASTDATANOTIFICATION
,
358 size
.u
.LowPart
, &formatetc
, &stgmedium
);
360 IStream_Release(This
->stream
);
365 static inline HRESULT
display_error_page(BindStatusCallback
*This
)
367 FIXME("Error page not implemented yet.\n");
368 return report_data(This
);
371 static inline HRESULT
handle_xml_load(BindStatusCallback
*This
)
373 static const WCHAR selectW
[] = {'p','r','o','c','e','s','s','i','n','g','-',
374 'i','n','s','t','r','u','c','t','i','o','n','(','\'','x','m','l',
375 '-','s','t','y','l','e','s','h','e','e','t','\'',')',0};
376 static const WCHAR hrefW
[] = {'h','r','e','f','=',0};
378 IXMLDOMDocument3
*xml
= NULL
, *xsl
= NULL
;
379 IXMLDOMNode
*stylesheet
;
386 WCHAR
*href
= NULL
, *p
;
391 hres
= IStream_Seek(This
->stream
, off
, STREAM_SEEK_SET
, NULL
);
393 return display_error_page(This
);
395 hres
= dom_document_create(MSXML_DEFAULT
, (void **)&xml
);
397 return display_error_page(This
);
399 V_VT(&var
) = VT_UNKNOWN
;
400 V_UNKNOWN(&var
) = (IUnknown
*)This
->stream
;
401 hres
= IXMLDOMDocument3_load(xml
, var
, &succ
);
402 if(FAILED(hres
) || !succ
) {
403 IXMLDOMDocument3_Release(xml
);
404 return display_error_page(This
);
406 V_VT(&var
) = VT_EMPTY
;
408 bstr
= SysAllocString(selectW
);
409 hres
= IXMLDOMDocument3_selectSingleNode(xml
, bstr
, &stylesheet
);
412 IXMLDOMDocument3_Release(xml
);
413 return display_error_page(This
);
416 hres
= IXMLDOMNode_get_nodeValue(stylesheet
, &var
);
417 IXMLDOMNode_Release(stylesheet
);
418 if(SUCCEEDED(hres
) && V_VT(&var
)!=VT_BSTR
) {
419 FIXME("Variant type %d not supported\n", V_VT(&var
));
424 IXMLDOMDocument3_Release(xml
);
425 return display_error_page(This
);
428 /* TODO: fix parsing processing instruction value */
429 if((p
= strstrW(V_BSTR(&var
), hrefW
))) {
430 p
+= ARRAY_SIZE(hrefW
) - 1;
431 if(*p
!='\'' && *p
!='\"') p
= NULL
;
434 p
= strchrW(href
, *p
);
441 IXMLDOMDocument3_Release(xml
);
442 return display_error_page(This
);
445 hres
= CreateURLMonikerEx(This
->mon
, href
, &mon
, 0);
448 IXMLDOMDocument3_Release(xml
);
449 return display_error_page(This
);
452 hres
= CreateBindCtx(0, &pbc
);
453 if(SUCCEEDED(hres
)) {
454 hres
= IMoniker_GetDisplayName(mon
, pbc
, NULL
, &xsl_url
);
455 IMoniker_Release(mon
);
456 IBindCtx_Release(pbc
);
459 IXMLDOMDocument3_Release(xml
);
460 return display_error_page(This
);
463 V_VT(&var
) = VT_BSTR
;
464 V_BSTR(&var
) = SysAllocString(xsl_url
);
465 CoTaskMemFree(xsl_url
);
467 IXMLDOMDocument3_Release(xml
);
468 return display_error_page(This
);
471 hres
= dom_document_create(MSXML_DEFAULT
, (void **)&xsl
);
474 IXMLDOMDocument3_Release(xml
);
475 return display_error_page(This
);
478 /* TODO: do the binding asynchronously */
479 hres
= IXMLDOMDocument3_load(xsl
, var
, &succ
);
481 if(FAILED(hres
) || !succ
) {
482 IXMLDOMDocument3_Release(xsl
);
483 IXMLDOMDocument3_Release(xml
);
484 return display_error_page(This
);
487 hres
= IXMLDOMDocument3_transformNode(xml
, (IXMLDOMNode
*)xsl
, &bstr
);
488 IXMLDOMDocument3_Release(xsl
);
489 IXMLDOMDocument3_Release(xml
);
491 return display_error_page(This
);
493 hres
= IStream_Seek(This
->stream
, off
, STREAM_SEEK_SET
, NULL
);
496 return display_error_page(This
);
499 hres
= IStream_Write(This
->stream
, (BYTE
*)bstr
,
500 SysStringLen(bstr
)*sizeof(WCHAR
), NULL
);
503 return display_error_page(This
);
505 return report_data(This
);
508 static HRESULT WINAPI
XMLView_BindStatusCallback_OnDataAvailable(
509 IBindStatusCallback
*iface
, DWORD grfBSCF
, DWORD dwSize
,
510 FORMATETC
*pformatetc
, STGMEDIUM
*pstgmed
)
512 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
517 TRACE("(%p)->(%x %d %p %p)\n", This
, grfBSCF
, dwSize
, pformatetc
, pstgmed
);
523 hres
= IStream_Read(pstgmed
->u
.pstm
, buf
, sizeof(buf
), &size
);
524 IStream_Write(This
->stream
, buf
, size
, &size
);
525 } while(hres
==S_OK
&& size
);
527 if(FAILED(hres
) && hres
!=E_PENDING
)
532 return handle_xml_load(This
);
535 static HRESULT WINAPI
XMLView_BindStatusCallback_OnObjectAvailable(
536 IBindStatusCallback
*iface
, REFIID riid
, IUnknown
*punk
)
538 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
539 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), punk
);
543 static IBindStatusCallbackVtbl XMLView_BindStatusCallbackVtbl
= {
544 XMLView_BindStatusCallback_QueryInterface
,
545 XMLView_BindStatusCallback_AddRef
,
546 XMLView_BindStatusCallback_Release
,
547 XMLView_BindStatusCallback_OnStartBinding
,
548 XMLView_BindStatusCallback_GetPriority
,
549 XMLView_BindStatusCallback_OnLowResource
,
550 XMLView_BindStatusCallback_OnProgress
,
551 XMLView_BindStatusCallback_OnStopBinding
,
552 XMLView_BindStatusCallback_GetBindInfo
,
553 XMLView_BindStatusCallback_OnDataAvailable
,
554 XMLView_BindStatusCallback_OnObjectAvailable
557 static inline HRESULT
XMLView_BindStatusCallback_Create(IBindStatusCallback
*bsc_html
,
558 IMoniker
*mon
, IStream
*stream
, IBindStatusCallback
**ret
)
560 BindStatusCallback
*bsc
;
562 bsc
= heap_alloc_zero(sizeof(BindStatusCallback
));
564 return E_OUTOFMEMORY
;
566 bsc
->IBindStatusCallback_iface
.lpVtbl
= &XMLView_BindStatusCallbackVtbl
;
570 IBindStatusCallback_AddRef(bsc_html
);
571 bsc
->stream
= stream
;
572 IStream_AddRef(bsc
->stream
);
574 IMoniker_AddRef(mon
);
576 *ret
= &bsc
->IBindStatusCallback_iface
;
580 static inline Moniker
* impl_from_IMoniker(IMoniker
*iface
)
582 return CONTAINING_RECORD(iface
, Moniker
, IMoniker_iface
);
585 static HRESULT WINAPI
XMLView_Moniker_QueryInterface(
586 IMoniker
*iface
, REFIID riid
, void **ppvObject
)
588 Moniker
*This
= impl_from_IMoniker(iface
);
590 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
592 if(IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IPersist
)
593 || IsEqualGUID(riid
, &IID_IPersistStream
) || IsEqualGUID(riid
, &IID_IMoniker
)) {
595 IMoniker_AddRef(iface
);
600 return E_NOINTERFACE
;
603 static ULONG WINAPI
XMLView_Moniker_AddRef(IMoniker
*iface
)
605 Moniker
*This
= impl_from_IMoniker(iface
);
606 LONG ref
= InterlockedIncrement(&This
->ref
);
608 TRACE("(%p)->(%d)\n", This
, ref
);
613 static ULONG WINAPI
XMLView_Moniker_Release(IMoniker
*iface
)
615 Moniker
*This
= impl_from_IMoniker(iface
);
616 ULONG ref
= InterlockedDecrement(&This
->ref
);
618 TRACE("(%p)->(%d)\n", This
, ref
);
621 IMoniker_Release(This
->mon
);
627 static HRESULT WINAPI
XMLView_Moniker_GetClassID(IMoniker
*iface
, CLSID
*pClassID
)
629 Moniker
*This
= impl_from_IMoniker(iface
);
630 FIXME("(%p)->(%p)\n", This
, pClassID
);
634 static HRESULT WINAPI
XMLView_Moniker_IsDirty(IMoniker
*iface
)
636 Moniker
*This
= impl_from_IMoniker(iface
);
637 FIXME("(%p)\n", This
);
641 static HRESULT WINAPI
XMLView_Moniker_Load(IMoniker
*iface
, IStream
*pStm
)
643 Moniker
*This
= impl_from_IMoniker(iface
);
644 FIXME("(%p)->(%p)\n", This
, pStm
);
648 static HRESULT WINAPI
XMLView_Moniker_Save(IMoniker
*iface
,
649 IStream
*pStm
, BOOL fClearDirty
)
651 Moniker
*This
= impl_from_IMoniker(iface
);
652 FIXME("(%p)->(%p %x)\n", This
, pStm
, fClearDirty
);
656 static HRESULT WINAPI
XMLView_Moniker_GetSizeMax(
657 IMoniker
*iface
, ULARGE_INTEGER
*pcbSize
)
659 Moniker
*This
= impl_from_IMoniker(iface
);
660 FIXME("(%p)->(%p)\n", This
, pcbSize
);
664 static HRESULT WINAPI
XMLView_Moniker_BindToObject(IMoniker
*iface
, IBindCtx
*pbc
,
665 IMoniker
*pmkToLeft
, REFIID riidResult
, void **ppvResult
)
667 Moniker
*This
= impl_from_IMoniker(iface
);
668 FIXME("(%p)->(%p %p %s %p)\n", This
, pbc
, pmkToLeft
,
669 debugstr_guid(riidResult
), ppvResult
);
673 static HRESULT WINAPI
XMLView_Moniker_BindToStorage(IMoniker
*iface
, IBindCtx
*pbc
,
674 IMoniker
*pmkToLeft
, REFIID riid
, void **ppvObj
)
676 Moniker
*This
= impl_from_IMoniker(iface
);
678 TRACE("(%p)->(%p %p %s %p)\n", This
, pbc
, pmkToLeft
, debugstr_guid(riid
), ppvObj
);
680 if(IsEqualGUID(riid
, &IID_IStream
)) {
684 *ppvObj
= This
->stream
;
686 return S_ASYNCHRONOUS
;
692 static HRESULT WINAPI
XMLView_Moniker_Reduce(IMoniker
*iface
, IBindCtx
*pbc
,
693 DWORD dwReduceHowFar
, IMoniker
**ppmkToLeft
, IMoniker
**ppmkReduced
)
695 Moniker
*This
= impl_from_IMoniker(iface
);
696 FIXME("(%p)->(%p %d %p %p)\n", This
, pbc
, dwReduceHowFar
, ppmkToLeft
, ppmkReduced
);
700 static HRESULT WINAPI
XMLView_Moniker_ComposeWith(IMoniker
*iface
, IMoniker
*pmkRight
,
701 BOOL fOnlyIfNotGeneric
, IMoniker
**ppmkComposite
)
703 Moniker
*This
= impl_from_IMoniker(iface
);
704 FIXME("(%p)->(%p %x %p)\n", This
, pmkRight
, fOnlyIfNotGeneric
, ppmkComposite
);
708 static HRESULT WINAPI
XMLView_Moniker_Enum(IMoniker
*iface
,
709 BOOL fForward
, IEnumMoniker
**ppenumMoniker
)
711 Moniker
*This
= impl_from_IMoniker(iface
);
712 FIXME("(%p)->(%x %p)\n", This
, fForward
, ppenumMoniker
);
716 static HRESULT WINAPI
XMLView_Moniker_IsEqual(IMoniker
*iface
,
717 IMoniker
*pmkOtherMoniker
)
719 Moniker
*This
= impl_from_IMoniker(iface
);
720 FIXME("(%p)->(%p)\n", This
, pmkOtherMoniker
);
724 static HRESULT WINAPI
XMLView_Moniker_Hash(IMoniker
*iface
, DWORD
*pdwHash
)
726 Moniker
*This
= impl_from_IMoniker(iface
);
727 FIXME("(%p)->(%p)\n", This
, pdwHash
);
731 static HRESULT WINAPI
XMLView_Moniker_IsRunning(IMoniker
*iface
, IBindCtx
*pbc
,
732 IMoniker
*pmkToLeft
, IMoniker
*pmkNewlyRunning
)
734 Moniker
*This
= impl_from_IMoniker(iface
);
735 FIXME("(%p)->(%p %p %p)\n", This
, pbc
, pmkToLeft
, pmkNewlyRunning
);
739 static HRESULT WINAPI
XMLView_Moniker_GetTimeOfLastChange(IMoniker
*iface
,
740 IBindCtx
*pbc
, IMoniker
*pmkToLeft
, FILETIME
*pFileTime
)
742 Moniker
*This
= impl_from_IMoniker(iface
);
743 FIXME("(%p)->(%p %p %p)\n", This
, pbc
, pmkToLeft
, pFileTime
);
747 static HRESULT WINAPI
XMLView_Moniker_Inverse(IMoniker
*iface
, IMoniker
**ppmk
)
749 Moniker
*This
= impl_from_IMoniker(iface
);
750 FIXME("(%p)->(%p)\n", This
, ppmk
);
754 static HRESULT WINAPI
XMLView_Moniker_CommonPrefixWith(IMoniker
*iface
,
755 IMoniker
*pmkOther
, IMoniker
**ppmkPrefix
)
757 Moniker
*This
= impl_from_IMoniker(iface
);
758 FIXME("(%p)->(%p %p)\n", This
, pmkOther
, ppmkPrefix
);
762 static HRESULT WINAPI
XMLView_Moniker_RelativePathTo(IMoniker
*iface
,
763 IMoniker
*pmkOther
, IMoniker
**ppmkRelPath
)
765 Moniker
*This
= impl_from_IMoniker(iface
);
766 FIXME("(%p)->(%p %p)\n", This
, pmkOther
, ppmkRelPath
);
770 static HRESULT WINAPI
XMLView_Moniker_GetDisplayName(IMoniker
*iface
,
771 IBindCtx
*pbc
, IMoniker
*pmkToLeft
, LPOLESTR
*ppszDisplayName
)
773 Moniker
*This
= impl_from_IMoniker(iface
);
774 TRACE("(%p)->(%p %p %p)\n", This
, pbc
, pmkToLeft
, ppszDisplayName
);
775 return IMoniker_GetDisplayName(This
->mon
, pbc
, pmkToLeft
, ppszDisplayName
);
778 static HRESULT WINAPI
XMLView_Moniker_ParseDisplayName(IMoniker
*iface
,
779 IBindCtx
*pbc
, IMoniker
*pmkToLeft
, LPOLESTR pszDisplayName
,
780 ULONG
*pchEaten
, IMoniker
**ppmkOut
)
782 Moniker
*This
= impl_from_IMoniker(iface
);
783 FIXME("(%p)->(%p %p %s %p %p)\n", This
, pbc
, pmkToLeft
,
784 debugstr_w(pszDisplayName
), pchEaten
, ppmkOut
);
788 static HRESULT WINAPI
XMLView_Moniker_IsSystemMoniker(
789 IMoniker
*iface
, DWORD
*pdwMksys
)
791 Moniker
*This
= impl_from_IMoniker(iface
);
792 FIXME("(%p)->(%p)\n", This
, pdwMksys
);
796 static IMonikerVtbl XMLView_MonikerVtbl
= {
797 XMLView_Moniker_QueryInterface
,
798 XMLView_Moniker_AddRef
,
799 XMLView_Moniker_Release
,
800 XMLView_Moniker_GetClassID
,
801 XMLView_Moniker_IsDirty
,
802 XMLView_Moniker_Load
,
803 XMLView_Moniker_Save
,
804 XMLView_Moniker_GetSizeMax
,
805 XMLView_Moniker_BindToObject
,
806 XMLView_Moniker_BindToStorage
,
807 XMLView_Moniker_Reduce
,
808 XMLView_Moniker_ComposeWith
,
809 XMLView_Moniker_Enum
,
810 XMLView_Moniker_IsEqual
,
811 XMLView_Moniker_Hash
,
812 XMLView_Moniker_IsRunning
,
813 XMLView_Moniker_GetTimeOfLastChange
,
814 XMLView_Moniker_Inverse
,
815 XMLView_Moniker_CommonPrefixWith
,
816 XMLView_Moniker_RelativePathTo
,
817 XMLView_Moniker_GetDisplayName
,
818 XMLView_Moniker_ParseDisplayName
,
819 XMLView_Moniker_IsSystemMoniker
822 static inline HRESULT
XMLView_Moniker_Create(IMoniker
*mon
,
823 IStream
*stream
, IMoniker
**ret
)
827 wrap
= heap_alloc_zero(sizeof(Moniker
));
829 return E_OUTOFMEMORY
;
831 wrap
->IMoniker_iface
.lpVtbl
= &XMLView_MonikerVtbl
;
835 IMoniker_AddRef(mon
);
836 wrap
->stream
= stream
;
837 IStream_AddRef(stream
);
839 *ret
= &wrap
->IMoniker_iface
;
843 static inline XMLView
* impl_from_IPersistMoniker(IPersistMoniker
*iface
)
845 return CONTAINING_RECORD(iface
, XMLView
, IPersistMoniker_iface
);
848 static HRESULT WINAPI
XMLView_PersistMoniker_QueryInterface(
849 IPersistMoniker
*iface
, REFIID riid
, void **ppvObject
)
851 XMLView
*This
= impl_from_IPersistMoniker(iface
);
853 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
855 if(IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IPersistMoniker
))
856 *ppvObject
= &This
->IPersistMoniker_iface
;
857 else if(IsEqualGUID(riid
, &IID_IPersistHistory
) ||
858 IsEqualGUID(riid
, &IID_IPersist
))
859 *ppvObject
= &This
->IPersistHistory_iface
;
860 else if(IsEqualGUID(riid
, &IID_IOleCommandTarget
))
861 *ppvObject
= &This
->IOleCommandTarget_iface
;
862 else if(IsEqualGUID(riid
, &IID_IOleObject
))
863 *ppvObject
= &This
->IOleObject_iface
;
865 return IUnknown_QueryInterface(This
->html_doc
, riid
, ppvObject
);
867 IPersistMoniker_AddRef(&This
->IPersistMoniker_iface
);
871 static ULONG WINAPI
XMLView_PersistMoniker_AddRef(IPersistMoniker
*iface
)
873 XMLView
*This
= impl_from_IPersistMoniker(iface
);
874 LONG ref
= InterlockedIncrement(&This
->ref
);
876 TRACE("(%p)->(%d)\n", This
, ref
);
881 static ULONG WINAPI
XMLView_PersistMoniker_Release(IPersistMoniker
*iface
)
883 XMLView
*This
= impl_from_IPersistMoniker(iface
);
884 ULONG ref
= InterlockedDecrement(&This
->ref
);
886 TRACE("(%p)->(%d)\n", This
, ref
);
890 IMoniker_Release(This
->mon
);
891 IUnknown_Release(This
->html_doc
);
897 static HRESULT WINAPI
XMLView_PersistMoniker_GetClassID(
898 IPersistMoniker
*iface
, CLSID
*pClassID
)
900 XMLView
*This
= impl_from_IPersistMoniker(iface
);
901 FIXME("(%p)->(%p)\n", This
, pClassID
);
905 static HRESULT WINAPI
XMLView_PersistMoniker_IsDirty(IPersistMoniker
*iface
)
907 XMLView
*This
= impl_from_IPersistMoniker(iface
);
908 FIXME("(%p)\n", This
);
912 static HRESULT WINAPI
XMLView_PersistMoniker_Load(IPersistMoniker
*iface
,
913 BOOL fFullyAvailable
, IMoniker
*pimkName
, LPBC pibc
, DWORD grfMode
)
915 static const WCHAR XSLParametersW
[] = {'X','S','L','P','a','r','a','m','e','t','e','r','s',0};
916 static const WCHAR XMLBufferStreamW
[] = {'X','M','L','B','u','f','f','e','r','S','t','r','e','a','m',0};
917 static const WCHAR DWNBINDINFOW
[] = {'_','_','D','W','N','B','I','N','D','I','N','F','O',0};
918 static const WCHAR HTMLLOADOPTIONSW
[] = {'_','_','H','T','M','L','L','O','A','D','O','P','T','I','O','N','S',0};
919 static const WCHAR BSCBHolderW
[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
921 XMLView
*This
= impl_from_IPersistMoniker(iface
);
922 IPersistMoniker
*html_persist_mon
;
923 IBindStatusCallback
*bsc
, *bsc_html
;
930 TRACE("(%p)->(%x %p %p %x)\n", This
, fFullyAvailable
, pimkName
, pibc
, grfMode
);
932 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)XSLParametersW
, &unk
);
933 if(SUCCEEDED(hres
)) {
934 FIXME("ignoring XSLParameters\n");
935 IUnknown_Release(unk
);
937 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)XMLBufferStreamW
, &unk
);
938 if(SUCCEEDED(hres
)) {
939 FIXME("ignoring XMLBufferStream\n");
940 IUnknown_Release(unk
);
943 hres
= CreateBindCtx(0, &bindctx
);
947 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)DWNBINDINFOW
, &unk
);
948 if(SUCCEEDED(hres
)) {
949 IBindCtx_RegisterObjectParam(bindctx
, (LPOLESTR
)DWNBINDINFOW
, unk
);
950 IUnknown_Release(unk
);
952 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)HTMLLOADOPTIONSW
, &unk
);
953 if(SUCCEEDED(hres
)) {
954 IBindCtx_RegisterObjectParam(bindctx
, (LPOLESTR
)HTMLLOADOPTIONSW
, unk
);
955 IUnknown_Release(unk
);
957 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)SZ_HTML_CLIENTSITE_OBJECTPARAM
, &unk
);
958 if(SUCCEEDED(hres
)) {
959 IBindCtx_RegisterObjectParam(bindctx
, (LPOLESTR
)SZ_HTML_CLIENTSITE_OBJECTPARAM
, unk
);
960 IUnknown_Release(unk
);
963 hres
= CreateStreamOnHGlobal(NULL
, TRUE
, &stream
);
965 IBindCtx_Release(bindctx
);
970 IMoniker_Release(This
->mon
);
971 This
->mon
= pimkName
;
972 IMoniker_AddRef(This
->mon
);
974 hres
= XMLView_Moniker_Create(This
->mon
, stream
, &mon
);
976 IStream_Release(stream
);
977 IBindCtx_Release(bindctx
);
981 hres
= IUnknown_QueryInterface(This
->html_doc
,
982 &IID_IPersistMoniker
, (void**)&html_persist_mon
);
984 IMoniker_Release(mon
);
985 IStream_Release(stream
);
986 IBindCtx_Release(bindctx
);
990 hres
= IPersistMoniker_Load(html_persist_mon
, FALSE
, mon
, bindctx
, 0);
991 IPersistMoniker_Release(html_persist_mon
);
992 IMoniker_Release(mon
);
994 IStream_Release(stream
);
995 IBindCtx_Release(bindctx
);
999 hres
= IBindCtx_GetObjectParam(bindctx
, (LPOLESTR
)BSCBHolderW
, &unk
);
1000 IBindCtx_Release(bindctx
);
1002 IStream_Release(stream
);
1005 hres
= IUnknown_QueryInterface(unk
, &IID_IBindStatusCallback
, (void**)&bsc_html
);
1006 IUnknown_Release(unk
);
1008 IStream_Release(stream
);
1012 hres
= XMLView_BindStatusCallback_Create(bsc_html
, This
->mon
, stream
, &bsc
);
1013 IStream_Release(stream
);
1015 IBindStatusCallback_OnStopBinding(bsc_html
, hres
, NULL
);
1016 IBindStatusCallback_Release(bsc_html
);
1020 hres
= RegisterBindStatusCallback(pibc
, bsc
, NULL
, 0);
1021 IBindStatusCallback_Release(bsc
);
1023 IBindStatusCallback_OnStopBinding(bsc_html
, hres
, NULL
);
1024 IBindStatusCallback_Release(bsc_html
);
1028 hres
= IMoniker_BindToStorage(pimkName
, pibc
, NULL
,
1029 &IID_IStream
, (void**)&stream
);
1031 IBindStatusCallback_OnStopBinding(bsc_html
, hres
, NULL
);
1032 IBindStatusCallback_Release(bsc_html
);
1037 IStream_Release(stream
);
1038 IBindStatusCallback_Release(bsc_html
);
1042 static HRESULT WINAPI
XMLView_PersistMoniker_Save(IPersistMoniker
*iface
,
1043 IMoniker
*pimkName
, LPBC pbc
, BOOL fRemember
)
1045 XMLView
*This
= impl_from_IPersistMoniker(iface
);
1046 FIXME("(%p)->(%p %p %x)\n", This
, pimkName
, pbc
, fRemember
);
1050 static HRESULT WINAPI
XMLView_PersistMoniker_SaveCompleted(
1051 IPersistMoniker
*iface
, IMoniker
*pimkName
, LPBC pibc
)
1053 XMLView
*This
= impl_from_IPersistMoniker(iface
);
1054 FIXME("(%p)->(%p %p)\n", This
, pimkName
, pibc
);
1058 static HRESULT WINAPI
XMLView_PersistMoniker_GetCurMoniker(
1059 IPersistMoniker
*iface
, IMoniker
**ppimkName
)
1061 XMLView
*This
= impl_from_IPersistMoniker(iface
);
1062 FIXME("(%p)->(%p)\n", This
, ppimkName
);
1066 static IPersistMonikerVtbl XMLView_PersistMonikerVtbl
= {
1067 XMLView_PersistMoniker_QueryInterface
,
1068 XMLView_PersistMoniker_AddRef
,
1069 XMLView_PersistMoniker_Release
,
1070 XMLView_PersistMoniker_GetClassID
,
1071 XMLView_PersistMoniker_IsDirty
,
1072 XMLView_PersistMoniker_Load
,
1073 XMLView_PersistMoniker_Save
,
1074 XMLView_PersistMoniker_SaveCompleted
,
1075 XMLView_PersistMoniker_GetCurMoniker
1078 static inline XMLView
* impl_from_IPersistHistory(IPersistHistory
*iface
)
1080 return CONTAINING_RECORD(iface
, XMLView
, IPersistHistory_iface
);
1083 static HRESULT WINAPI
XMLView_PersistHistory_QueryInterface(
1084 IPersistHistory
*iface
, REFIID riid
, void **ppvObject
)
1086 XMLView
*This
= impl_from_IPersistHistory(iface
);
1087 return IPersistMoniker_QueryInterface(&This
->IPersistMoniker_iface
, riid
, ppvObject
);
1090 static ULONG WINAPI
XMLView_PersistHistory_AddRef(IPersistHistory
*iface
)
1092 XMLView
*This
= impl_from_IPersistHistory(iface
);
1093 return IPersistMoniker_AddRef(&This
->IPersistMoniker_iface
);
1096 static ULONG WINAPI
XMLView_PersistHistory_Release(IPersistHistory
*iface
)
1098 XMLView
*This
= impl_from_IPersistHistory(iface
);
1099 return IPersistMoniker_Release(&This
->IPersistMoniker_iface
);
1102 static HRESULT WINAPI
XMLView_PersistHistory_GetClassID(
1103 IPersistHistory
*iface
, CLSID
*pClassID
)
1105 XMLView
*This
= impl_from_IPersistHistory(iface
);
1106 FIXME("(%p)->(%p)\n", This
, pClassID
);
1110 static HRESULT WINAPI
XMLView_PersistHistory_LoadHistory(
1111 IPersistHistory
*iface
, IStream
*pStream
, IBindCtx
*pbc
)
1113 XMLView
*This
= impl_from_IPersistHistory(iface
);
1114 FIXME("(%p)->(%p %p)\n", This
, pStream
, pbc
);
1118 static HRESULT WINAPI
XMLView_PersistHistory_SaveHistory(
1119 IPersistHistory
*iface
, IStream
*pStream
)
1121 XMLView
*This
= impl_from_IPersistHistory(iface
);
1122 FIXME("(%p)->(%p)\n", This
, pStream
);
1126 static HRESULT WINAPI
XMLView_PersistHistory_SetPositionCookie(
1127 IPersistHistory
*iface
, DWORD dwPositioncookie
)
1129 XMLView
*This
= impl_from_IPersistHistory(iface
);
1130 FIXME("(%p)->(%d)\n", This
, dwPositioncookie
);
1134 static HRESULT WINAPI
XMLView_PersistHistory_GetPositionCookie(
1135 IPersistHistory
*iface
, DWORD
*pdwPositioncookie
)
1137 XMLView
*This
= impl_from_IPersistHistory(iface
);
1138 FIXME("(%p)->(%p)\n", This
, pdwPositioncookie
);
1142 static IPersistHistoryVtbl XMLView_PersistHistoryVtbl
= {
1143 XMLView_PersistHistory_QueryInterface
,
1144 XMLView_PersistHistory_AddRef
,
1145 XMLView_PersistHistory_Release
,
1146 XMLView_PersistHistory_GetClassID
,
1147 XMLView_PersistHistory_LoadHistory
,
1148 XMLView_PersistHistory_SaveHistory
,
1149 XMLView_PersistHistory_SetPositionCookie
,
1150 XMLView_PersistHistory_GetPositionCookie
1153 static inline XMLView
* impl_from_IOleCommandTarget(IOleCommandTarget
*iface
)
1155 return CONTAINING_RECORD(iface
, XMLView
, IOleCommandTarget_iface
);
1158 static HRESULT WINAPI
XMLView_OleCommandTarget_QueryInterface(
1159 IOleCommandTarget
*iface
, REFIID riid
, void **ppvObject
)
1161 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1162 return IPersistMoniker_QueryInterface(&This
->IPersistMoniker_iface
, riid
, ppvObject
);
1165 static ULONG WINAPI
XMLView_OleCommandTarget_AddRef(IOleCommandTarget
*iface
)
1167 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1168 return IPersistMoniker_AddRef(&This
->IPersistMoniker_iface
);
1171 static ULONG WINAPI
XMLView_OleCommandTarget_Release(IOleCommandTarget
*iface
)
1173 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1174 return IPersistMoniker_Release(&This
->IPersistMoniker_iface
);
1177 static HRESULT WINAPI
XMLView_OleCommandTarget_QueryStatus(IOleCommandTarget
*iface
,
1178 const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
1180 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1181 FIXME("(%p)->(%p %x %p %p)\n", This
, pguidCmdGroup
, cCmds
, prgCmds
, pCmdText
);
1185 static HRESULT WINAPI
XMLView_OleCommandTarget_Exec(IOleCommandTarget
*iface
,
1186 const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
,
1187 VARIANT
*pvaIn
, VARIANT
*pvaOut
)
1189 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1190 FIXME("(%p)->(%p %d %x %p %p)\n", This
, pguidCmdGroup
,
1191 nCmdID
, nCmdexecopt
, pvaIn
, pvaOut
);
1195 static IOleCommandTargetVtbl XMLView_OleCommandTargetVtbl
= {
1196 XMLView_OleCommandTarget_QueryInterface
,
1197 XMLView_OleCommandTarget_AddRef
,
1198 XMLView_OleCommandTarget_Release
,
1199 XMLView_OleCommandTarget_QueryStatus
,
1200 XMLView_OleCommandTarget_Exec
1203 static inline XMLView
* impl_from_IOleObject(IOleObject
*iface
)
1205 return CONTAINING_RECORD(iface
, XMLView
, IOleObject_iface
);
1208 static HRESULT WINAPI
XMLView_OleObject_QueryInterface(
1209 IOleObject
*iface
, REFIID riid
, void **ppvObject
)
1211 XMLView
*This
= impl_from_IOleObject(iface
);
1212 return IPersistMoniker_QueryInterface(&This
->IPersistMoniker_iface
, riid
, ppvObject
);
1215 static ULONG WINAPI
XMLView_OleObject_AddRef(IOleObject
*iface
)
1217 XMLView
*This
= impl_from_IOleObject(iface
);
1218 return IPersistMoniker_AddRef(&This
->IPersistMoniker_iface
);
1221 static ULONG WINAPI
XMLView_OleObject_Release(IOleObject
*iface
)
1223 XMLView
*This
= impl_from_IOleObject(iface
);
1224 return IPersistMoniker_Release(&This
->IPersistMoniker_iface
);
1227 static HRESULT WINAPI
XMLView_OleObject_SetClientSite(
1228 IOleObject
*iface
, IOleClientSite
*pClientSite
)
1230 XMLView
*This
= impl_from_IOleObject(iface
);
1231 FIXME("(%p)->(%p)\n", This
, pClientSite
);
1235 static HRESULT WINAPI
XMLView_OleObject_GetClientSite(
1236 IOleObject
*iface
, IOleClientSite
**ppClientSite
)
1238 XMLView
*This
= impl_from_IOleObject(iface
);
1239 FIXME("(%p)->(%p)\n", This
, ppClientSite
);
1243 static HRESULT WINAPI
XMLView_OleObject_SetHostNames(IOleObject
*iface
,
1244 LPCOLESTR szContainerApp
, LPCOLESTR szContainerObj
)
1246 XMLView
*This
= impl_from_IOleObject(iface
);
1247 FIXME("(%p)->(%s %s)\n", This
, debugstr_w(szContainerApp
), debugstr_w(szContainerObj
));
1251 static HRESULT WINAPI
XMLView_OleObject_Close(IOleObject
*iface
, DWORD dwSaveOption
)
1253 XMLView
*This
= impl_from_IOleObject(iface
);
1254 FIXME("(%p)->(%x)\n", This
, dwSaveOption
);
1258 static HRESULT WINAPI
XMLView_OleObject_SetMoniker(IOleObject
*iface
,
1259 DWORD dwWhichMoniker
, IMoniker
*pmk
)
1261 XMLView
*This
= impl_from_IOleObject(iface
);
1262 FIXME("(%p)->(%x %p)\n", This
, dwWhichMoniker
, pmk
);
1266 static HRESULT WINAPI
XMLView_OleObject_GetMoniker(IOleObject
*iface
,
1267 DWORD dwAssign
, DWORD dwWhichMoniker
, IMoniker
**ppmk
)
1269 XMLView
*This
= impl_from_IOleObject(iface
);
1270 FIXME("(%p)->(%x %x %p)\n", This
, dwAssign
, dwWhichMoniker
, ppmk
);
1274 static HRESULT WINAPI
XMLView_OleObject_InitFromData(IOleObject
*iface
,
1275 IDataObject
*pDataObject
, BOOL fCreation
, DWORD dwReserved
)
1277 XMLView
*This
= impl_from_IOleObject(iface
);
1278 FIXME("(%p)->(%p %x %x)\n", This
, pDataObject
, fCreation
, dwReserved
);
1282 static HRESULT WINAPI
XMLView_OleObject_GetClipboardData(IOleObject
*iface
,
1283 DWORD dwReserved
, IDataObject
**ppDataObject
)
1285 XMLView
*This
= impl_from_IOleObject(iface
);
1286 FIXME("(%p)->(%x %p)\n", This
, dwReserved
, ppDataObject
);
1290 static HRESULT WINAPI
XMLView_OleObject_DoVerb(IOleObject
*iface
,
1291 LONG iVerb
, LPMSG lpmsg
, IOleClientSite
*pActiveSite
,
1292 LONG lindex
, HWND hwndParent
, LPCRECT lprcPosRect
)
1294 XMLView
*This
= impl_from_IOleObject(iface
);
1295 FIXME("(%p)->(%d %p %p %d %p %p)\n", This
, iVerb
, lpmsg
,
1296 pActiveSite
, lindex
, hwndParent
, lprcPosRect
);
1300 static HRESULT WINAPI
XMLView_OleObject_EnumVerbs(
1301 IOleObject
*iface
, IEnumOLEVERB
**ppEnumOleVerb
)
1303 XMLView
*This
= impl_from_IOleObject(iface
);
1304 FIXME("(%p)->{%p)\n", This
, ppEnumOleVerb
);
1308 static HRESULT WINAPI
XMLView_OleObject_Update(IOleObject
*iface
)
1310 XMLView
*This
= impl_from_IOleObject(iface
);
1311 FIXME("(%p)\n", This
);
1315 static HRESULT WINAPI
XMLView_OleObject_IsUpToDate(IOleObject
*iface
)
1317 XMLView
*This
= impl_from_IOleObject(iface
);
1318 FIXME("(%p)\n", This
);
1322 static HRESULT WINAPI
XMLView_OleObject_GetUserClassID(IOleObject
*iface
, CLSID
*pClsid
)
1324 XMLView
*This
= impl_from_IOleObject(iface
);
1325 FIXME("(%p)->(%p)\n", This
, pClsid
);
1329 static HRESULT WINAPI
XMLView_OleObject_GetUserType(IOleObject
*iface
,
1330 DWORD dwFormOfType
, LPOLESTR
*pszUserType
)
1332 XMLView
*This
= impl_from_IOleObject(iface
);
1333 FIXME("(%p)->(%x %p)\n", This
, dwFormOfType
, pszUserType
);
1337 static HRESULT WINAPI
XMLView_OleObject_SetExtent(IOleObject
*iface
,
1338 DWORD dwDrawAspect
, SIZEL
*psizel
)
1340 XMLView
*This
= impl_from_IOleObject(iface
);
1341 FIXME("(%p)->(%x %p)\n", This
, dwDrawAspect
, psizel
);
1345 static HRESULT WINAPI
XMLView_OleObject_GetExtent(IOleObject
*iface
,
1346 DWORD dwDrawAspect
, SIZEL
*psizel
)
1348 XMLView
*This
= impl_from_IOleObject(iface
);
1349 FIXME("(%p)->(%x %p)\n", This
, dwDrawAspect
, psizel
);
1353 static HRESULT WINAPI
XMLView_OleObject_Advise(IOleObject
*iface
,
1354 IAdviseSink
*pAdvSink
, DWORD
*pdwConnection
)
1356 XMLView
*This
= impl_from_IOleObject(iface
);
1357 FIXME("(%p)->(%p %p)\n", This
, pAdvSink
, pdwConnection
);
1361 static HRESULT WINAPI
XMLView_OleObject_Unadvise(
1362 IOleObject
*iface
, DWORD dwConnection
)
1364 XMLView
*This
= impl_from_IOleObject(iface
);
1365 FIXME("(%p)->(%d)\n", This
, dwConnection
);
1369 static HRESULT WINAPI
XMLView_OleObject_EnumAdvise(
1370 IOleObject
*iface
, IEnumSTATDATA
**ppenumAdvise
)
1372 XMLView
*This
= impl_from_IOleObject(iface
);
1373 FIXME("(%p)->(%p)\n", This
, ppenumAdvise
);
1377 static HRESULT WINAPI
XMLView_OleObject_GetMiscStatus(
1378 IOleObject
*iface
, DWORD dwAspect
, DWORD
*pdwStatus
)
1380 XMLView
*This
= impl_from_IOleObject(iface
);
1381 FIXME("(%p)->(%d %p)\n", This
, dwAspect
, pdwStatus
);
1385 static HRESULT WINAPI
XMLView_OleObject_SetColorScheme(
1386 IOleObject
*iface
, LOGPALETTE
*pLogpal
)
1388 XMLView
*This
= impl_from_IOleObject(iface
);
1389 FIXME("(%p)->(%p)\n", This
, pLogpal
);
1393 static IOleObjectVtbl XMLView_OleObjectVtbl
= {
1394 XMLView_OleObject_QueryInterface
,
1395 XMLView_OleObject_AddRef
,
1396 XMLView_OleObject_Release
,
1397 XMLView_OleObject_SetClientSite
,
1398 XMLView_OleObject_GetClientSite
,
1399 XMLView_OleObject_SetHostNames
,
1400 XMLView_OleObject_Close
,
1401 XMLView_OleObject_SetMoniker
,
1402 XMLView_OleObject_GetMoniker
,
1403 XMLView_OleObject_InitFromData
,
1404 XMLView_OleObject_GetClipboardData
,
1405 XMLView_OleObject_DoVerb
,
1406 XMLView_OleObject_EnumVerbs
,
1407 XMLView_OleObject_Update
,
1408 XMLView_OleObject_IsUpToDate
,
1409 XMLView_OleObject_GetUserClassID
,
1410 XMLView_OleObject_GetUserType
,
1411 XMLView_OleObject_SetExtent
,
1412 XMLView_OleObject_GetExtent
,
1413 XMLView_OleObject_Advise
,
1414 XMLView_OleObject_Unadvise
,
1415 XMLView_OleObject_EnumAdvise
,
1416 XMLView_OleObject_GetMiscStatus
,
1417 XMLView_OleObject_SetColorScheme
1420 HRESULT
XMLView_create(void **ppObj
)
1425 TRACE("(%p)\n", ppObj
);
1427 This
= heap_alloc_zero(sizeof(*This
));
1429 return E_OUTOFMEMORY
;
1431 This
->IPersistMoniker_iface
.lpVtbl
= &XMLView_PersistMonikerVtbl
;
1432 This
->IPersistHistory_iface
.lpVtbl
= &XMLView_PersistHistoryVtbl
;
1433 This
->IOleCommandTarget_iface
.lpVtbl
= &XMLView_OleCommandTargetVtbl
;
1434 This
->IOleObject_iface
.lpVtbl
= &XMLView_OleObjectVtbl
;
1437 hres
= CoCreateInstance(&CLSID_HTMLDocument
, (IUnknown
*)&This
->IPersistMoniker_iface
,
1438 CLSCTX_INPROC_SERVER
, &IID_IUnknown
, (void**)&This
->html_doc
);
1444 *ppObj
= &This
->IPersistMoniker_iface
;