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
19 #define WIN32_NO_STATUS
27 #define NONAMELESSUNION
30 #include <libxml/parser.h>
43 #include <wine/debug.h>
45 #include "msxml_private.h"
47 WINE_DEFAULT_DEBUG_CHANNEL(msxml
);
53 IPersistMoniker IPersistMoniker_iface
;
54 IPersistHistory IPersistHistory_iface
;
55 IOleCommandTarget IOleCommandTarget_iface
;
56 IOleObject IOleObject_iface
;
66 IMoniker IMoniker_iface
;
75 IBindStatusCallback IBindStatusCallback_iface
;
77 IBindStatusCallback
*bsc
;
85 IBinding IBinding_iface
;
90 static inline Binding
* impl_from_IBinding(IBinding
*iface
)
92 return CONTAINING_RECORD(iface
, Binding
, IBinding_iface
);
95 static HRESULT WINAPI
XMLView_Binding_QueryInterface(
96 IBinding
*iface
, REFIID riid
, void **ppvObject
)
98 Binding
*This
= impl_from_IBinding(iface
);
100 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
102 if(IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IBinding
)) {
104 IBinding_AddRef(iface
);
109 return E_NOINTERFACE
;
112 static ULONG WINAPI
XMLView_Binding_AddRef(IBinding
*iface
)
114 Binding
*This
= impl_from_IBinding(iface
);
115 LONG ref
= InterlockedIncrement(&This
->ref
);
117 TRACE("(%p)->(%d)\n", This
, ref
);
122 static ULONG WINAPI
XMLView_Binding_Release(IBinding
*iface
)
124 Binding
*This
= impl_from_IBinding(iface
);
125 ULONG ref
= InterlockedDecrement(&This
->ref
);
127 TRACE("(%p)->(%d)\n", This
, ref
);
130 IBinding_Release(This
->binding
);
136 static HRESULT WINAPI
XMLView_Binding_Abort(IBinding
*iface
)
138 Binding
*This
= impl_from_IBinding(iface
);
139 TRACE("(%p)\n", This
);
141 return IBinding_Abort(This
->binding
);
144 static HRESULT WINAPI
XMLView_Binding_Suspend(IBinding
*iface
)
146 Binding
*This
= impl_from_IBinding(iface
);
147 FIXME("(%p)\n", This
);
151 static HRESULT WINAPI
XMLView_Binding_Resume(IBinding
*iface
)
153 Binding
*This
= impl_from_IBinding(iface
);
154 FIXME("(%p)\n", This
);
158 static HRESULT WINAPI
XMLView_Binding_SetPriority(
159 IBinding
*iface
, LONG nPriority
)
161 Binding
*This
= impl_from_IBinding(iface
);
162 TRACE("(%p)->(%d)\n", This
, nPriority
);
164 return IBinding_SetPriority(This
->binding
, nPriority
);
167 static HRESULT WINAPI
XMLView_Binding_GetPriority(
168 IBinding
*iface
, LONG
*pnPriority
)
170 Binding
*This
= impl_from_IBinding(iface
);
171 TRACE("(%p)->(%p)\n", This
, pnPriority
);
173 return IBinding_GetPriority(This
->binding
, pnPriority
);
176 static HRESULT WINAPI
XMLView_Binding_GetBindResult(IBinding
*iface
,
177 CLSID
*pclsidProtocol
, DWORD
*pdwResult
, LPOLESTR
*pszResult
,
180 Binding
*This
= impl_from_IBinding(iface
);
181 FIXME("(%p)->(%s %p %p %p)\n", This
, debugstr_guid(pclsidProtocol
),
182 pdwResult
, pszResult
, pdwReserved
);
186 static IBindingVtbl XMLView_BindingVtbl
= {
187 XMLView_Binding_QueryInterface
,
188 XMLView_Binding_AddRef
,
189 XMLView_Binding_Release
,
190 XMLView_Binding_Abort
,
191 XMLView_Binding_Suspend
,
192 XMLView_Binding_Resume
,
193 XMLView_Binding_SetPriority
,
194 XMLView_Binding_GetPriority
,
195 XMLView_Binding_GetBindResult
198 static inline HRESULT
XMLView_Binding_Create(IBinding
*binding
, IBinding
**ret
)
202 bind
= heap_alloc_zero(sizeof(Binding
));
204 return E_OUTOFMEMORY
;
206 bind
->IBinding_iface
.lpVtbl
= &XMLView_BindingVtbl
;
209 bind
->binding
= binding
;
210 IBinding_AddRef(binding
);
212 *ret
= &bind
->IBinding_iface
;
216 static inline BindStatusCallback
* impl_from_IBindStatusCallback(
217 IBindStatusCallback
*iface
)
219 return CONTAINING_RECORD(iface
, BindStatusCallback
,
220 IBindStatusCallback_iface
);
223 static HRESULT WINAPI
XMLView_BindStatusCallback_QueryInterface(
224 IBindStatusCallback
*iface
, REFIID riid
, void **ppvObject
)
226 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
228 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
230 if(IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IBindStatusCallback
)) {
232 IBindStatusCallback_AddRef(iface
);
237 return E_NOINTERFACE
;
240 static ULONG WINAPI
XMLView_BindStatusCallback_AddRef(
241 IBindStatusCallback
*iface
)
243 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
244 LONG ref
= InterlockedIncrement(&This
->ref
);
246 TRACE("(%p)->(%d)\n", This
, ref
);
251 static ULONG WINAPI
XMLView_BindStatusCallback_Release(
252 IBindStatusCallback
*iface
)
254 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
255 ULONG ref
= InterlockedDecrement(&This
->ref
);
257 TRACE("(%p)->(%d)\n", This
, ref
);
261 IStream_Release(This
->stream
);
262 IBindStatusCallback_Release(This
->bsc
);
263 IMoniker_Release(This
->mon
);
269 static HRESULT WINAPI
XMLView_BindStatusCallback_OnStartBinding(
270 IBindStatusCallback
*iface
, DWORD dwReserved
, IBinding
*pib
)
272 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
276 TRACE("(%p)->(%x %p)\n", This
, dwReserved
, pib
);
278 hres
= XMLView_Binding_Create(pib
, &binding
);
284 hres
= IBindStatusCallback_OnStartBinding(This
->bsc
, dwReserved
, binding
);
286 IBinding_Abort(binding
);
290 IBinding_Release(binding
);
294 static HRESULT WINAPI
XMLView_BindStatusCallback_GetPriority(
295 IBindStatusCallback
*iface
, LONG
*pnPriority
)
297 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
298 FIXME("(%p)->(%p)\n", This
, pnPriority
);
302 static HRESULT WINAPI
XMLView_BindStatusCallback_OnLowResource(
303 IBindStatusCallback
*iface
, DWORD reserved
)
305 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
306 FIXME("(%p)->(%x)\n", This
, reserved
);
310 static HRESULT WINAPI
XMLView_BindStatusCallback_OnProgress(
311 IBindStatusCallback
*iface
, ULONG ulProgress
, ULONG ulProgressMax
,
312 ULONG ulStatusCode
, LPCWSTR szStatusText
)
314 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
315 TRACE("(%p)->(%d %d %x %s)\n", This
, ulProgress
, ulProgressMax
,
316 ulStatusCode
, debugstr_w(szStatusText
));
318 switch(ulStatusCode
) {
319 case BINDSTATUS_BEGINDOWNLOADDATA
:
320 return IBindStatusCallback_OnProgress(This
->bsc
, ulProgress
,
321 ulProgressMax
, ulStatusCode
, szStatusText
);
322 case BINDSTATUS_MIMETYPEAVAILABLE
:
325 FIXME("ulStatusCode: %d\n", ulStatusCode
);
330 static HRESULT WINAPI
XMLView_BindStatusCallback_OnStopBinding(
331 IBindStatusCallback
*iface
, HRESULT hresult
, LPCWSTR szError
)
333 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
334 TRACE("(%p)->(%x %s)\n", This
, hresult
, debugstr_w(szError
));
335 return IBindStatusCallback_OnStopBinding(This
->bsc
, hresult
, szError
);
338 static HRESULT WINAPI
XMLView_BindStatusCallback_GetBindInfo(
339 IBindStatusCallback
*iface
, DWORD
*grfBINDF
, BINDINFO
*pbindinfo
)
341 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
342 TRACE("(%p)->(%p %p)\n", This
, grfBINDF
, pbindinfo
);
343 return IBindStatusCallback_GetBindInfo(This
->bsc
, grfBINDF
, pbindinfo
);
346 static inline HRESULT
report_data(BindStatusCallback
*This
)
348 FORMATETC formatetc
= {0, NULL
, 1, -1, TYMED_ISTREAM
};
355 hres
= IStream_Seek(This
->stream
, off
, STREAM_SEEK_CUR
, &size
);
359 hres
= IStream_Seek(This
->stream
, off
, STREAM_SEEK_SET
, NULL
);
363 stgmedium
.tymed
= TYMED_ISTREAM
;
364 stgmedium
.u
.pstm
= This
->stream
;
365 stgmedium
.pUnkForRelease
= NULL
;
367 hres
= IBindStatusCallback_OnDataAvailable(This
->bsc
,
368 BSCF_FIRSTDATANOTIFICATION
|BSCF_LASTDATANOTIFICATION
,
369 size
.u
.LowPart
, &formatetc
, &stgmedium
);
371 IStream_Release(This
->stream
);
376 static inline HRESULT
display_error_page(BindStatusCallback
*This
)
378 FIXME("Error page not implemented yet.\n");
379 return report_data(This
);
382 static inline HRESULT
handle_xml_load(BindStatusCallback
*This
)
384 static const WCHAR selectW
[] = {'p','r','o','c','e','s','s','i','n','g','-',
385 'i','n','s','t','r','u','c','t','i','o','n','(','\'','x','m','l',
386 '-','s','t','y','l','e','s','h','e','e','t','\'',')',0};
387 static const WCHAR hrefW
[] = {'h','r','e','f','=',0};
389 IXMLDOMDocument3
*xml
= NULL
, *xsl
= NULL
;
390 IXMLDOMNode
*stylesheet
;
397 WCHAR
*href
= NULL
, *p
;
402 hres
= IStream_Seek(This
->stream
, off
, STREAM_SEEK_SET
, NULL
);
404 return display_error_page(This
);
406 hres
= DOMDocument_create(MSXML_DEFAULT
, NULL
, (void**)&xml
);
408 return display_error_page(This
);
410 V_VT(&var
) = VT_UNKNOWN
;
411 V_UNKNOWN(&var
) = (IUnknown
*)This
->stream
;
412 hres
= IXMLDOMDocument3_load(xml
, var
, &succ
);
413 if(FAILED(hres
) || !succ
) {
414 IXMLDOMDocument3_Release(xml
);
415 return display_error_page(This
);
417 V_VT(&var
) = VT_EMPTY
;
419 bstr
= SysAllocString(selectW
);
420 hres
= IXMLDOMDocument3_selectSingleNode(xml
, bstr
, &stylesheet
);
423 IXMLDOMDocument3_Release(xml
);
424 return display_error_page(This
);
427 hres
= IXMLDOMNode_get_nodeValue(stylesheet
, &var
);
428 IXMLDOMNode_Release(stylesheet
);
429 if(SUCCEEDED(hres
) && V_VT(&var
)!=VT_BSTR
) {
430 FIXME("Variant type %d not supported\n", V_VT(&var
));
435 IXMLDOMDocument3_Release(xml
);
436 return display_error_page(This
);
439 /* TODO: fix parsing processing instruction value */
440 if((p
= strstrW(V_BSTR(&var
), hrefW
))) {
441 p
+= sizeof(hrefW
)/sizeof(WCHAR
)-1;
442 if(*p
!='\'' && *p
!='\"') p
= NULL
;
445 p
= strchrW(href
, *p
);
452 IXMLDOMDocument3_Release(xml
);
453 return display_error_page(This
);
456 hres
= CreateURLMonikerEx(This
->mon
, href
, &mon
, 0);
459 IXMLDOMDocument3_Release(xml
);
460 return display_error_page(This
);
463 hres
= CreateBindCtx(0, &pbc
);
464 if(SUCCEEDED(hres
)) {
465 hres
= IMoniker_GetDisplayName(mon
, pbc
, NULL
, &xsl_url
);
466 IMoniker_Release(mon
);
467 IBindCtx_Release(pbc
);
470 IXMLDOMDocument3_Release(xml
);
471 return display_error_page(This
);
474 V_VT(&var
) = VT_BSTR
;
475 V_BSTR(&var
) = SysAllocString(xsl_url
);
476 CoTaskMemFree(xsl_url
);
478 IXMLDOMDocument3_Release(xml
);
479 return display_error_page(This
);
482 hres
= DOMDocument_create(MSXML_DEFAULT
, NULL
, (void**)&xsl
);
485 IXMLDOMDocument3_Release(xml
);
486 return display_error_page(This
);
489 /* TODO: do the binding asynchronously */
490 hres
= IXMLDOMDocument3_load(xsl
, var
, &succ
);
492 if(FAILED(hres
) || !succ
) {
493 IXMLDOMDocument3_Release(xsl
);
494 IXMLDOMDocument3_Release(xml
);
495 return display_error_page(This
);
498 hres
= IXMLDOMDocument3_transformNode(xml
, (IXMLDOMNode
*)xsl
, &bstr
);
499 IXMLDOMDocument3_Release(xsl
);
500 IXMLDOMDocument3_Release(xml
);
502 return display_error_page(This
);
504 hres
= IStream_Seek(This
->stream
, off
, STREAM_SEEK_SET
, NULL
);
507 return display_error_page(This
);
510 hres
= IStream_Write(This
->stream
, (BYTE
*)bstr
,
511 SysStringLen(bstr
)*sizeof(WCHAR
), NULL
);
514 return display_error_page(This
);
516 return report_data(This
);
519 static HRESULT WINAPI
XMLView_BindStatusCallback_OnDataAvailable(
520 IBindStatusCallback
*iface
, DWORD grfBSCF
, DWORD dwSize
,
521 FORMATETC
*pformatetc
, STGMEDIUM
*pstgmed
)
523 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
528 TRACE("(%p)->(%x %d %p %p)\n", This
, grfBSCF
, dwSize
, pformatetc
, pstgmed
);
534 hres
= IStream_Read(pstgmed
->u
.pstm
, buf
, sizeof(buf
), &size
);
535 IStream_Write(This
->stream
, buf
, size
, &size
);
536 } while(hres
==S_OK
&& size
);
538 if(FAILED(hres
) && hres
!=E_PENDING
)
543 return handle_xml_load(This
);
546 static HRESULT WINAPI
XMLView_BindStatusCallback_OnObjectAvailable(
547 IBindStatusCallback
*iface
, REFIID riid
, IUnknown
*punk
)
549 BindStatusCallback
*This
= impl_from_IBindStatusCallback(iface
);
550 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), punk
);
554 static IBindStatusCallbackVtbl XMLView_BindStatusCallbackVtbl
= {
555 XMLView_BindStatusCallback_QueryInterface
,
556 XMLView_BindStatusCallback_AddRef
,
557 XMLView_BindStatusCallback_Release
,
558 XMLView_BindStatusCallback_OnStartBinding
,
559 XMLView_BindStatusCallback_GetPriority
,
560 XMLView_BindStatusCallback_OnLowResource
,
561 XMLView_BindStatusCallback_OnProgress
,
562 XMLView_BindStatusCallback_OnStopBinding
,
563 XMLView_BindStatusCallback_GetBindInfo
,
564 XMLView_BindStatusCallback_OnDataAvailable
,
565 XMLView_BindStatusCallback_OnObjectAvailable
568 static inline HRESULT
XMLView_BindStatusCallback_Create(IBindStatusCallback
*bsc_html
,
569 IMoniker
*mon
, IStream
*stream
, IBindStatusCallback
**ret
)
571 BindStatusCallback
*bsc
;
573 bsc
= heap_alloc_zero(sizeof(BindStatusCallback
));
575 return E_OUTOFMEMORY
;
577 bsc
->IBindStatusCallback_iface
.lpVtbl
= &XMLView_BindStatusCallbackVtbl
;
581 IBindStatusCallback_AddRef(bsc_html
);
582 bsc
->stream
= stream
;
583 IStream_AddRef(bsc
->stream
);
585 IMoniker_AddRef(mon
);
587 *ret
= &bsc
->IBindStatusCallback_iface
;
591 static inline Moniker
* impl_from_IMoniker(IMoniker
*iface
)
593 return CONTAINING_RECORD(iface
, Moniker
, IMoniker_iface
);
596 static HRESULT WINAPI
XMLView_Moniker_QueryInterface(
597 IMoniker
*iface
, REFIID riid
, void **ppvObject
)
599 Moniker
*This
= impl_from_IMoniker(iface
);
601 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
603 if(IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IPersist
)
604 || IsEqualGUID(riid
, &IID_IPersistStream
) || IsEqualGUID(riid
, &IID_IMoniker
)) {
606 IMoniker_AddRef(iface
);
611 return E_NOINTERFACE
;
614 static ULONG WINAPI
XMLView_Moniker_AddRef(IMoniker
*iface
)
616 Moniker
*This
= impl_from_IMoniker(iface
);
617 LONG ref
= InterlockedIncrement(&This
->ref
);
619 TRACE("(%p)->(%d)\n", This
, ref
);
624 static ULONG WINAPI
XMLView_Moniker_Release(IMoniker
*iface
)
626 Moniker
*This
= impl_from_IMoniker(iface
);
627 ULONG ref
= InterlockedDecrement(&This
->ref
);
629 TRACE("(%p)->(%d)\n", This
, ref
);
632 IMoniker_Release(This
->mon
);
638 static HRESULT WINAPI
XMLView_Moniker_GetClassID(IMoniker
*iface
, CLSID
*pClassID
)
640 Moniker
*This
= impl_from_IMoniker(iface
);
641 FIXME("(%p)->(%p)\n", This
, pClassID
);
645 static HRESULT WINAPI
XMLView_Moniker_IsDirty(IMoniker
*iface
)
647 Moniker
*This
= impl_from_IMoniker(iface
);
648 FIXME("(%p)\n", This
);
652 static HRESULT WINAPI
XMLView_Moniker_Load(IMoniker
*iface
, IStream
*pStm
)
654 Moniker
*This
= impl_from_IMoniker(iface
);
655 FIXME("(%p)->(%p)\n", This
, pStm
);
659 static HRESULT WINAPI
XMLView_Moniker_Save(IMoniker
*iface
,
660 IStream
*pStm
, BOOL fClearDirty
)
662 Moniker
*This
= impl_from_IMoniker(iface
);
663 FIXME("(%p)->(%p %x)\n", This
, pStm
, fClearDirty
);
667 static HRESULT WINAPI
XMLView_Moniker_GetSizeMax(
668 IMoniker
*iface
, ULARGE_INTEGER
*pcbSize
)
670 Moniker
*This
= impl_from_IMoniker(iface
);
671 FIXME("(%p)->(%p)\n", This
, pcbSize
);
675 static HRESULT WINAPI
XMLView_Moniker_BindToObject(IMoniker
*iface
, IBindCtx
*pbc
,
676 IMoniker
*pmkToLeft
, REFIID riidResult
, void **ppvResult
)
678 Moniker
*This
= impl_from_IMoniker(iface
);
679 FIXME("(%p)->(%p %p %s %p)\n", This
, pbc
, pmkToLeft
,
680 debugstr_guid(riidResult
), ppvResult
);
684 static HRESULT WINAPI
XMLView_Moniker_BindToStorage(IMoniker
*iface
, IBindCtx
*pbc
,
685 IMoniker
*pmkToLeft
, REFIID riid
, void **ppvObj
)
687 Moniker
*This
= impl_from_IMoniker(iface
);
689 TRACE("(%p)->(%p %p %s %p)\n", This
, pbc
, pmkToLeft
, debugstr_guid(riid
), ppvObj
);
691 if(IsEqualGUID(riid
, &IID_IStream
)) {
695 *ppvObj
= This
->stream
;
697 return S_ASYNCHRONOUS
;
703 static HRESULT WINAPI
XMLView_Moniker_Reduce(IMoniker
*iface
, IBindCtx
*pbc
,
704 DWORD dwReduceHowFar
, IMoniker
**ppmkToLeft
, IMoniker
**ppmkReduced
)
706 Moniker
*This
= impl_from_IMoniker(iface
);
707 FIXME("(%p)->(%p %d %p %p)\n", This
, pbc
, dwReduceHowFar
, ppmkToLeft
, ppmkReduced
);
711 static HRESULT WINAPI
XMLView_Moniker_ComposeWith(IMoniker
*iface
, IMoniker
*pmkRight
,
712 BOOL fOnlyIfNotGeneric
, IMoniker
**ppmkComposite
)
714 Moniker
*This
= impl_from_IMoniker(iface
);
715 FIXME("(%p)->(%p %x %p)\n", This
, pmkRight
, fOnlyIfNotGeneric
, ppmkComposite
);
719 static HRESULT WINAPI
XMLView_Moniker_Enum(IMoniker
*iface
,
720 BOOL fForward
, IEnumMoniker
**ppenumMoniker
)
722 Moniker
*This
= impl_from_IMoniker(iface
);
723 FIXME("(%p)->(%x %p)\n", This
, fForward
, ppenumMoniker
);
727 static HRESULT WINAPI
XMLView_Moniker_IsEqual(IMoniker
*iface
,
728 IMoniker
*pmkOtherMoniker
)
730 Moniker
*This
= impl_from_IMoniker(iface
);
731 FIXME("(%p)->(%p)\n", This
, pmkOtherMoniker
);
735 static HRESULT WINAPI
XMLView_Moniker_Hash(IMoniker
*iface
, DWORD
*pdwHash
)
737 Moniker
*This
= impl_from_IMoniker(iface
);
738 FIXME("(%p)->(%p)\n", This
, pdwHash
);
742 static HRESULT WINAPI
XMLView_Moniker_IsRunning(IMoniker
*iface
, IBindCtx
*pbc
,
743 IMoniker
*pmkToLeft
, IMoniker
*pmkNewlyRunning
)
745 Moniker
*This
= impl_from_IMoniker(iface
);
746 FIXME("(%p)->(%p %p %p)\n", This
, pbc
, pmkToLeft
, pmkNewlyRunning
);
750 static HRESULT WINAPI
XMLView_Moniker_GetTimeOfLastChange(IMoniker
*iface
,
751 IBindCtx
*pbc
, IMoniker
*pmkToLeft
, FILETIME
*pFileTime
)
753 Moniker
*This
= impl_from_IMoniker(iface
);
754 FIXME("(%p)->(%p %p %p)\n", This
, pbc
, pmkToLeft
, pFileTime
);
758 static HRESULT WINAPI
XMLView_Moniker_Inverse(IMoniker
*iface
, IMoniker
**ppmk
)
760 Moniker
*This
= impl_from_IMoniker(iface
);
761 FIXME("(%p)->(%p)\n", This
, ppmk
);
765 static HRESULT WINAPI
XMLView_Moniker_CommonPrefixWith(IMoniker
*iface
,
766 IMoniker
*pmkOther
, IMoniker
**ppmkPrefix
)
768 Moniker
*This
= impl_from_IMoniker(iface
);
769 FIXME("(%p)->(%p %p)\n", This
, pmkOther
, ppmkPrefix
);
773 static HRESULT WINAPI
XMLView_Moniker_RelativePathTo(IMoniker
*iface
,
774 IMoniker
*pmkOther
, IMoniker
**ppmkRelPath
)
776 Moniker
*This
= impl_from_IMoniker(iface
);
777 FIXME("(%p)->(%p %p)\n", This
, pmkOther
, ppmkRelPath
);
781 static HRESULT WINAPI
XMLView_Moniker_GetDisplayName(IMoniker
*iface
,
782 IBindCtx
*pbc
, IMoniker
*pmkToLeft
, LPOLESTR
*ppszDisplayName
)
784 Moniker
*This
= impl_from_IMoniker(iface
);
785 TRACE("(%p)->(%p %p %p)\n", This
, pbc
, pmkToLeft
, ppszDisplayName
);
786 return IMoniker_GetDisplayName(This
->mon
, pbc
, pmkToLeft
, ppszDisplayName
);
789 static HRESULT WINAPI
XMLView_Moniker_ParseDisplayName(IMoniker
*iface
,
790 IBindCtx
*pbc
, IMoniker
*pmkToLeft
, LPOLESTR pszDisplayName
,
791 ULONG
*pchEaten
, IMoniker
**ppmkOut
)
793 Moniker
*This
= impl_from_IMoniker(iface
);
794 FIXME("(%p)->(%p %p %s %p %p)\n", This
, pbc
, pmkToLeft
,
795 debugstr_w(pszDisplayName
), pchEaten
, ppmkOut
);
799 static HRESULT WINAPI
XMLView_Moniker_IsSystemMoniker(
800 IMoniker
*iface
, DWORD
*pdwMksys
)
802 Moniker
*This
= impl_from_IMoniker(iface
);
803 FIXME("(%p)->(%p)\n", This
, pdwMksys
);
807 static IMonikerVtbl XMLView_MonikerVtbl
= {
808 XMLView_Moniker_QueryInterface
,
809 XMLView_Moniker_AddRef
,
810 XMLView_Moniker_Release
,
811 XMLView_Moniker_GetClassID
,
812 XMLView_Moniker_IsDirty
,
813 XMLView_Moniker_Load
,
814 XMLView_Moniker_Save
,
815 XMLView_Moniker_GetSizeMax
,
816 XMLView_Moniker_BindToObject
,
817 XMLView_Moniker_BindToStorage
,
818 XMLView_Moniker_Reduce
,
819 XMLView_Moniker_ComposeWith
,
820 XMLView_Moniker_Enum
,
821 XMLView_Moniker_IsEqual
,
822 XMLView_Moniker_Hash
,
823 XMLView_Moniker_IsRunning
,
824 XMLView_Moniker_GetTimeOfLastChange
,
825 XMLView_Moniker_Inverse
,
826 XMLView_Moniker_CommonPrefixWith
,
827 XMLView_Moniker_RelativePathTo
,
828 XMLView_Moniker_GetDisplayName
,
829 XMLView_Moniker_ParseDisplayName
,
830 XMLView_Moniker_IsSystemMoniker
833 static inline HRESULT
XMLView_Moniker_Create(IMoniker
*mon
,
834 IStream
*stream
, IMoniker
**ret
)
838 wrap
= heap_alloc_zero(sizeof(Moniker
));
840 return E_OUTOFMEMORY
;
842 wrap
->IMoniker_iface
.lpVtbl
= &XMLView_MonikerVtbl
;
846 IMoniker_AddRef(mon
);
847 wrap
->stream
= stream
;
848 IStream_AddRef(stream
);
850 *ret
= &wrap
->IMoniker_iface
;
854 static inline XMLView
* impl_from_IPersistMoniker(IPersistMoniker
*iface
)
856 return CONTAINING_RECORD(iface
, XMLView
, IPersistMoniker_iface
);
859 static HRESULT WINAPI
XMLView_PersistMoniker_QueryInterface(
860 IPersistMoniker
*iface
, REFIID riid
, void **ppvObject
)
862 XMLView
*This
= impl_from_IPersistMoniker(iface
);
864 TRACE("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppvObject
);
866 if(IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IPersistMoniker
))
867 *ppvObject
= &This
->IPersistMoniker_iface
;
868 else if(IsEqualGUID(riid
, &IID_IPersistHistory
) ||
869 IsEqualGUID(riid
, &IID_IPersist
))
870 *ppvObject
= &This
->IPersistHistory_iface
;
871 else if(IsEqualGUID(riid
, &IID_IOleCommandTarget
))
872 *ppvObject
= &This
->IOleCommandTarget_iface
;
873 else if(IsEqualGUID(riid
, &IID_IOleObject
))
874 *ppvObject
= &This
->IOleObject_iface
;
876 return IUnknown_QueryInterface(This
->html_doc
, riid
, ppvObject
);
878 IPersistMoniker_AddRef(&This
->IPersistMoniker_iface
);
882 static ULONG WINAPI
XMLView_PersistMoniker_AddRef(IPersistMoniker
*iface
)
884 XMLView
*This
= impl_from_IPersistMoniker(iface
);
885 LONG ref
= InterlockedIncrement(&This
->ref
);
887 TRACE("(%p)->(%d)\n", This
, ref
);
892 static ULONG WINAPI
XMLView_PersistMoniker_Release(IPersistMoniker
*iface
)
894 XMLView
*This
= impl_from_IPersistMoniker(iface
);
895 ULONG ref
= InterlockedDecrement(&This
->ref
);
897 TRACE("(%p)->(%d)\n", This
, ref
);
901 IMoniker_Release(This
->mon
);
902 IUnknown_Release(This
->html_doc
);
908 static HRESULT WINAPI
XMLView_PersistMoniker_GetClassID(
909 IPersistMoniker
*iface
, CLSID
*pClassID
)
911 XMLView
*This
= impl_from_IPersistMoniker(iface
);
912 FIXME("(%p)->(%p)\n", This
, pClassID
);
916 static HRESULT WINAPI
XMLView_PersistMoniker_IsDirty(IPersistMoniker
*iface
)
918 XMLView
*This
= impl_from_IPersistMoniker(iface
);
919 FIXME("(%p)\n", This
);
923 static HRESULT WINAPI
XMLView_PersistMoniker_Load(IPersistMoniker
*iface
,
924 BOOL fFullyAvailable
, IMoniker
*pimkName
, LPBC pibc
, DWORD grfMode
)
926 static const WCHAR XSLParametersW
[] = {'X','S','L','P','a','r','a','m','e','t','e','r','s',0};
927 static const WCHAR XMLBufferStreamW
[] = {'X','M','L','B','u','f','f','e','r','S','t','r','e','a','m',0};
928 static const WCHAR DWNBINDINFOW
[] = {'_','_','D','W','N','B','I','N','D','I','N','F','O',0};
929 static const WCHAR HTMLLOADOPTIONSW
[] = {'_','_','H','T','M','L','L','O','A','D','O','P','T','I','O','N','S',0};
930 static const WCHAR BSCBHolderW
[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 };
932 XMLView
*This
= impl_from_IPersistMoniker(iface
);
933 IPersistMoniker
*html_persist_mon
;
934 IBindStatusCallback
*bsc
, *bsc_html
;
941 TRACE("(%p)->(%x %p %p %x)\n", This
, fFullyAvailable
, pimkName
, pibc
, grfMode
);
943 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)XSLParametersW
, &unk
);
944 if(SUCCEEDED(hres
)) {
945 FIXME("ignoring XSLParameters\n");
946 IUnknown_Release(unk
);
948 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)XMLBufferStreamW
, &unk
);
949 if(SUCCEEDED(hres
)) {
950 FIXME("ignoring XMLBufferStream\n");
951 IUnknown_Release(unk
);
954 hres
= CreateBindCtx(0, &bindctx
);
958 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)DWNBINDINFOW
, &unk
);
959 if(SUCCEEDED(hres
)) {
960 IBindCtx_RegisterObjectParam(bindctx
, (LPOLESTR
)DWNBINDINFOW
, unk
);
961 IUnknown_Release(unk
);
963 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)HTMLLOADOPTIONSW
, &unk
);
964 if(SUCCEEDED(hres
)) {
965 IBindCtx_RegisterObjectParam(bindctx
, (LPOLESTR
)HTMLLOADOPTIONSW
, unk
);
966 IUnknown_Release(unk
);
968 hres
= IBindCtx_GetObjectParam(pibc
, (LPOLESTR
)SZ_HTML_CLIENTSITE_OBJECTPARAM
, &unk
);
969 if(SUCCEEDED(hres
)) {
970 IBindCtx_RegisterObjectParam(bindctx
, (LPOLESTR
)SZ_HTML_CLIENTSITE_OBJECTPARAM
, unk
);
971 IUnknown_Release(unk
);
974 hres
= CreateStreamOnHGlobal(NULL
, TRUE
, &stream
);
976 IBindCtx_Release(bindctx
);
981 IMoniker_Release(This
->mon
);
982 This
->mon
= pimkName
;
983 IMoniker_AddRef(This
->mon
);
985 hres
= XMLView_Moniker_Create(This
->mon
, stream
, &mon
);
987 IStream_Release(stream
);
988 IBindCtx_Release(bindctx
);
992 hres
= IUnknown_QueryInterface(This
->html_doc
,
993 &IID_IPersistMoniker
, (void**)&html_persist_mon
);
995 IMoniker_Release(mon
);
996 IStream_Release(stream
);
997 IBindCtx_Release(bindctx
);
1001 hres
= IPersistMoniker_Load(html_persist_mon
, FALSE
, mon
, bindctx
, 0);
1002 IPersistMoniker_Release(html_persist_mon
);
1003 IMoniker_Release(mon
);
1005 IStream_Release(stream
);
1006 IBindCtx_Release(bindctx
);
1010 hres
= IBindCtx_GetObjectParam(bindctx
, (LPOLESTR
)BSCBHolderW
, &unk
);
1011 IBindCtx_Release(bindctx
);
1013 IStream_Release(stream
);
1016 hres
= IUnknown_QueryInterface(unk
, &IID_IBindStatusCallback
, (void**)&bsc_html
);
1017 IUnknown_Release(unk
);
1019 IStream_Release(stream
);
1023 hres
= XMLView_BindStatusCallback_Create(bsc_html
, This
->mon
, stream
, &bsc
);
1024 IStream_Release(stream
);
1026 IBindStatusCallback_OnStopBinding(bsc_html
, hres
, NULL
);
1027 IBindStatusCallback_Release(bsc_html
);
1031 hres
= RegisterBindStatusCallback(pibc
, bsc
, NULL
, 0);
1032 IBindStatusCallback_Release(bsc
);
1034 IBindStatusCallback_OnStopBinding(bsc_html
, hres
, NULL
);
1035 IBindStatusCallback_Release(bsc_html
);
1039 hres
= IMoniker_BindToStorage(pimkName
, pibc
, NULL
,
1040 &IID_IStream
, (void**)&stream
);
1042 IBindStatusCallback_OnStopBinding(bsc_html
, hres
, NULL
);
1043 IBindStatusCallback_Release(bsc_html
);
1048 IStream_Release(stream
);
1049 IBindStatusCallback_Release(bsc_html
);
1053 static HRESULT WINAPI
XMLView_PersistMoniker_Save(IPersistMoniker
*iface
,
1054 IMoniker
*pimkName
, LPBC pbc
, BOOL fRemember
)
1056 XMLView
*This
= impl_from_IPersistMoniker(iface
);
1057 FIXME("(%p)->(%p %p %x)\n", This
, pimkName
, pbc
, fRemember
);
1061 static HRESULT WINAPI
XMLView_PersistMoniker_SaveCompleted(
1062 IPersistMoniker
*iface
, IMoniker
*pimkName
, LPBC pibc
)
1064 XMLView
*This
= impl_from_IPersistMoniker(iface
);
1065 FIXME("(%p)->(%p %p)\n", This
, pimkName
, pibc
);
1069 static HRESULT WINAPI
XMLView_PersistMoniker_GetCurMoniker(
1070 IPersistMoniker
*iface
, IMoniker
**ppimkName
)
1072 XMLView
*This
= impl_from_IPersistMoniker(iface
);
1073 FIXME("(%p)->(%p)\n", This
, ppimkName
);
1077 static IPersistMonikerVtbl XMLView_PersistMonikerVtbl
= {
1078 XMLView_PersistMoniker_QueryInterface
,
1079 XMLView_PersistMoniker_AddRef
,
1080 XMLView_PersistMoniker_Release
,
1081 XMLView_PersistMoniker_GetClassID
,
1082 XMLView_PersistMoniker_IsDirty
,
1083 XMLView_PersistMoniker_Load
,
1084 XMLView_PersistMoniker_Save
,
1085 XMLView_PersistMoniker_SaveCompleted
,
1086 XMLView_PersistMoniker_GetCurMoniker
1089 static inline XMLView
* impl_from_IPersistHistory(IPersistHistory
*iface
)
1091 return CONTAINING_RECORD(iface
, XMLView
, IPersistHistory_iface
);
1094 static HRESULT WINAPI
XMLView_PersistHistory_QueryInterface(
1095 IPersistHistory
*iface
, REFIID riid
, void **ppvObject
)
1097 XMLView
*This
= impl_from_IPersistHistory(iface
);
1098 return IPersistMoniker_QueryInterface(&This
->IPersistMoniker_iface
, riid
, ppvObject
);
1101 static ULONG WINAPI
XMLView_PersistHistory_AddRef(IPersistHistory
*iface
)
1103 XMLView
*This
= impl_from_IPersistHistory(iface
);
1104 return IPersistMoniker_AddRef(&This
->IPersistMoniker_iface
);
1107 static ULONG WINAPI
XMLView_PersistHistory_Release(IPersistHistory
*iface
)
1109 XMLView
*This
= impl_from_IPersistHistory(iface
);
1110 return IPersistMoniker_Release(&This
->IPersistMoniker_iface
);
1113 static HRESULT WINAPI
XMLView_PersistHistory_GetClassID(
1114 IPersistHistory
*iface
, CLSID
*pClassID
)
1116 XMLView
*This
= impl_from_IPersistHistory(iface
);
1117 FIXME("(%p)->(%p)\n", This
, pClassID
);
1121 static HRESULT WINAPI
XMLView_PersistHistory_LoadHistory(
1122 IPersistHistory
*iface
, IStream
*pStream
, IBindCtx
*pbc
)
1124 XMLView
*This
= impl_from_IPersistHistory(iface
);
1125 FIXME("(%p)->(%p %p)\n", This
, pStream
, pbc
);
1129 static HRESULT WINAPI
XMLView_PersistHistory_SaveHistory(
1130 IPersistHistory
*iface
, IStream
*pStream
)
1132 XMLView
*This
= impl_from_IPersistHistory(iface
);
1133 FIXME("(%p)->(%p)\n", This
, pStream
);
1137 static HRESULT WINAPI
XMLView_PersistHistory_SetPositionCookie(
1138 IPersistHistory
*iface
, DWORD dwPositioncookie
)
1140 XMLView
*This
= impl_from_IPersistHistory(iface
);
1141 FIXME("(%p)->(%d)\n", This
, dwPositioncookie
);
1145 static HRESULT WINAPI
XMLView_PersistHistory_GetPositionCookie(
1146 IPersistHistory
*iface
, DWORD
*pdwPositioncookie
)
1148 XMLView
*This
= impl_from_IPersistHistory(iface
);
1149 FIXME("(%p)->(%p)\n", This
, pdwPositioncookie
);
1153 static IPersistHistoryVtbl XMLView_PersistHistoryVtbl
= {
1154 XMLView_PersistHistory_QueryInterface
,
1155 XMLView_PersistHistory_AddRef
,
1156 XMLView_PersistHistory_Release
,
1157 XMLView_PersistHistory_GetClassID
,
1158 XMLView_PersistHistory_LoadHistory
,
1159 XMLView_PersistHistory_SaveHistory
,
1160 XMLView_PersistHistory_SetPositionCookie
,
1161 XMLView_PersistHistory_GetPositionCookie
1164 static inline XMLView
* impl_from_IOleCommandTarget(IOleCommandTarget
*iface
)
1166 return CONTAINING_RECORD(iface
, XMLView
, IOleCommandTarget_iface
);
1169 static HRESULT WINAPI
XMLView_OleCommandTarget_QueryInterface(
1170 IOleCommandTarget
*iface
, REFIID riid
, void **ppvObject
)
1172 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1173 return IPersistMoniker_QueryInterface(&This
->IPersistMoniker_iface
, riid
, ppvObject
);
1176 static ULONG WINAPI
XMLView_OleCommandTarget_AddRef(IOleCommandTarget
*iface
)
1178 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1179 return IPersistMoniker_AddRef(&This
->IPersistMoniker_iface
);
1182 static ULONG WINAPI
XMLView_OleCommandTarget_Release(IOleCommandTarget
*iface
)
1184 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1185 return IPersistMoniker_Release(&This
->IPersistMoniker_iface
);
1188 static HRESULT WINAPI
XMLView_OleCommandTarget_QueryStatus(IOleCommandTarget
*iface
,
1189 const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
1191 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1192 FIXME("(%p)->(%p %x %p %p)\n", This
, pguidCmdGroup
, cCmds
, prgCmds
, pCmdText
);
1196 static HRESULT WINAPI
XMLView_OleCommandTarget_Exec(IOleCommandTarget
*iface
,
1197 const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
,
1198 VARIANT
*pvaIn
, VARIANT
*pvaOut
)
1200 XMLView
*This
= impl_from_IOleCommandTarget(iface
);
1201 FIXME("(%p)->(%p %d %x %p %p)\n", This
, pguidCmdGroup
,
1202 nCmdID
, nCmdexecopt
, pvaIn
, pvaOut
);
1206 static IOleCommandTargetVtbl XMLView_OleCommandTargetVtbl
= {
1207 XMLView_OleCommandTarget_QueryInterface
,
1208 XMLView_OleCommandTarget_AddRef
,
1209 XMLView_OleCommandTarget_Release
,
1210 XMLView_OleCommandTarget_QueryStatus
,
1211 XMLView_OleCommandTarget_Exec
1214 static inline XMLView
* impl_from_IOleObject(IOleObject
*iface
)
1216 return CONTAINING_RECORD(iface
, XMLView
, IOleObject_iface
);
1219 static HRESULT WINAPI
XMLView_OleObject_QueryInterface(
1220 IOleObject
*iface
, REFIID riid
, void **ppvObject
)
1222 XMLView
*This
= impl_from_IOleObject(iface
);
1223 return IPersistMoniker_QueryInterface(&This
->IPersistMoniker_iface
, riid
, ppvObject
);
1226 static ULONG WINAPI
XMLView_OleObject_AddRef(IOleObject
*iface
)
1228 XMLView
*This
= impl_from_IOleObject(iface
);
1229 return IPersistMoniker_AddRef(&This
->IPersistMoniker_iface
);
1232 static ULONG WINAPI
XMLView_OleObject_Release(IOleObject
*iface
)
1234 XMLView
*This
= impl_from_IOleObject(iface
);
1235 return IPersistMoniker_Release(&This
->IPersistMoniker_iface
);
1238 static HRESULT WINAPI
XMLView_OleObject_SetClientSite(
1239 IOleObject
*iface
, IOleClientSite
*pClientSite
)
1241 XMLView
*This
= impl_from_IOleObject(iface
);
1242 FIXME("(%p)->(%p)\n", This
, pClientSite
);
1246 static HRESULT WINAPI
XMLView_OleObject_GetClientSite(
1247 IOleObject
*iface
, IOleClientSite
**ppClientSite
)
1249 XMLView
*This
= impl_from_IOleObject(iface
);
1250 FIXME("(%p)->(%p)\n", This
, ppClientSite
);
1254 static HRESULT WINAPI
XMLView_OleObject_SetHostNames(IOleObject
*iface
,
1255 LPCOLESTR szContainerApp
, LPCOLESTR szContainerObj
)
1257 XMLView
*This
= impl_from_IOleObject(iface
);
1258 FIXME("(%p)->(%s %s)\n", This
, debugstr_w(szContainerApp
), debugstr_w(szContainerObj
));
1262 static HRESULT WINAPI
XMLView_OleObject_Close(IOleObject
*iface
, DWORD dwSaveOption
)
1264 XMLView
*This
= impl_from_IOleObject(iface
);
1265 FIXME("(%p)->(%x)\n", This
, dwSaveOption
);
1269 static HRESULT WINAPI
XMLView_OleObject_SetMoniker(IOleObject
*iface
,
1270 DWORD dwWhichMoniker
, IMoniker
*pmk
)
1272 XMLView
*This
= impl_from_IOleObject(iface
);
1273 FIXME("(%p)->(%x %p)\n", This
, dwWhichMoniker
, pmk
);
1277 static HRESULT WINAPI
XMLView_OleObject_GetMoniker(IOleObject
*iface
,
1278 DWORD dwAssign
, DWORD dwWhichMoniker
, IMoniker
**ppmk
)
1280 XMLView
*This
= impl_from_IOleObject(iface
);
1281 FIXME("(%p)->(%x %x %p)\n", This
, dwAssign
, dwWhichMoniker
, ppmk
);
1285 static HRESULT WINAPI
XMLView_OleObject_InitFromData(IOleObject
*iface
,
1286 IDataObject
*pDataObject
, BOOL fCreation
, DWORD dwReserved
)
1288 XMLView
*This
= impl_from_IOleObject(iface
);
1289 FIXME("(%p)->(%p %x %x)\n", This
, pDataObject
, fCreation
, dwReserved
);
1293 static HRESULT WINAPI
XMLView_OleObject_GetClipboardData(IOleObject
*iface
,
1294 DWORD dwReserved
, IDataObject
**ppDataObject
)
1296 XMLView
*This
= impl_from_IOleObject(iface
);
1297 FIXME("(%p)->(%x %p)\n", This
, dwReserved
, ppDataObject
);
1301 static HRESULT WINAPI
XMLView_OleObject_DoVerb(IOleObject
*iface
,
1302 LONG iVerb
, LPMSG lpmsg
, IOleClientSite
*pActiveSite
,
1303 LONG lindex
, HWND hwndParent
, LPCRECT lprcPosRect
)
1305 XMLView
*This
= impl_from_IOleObject(iface
);
1306 FIXME("(%p)->(%d %p %p %d %p %p)\n", This
, iVerb
, lpmsg
,
1307 pActiveSite
, lindex
, hwndParent
, lprcPosRect
);
1311 static HRESULT WINAPI
XMLView_OleObject_EnumVerbs(
1312 IOleObject
*iface
, IEnumOLEVERB
**ppEnumOleVerb
)
1314 XMLView
*This
= impl_from_IOleObject(iface
);
1315 FIXME("(%p)->{%p)\n", This
, ppEnumOleVerb
);
1319 static HRESULT WINAPI
XMLView_OleObject_Update(IOleObject
*iface
)
1321 XMLView
*This
= impl_from_IOleObject(iface
);
1322 FIXME("(%p)\n", This
);
1326 static HRESULT WINAPI
XMLView_OleObject_IsUpToDate(IOleObject
*iface
)
1328 XMLView
*This
= impl_from_IOleObject(iface
);
1329 FIXME("(%p)\n", This
);
1333 static HRESULT WINAPI
XMLView_OleObject_GetUserClassID(IOleObject
*iface
, CLSID
*pClsid
)
1335 XMLView
*This
= impl_from_IOleObject(iface
);
1336 FIXME("(%p)->(%p)\n", This
, pClsid
);
1340 static HRESULT WINAPI
XMLView_OleObject_GetUserType(IOleObject
*iface
,
1341 DWORD dwFormOfType
, LPOLESTR
*pszUserType
)
1343 XMLView
*This
= impl_from_IOleObject(iface
);
1344 FIXME("(%p)->(%x %p)\n", This
, dwFormOfType
, pszUserType
);
1348 static HRESULT WINAPI
XMLView_OleObject_SetExtent(IOleObject
*iface
,
1349 DWORD dwDrawAspect
, SIZEL
*psizel
)
1351 XMLView
*This
= impl_from_IOleObject(iface
);
1352 FIXME("(%p)->(%x %p)\n", This
, dwDrawAspect
, psizel
);
1356 static HRESULT WINAPI
XMLView_OleObject_GetExtent(IOleObject
*iface
,
1357 DWORD dwDrawAspect
, SIZEL
*psizel
)
1359 XMLView
*This
= impl_from_IOleObject(iface
);
1360 FIXME("(%p)->(%x %p)\n", This
, dwDrawAspect
, psizel
);
1364 static HRESULT WINAPI
XMLView_OleObject_Advise(IOleObject
*iface
,
1365 IAdviseSink
*pAdvSink
, DWORD
*pdwConnection
)
1367 XMLView
*This
= impl_from_IOleObject(iface
);
1368 FIXME("(%p)->(%p %p)\n", This
, pAdvSink
, pdwConnection
);
1372 static HRESULT WINAPI
XMLView_OleObject_Unadvise(
1373 IOleObject
*iface
, DWORD dwConnection
)
1375 XMLView
*This
= impl_from_IOleObject(iface
);
1376 FIXME("(%p)->(%d)\n", This
, dwConnection
);
1380 static HRESULT WINAPI
XMLView_OleObject_EnumAdvise(
1381 IOleObject
*iface
, IEnumSTATDATA
**ppenumAdvise
)
1383 XMLView
*This
= impl_from_IOleObject(iface
);
1384 FIXME("(%p)->(%p)\n", This
, ppenumAdvise
);
1388 static HRESULT WINAPI
XMLView_OleObject_GetMiscStatus(
1389 IOleObject
*iface
, DWORD dwAspect
, DWORD
*pdwStatus
)
1391 XMLView
*This
= impl_from_IOleObject(iface
);
1392 FIXME("(%p)->(%d %p)\n", This
, dwAspect
, pdwStatus
);
1396 static HRESULT WINAPI
XMLView_OleObject_SetColorScheme(
1397 IOleObject
*iface
, LOGPALETTE
*pLogpal
)
1399 XMLView
*This
= impl_from_IOleObject(iface
);
1400 FIXME("(%p)->(%p)\n", This
, pLogpal
);
1404 static IOleObjectVtbl XMLView_OleObjectVtbl
= {
1405 XMLView_OleObject_QueryInterface
,
1406 XMLView_OleObject_AddRef
,
1407 XMLView_OleObject_Release
,
1408 XMLView_OleObject_SetClientSite
,
1409 XMLView_OleObject_GetClientSite
,
1410 XMLView_OleObject_SetHostNames
,
1411 XMLView_OleObject_Close
,
1412 XMLView_OleObject_SetMoniker
,
1413 XMLView_OleObject_GetMoniker
,
1414 XMLView_OleObject_InitFromData
,
1415 XMLView_OleObject_GetClipboardData
,
1416 XMLView_OleObject_DoVerb
,
1417 XMLView_OleObject_EnumVerbs
,
1418 XMLView_OleObject_Update
,
1419 XMLView_OleObject_IsUpToDate
,
1420 XMLView_OleObject_GetUserClassID
,
1421 XMLView_OleObject_GetUserType
,
1422 XMLView_OleObject_SetExtent
,
1423 XMLView_OleObject_GetExtent
,
1424 XMLView_OleObject_Advise
,
1425 XMLView_OleObject_Unadvise
,
1426 XMLView_OleObject_EnumAdvise
,
1427 XMLView_OleObject_GetMiscStatus
,
1428 XMLView_OleObject_SetColorScheme
1431 HRESULT
XMLView_create(IUnknown
*outer
, void **ppObj
)
1436 TRACE("(%p %p)\n", outer
, ppObj
);
1441 This
= heap_alloc_zero(sizeof(*This
));
1443 return E_OUTOFMEMORY
;
1445 This
->IPersistMoniker_iface
.lpVtbl
= &XMLView_PersistMonikerVtbl
;
1446 This
->IPersistHistory_iface
.lpVtbl
= &XMLView_PersistHistoryVtbl
;
1447 This
->IOleCommandTarget_iface
.lpVtbl
= &XMLView_OleCommandTargetVtbl
;
1448 This
->IOleObject_iface
.lpVtbl
= &XMLView_OleObjectVtbl
;
1451 hres
= CoCreateInstance(&CLSID_HTMLDocument
, (IUnknown
*)&This
->IPersistMoniker_iface
,
1452 CLSCTX_INPROC_SERVER
, &IID_IUnknown
, (void**)&This
->html_doc
);
1458 *ppObj
= &This
->IPersistMoniker_iface
;
1464 HRESULT
XMLView_create(IUnknown
*outer
, void **ppObj
)
1466 MESSAGE("This program tried to use a XMLView object, but\n"
1467 "libxml2 support was not present at compile time.\n");
1471 #endif /* HAVE_LIBXML2 */