2 * Copyright 2005 Jacek Caban
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31 #include "wine/debug.h"
33 #include "mshtml_private.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
37 /**********************************************************
38 * IOleObject implementation
41 #define OLEOBJ_THIS(iface) DEFINE_THIS(HTMLDocument, OleObject, iface)
43 static HRESULT WINAPI
OleObject_QueryInterface(IOleObject
*iface
, REFIID riid
, void **ppvObject
)
45 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
46 return IHTMLDocument2_QueryInterface(HTMLDOC(This
), riid
, ppvObject
);
49 static ULONG WINAPI
OleObject_AddRef(IOleObject
*iface
)
51 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
52 return IHTMLDocument2_AddRef(HTMLDOC(This
));
55 static ULONG WINAPI
OleObject_Release(IOleObject
*iface
)
57 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
58 return IHTMLDocument2_Release(HTMLDOC(This
));
61 static HRESULT WINAPI
OleObject_SetClientSite(IOleObject
*iface
, IOleClientSite
*pClientSite
)
63 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
64 IDocHostUIHandler
*pDocHostUIHandler
= NULL
;
67 TRACE("(%p)->(%p)\n", This
, pClientSite
);
70 IOleClientSite_Release(This
->client
);
73 IDocHostUIHandler_Release(This
->hostui
);
80 hres
= IOleObject_QueryInterface(pClientSite
, &IID_IDocHostUIHandler
, (void**)&pDocHostUIHandler
);
82 DOCHOSTUIINFO hostinfo
;
83 LPOLESTR key_path
= NULL
, override_key_path
= NULL
;
84 IDocHostUIHandler2
*pDocHostUIHandler2
;
86 memset(&hostinfo
, 0, sizeof(DOCHOSTUIINFO
));
87 hostinfo
.cbSize
= sizeof(DOCHOSTUIINFO
);
88 hres
= IDocHostUIHandler_GetHostInfo(pDocHostUIHandler
, &hostinfo
);
90 /* FIXME: use hostinfo */
91 TRACE("hostinfo = {%lu %08lx %08lx %s %s}\n",
92 hostinfo
.cbSize
, hostinfo
.dwFlags
, hostinfo
.dwDoubleClick
,
93 debugstr_w(hostinfo
.pchHostCss
), debugstr_w(hostinfo
.pchHostNS
));
95 if(!This
->has_key_path
) {
96 hres
= IDocHostUIHandler_GetOptionKeyPath(pDocHostUIHandler
, &key_path
, 0);
97 if(hres
== S_OK
&& key_path
) {
99 /* FIXME: use key_path */
100 TRACE("key_path = %s\n", debugstr_w(key_path
));
102 CoTaskMemFree(key_path
);
105 hres
= IDocHostUIHandler_QueryInterface(pDocHostUIHandler
, &IID_IDocHostUIHandler2
,
106 (void**)&pDocHostUIHandler2
);
107 if(SUCCEEDED(hres
)) {
108 hres
= IDocHostUIHandler2_GetOverrideKeyPath(pDocHostUIHandler2
, &override_key_path
, 0);
109 if(hres
== S_OK
&& override_key_path
&& override_key_path
[0]) {
110 if(override_key_path
[0]) {
111 /*FIXME: use override_key_path */
112 TRACE("override_key_path = %s\n", debugstr_w(override_key_path
));
114 CoTaskMemFree(override_key_path
);
118 This
->has_key_path
= TRUE
;
122 /* Native calls here GetWindow. What is it for?
123 * We don't have anything to do with it here (yet). */
125 IOleWindow
*pOleWindow
= NULL
;
128 hres
= IOleClientSite_QueryInterface(pClientSite
, &IID_IOleWindow
, (void**)&pOleWindow
);
129 if(SUCCEEDED(hres
)) {
130 IOleWindow_GetWindow(pOleWindow
, &hwnd
);
131 IOleWindow_Release(pOleWindow
);
135 IOleClientSite_AddRef(pClientSite
);
136 This
->client
= pClientSite
;
137 This
->hostui
= pDocHostUIHandler
;
142 static HRESULT WINAPI
OleObject_GetClientSite(IOleObject
*iface
, IOleClientSite
**ppClientSite
)
144 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
146 TRACE("(%p)->(%p)\n", This
, ppClientSite
);
152 IOleClientSite_AddRef(This
->client
);
153 *ppClientSite
= This
->client
;
158 static HRESULT WINAPI
OleObject_SetHostNames(IOleObject
*iface
, LPCOLESTR szContainerApp
, LPCOLESTR szContainerObj
)
160 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
161 FIXME("(%p)->(%s %s)\n", This
, debugstr_w(szContainerApp
), debugstr_w(szContainerObj
));
165 static HRESULT WINAPI
OleObject_Close(IOleObject
*iface
, DWORD dwSaveOption
)
167 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
170 FIXME("(%p)->(%08lx)\n", This
, dwSaveOption
);
173 IOleContainer
*container
;
174 hres
= IOleClientSite_GetContainer(This
->client
, &container
);
175 if(SUCCEEDED(hres
)) {
176 IOleContainer_LockContainer(container
, FALSE
);
177 IOleContainer_Release(container
);
184 static HRESULT WINAPI
OleObject_SetMoniker(IOleObject
*iface
, DWORD dwWhichMoniker
, IMoniker
*pmk
)
186 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
187 FIXME("(%p %ld %p)->()\n", This
, dwWhichMoniker
, pmk
);
191 static HRESULT WINAPI
OleObject_GetMoniker(IOleObject
*iface
, DWORD dwAssign
, DWORD dwWhichMoniker
, IMoniker
**ppmk
)
193 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
194 FIXME("(%p)->(%ld %ld %p)\n", This
, dwAssign
, dwWhichMoniker
, ppmk
);
198 static HRESULT WINAPI
OleObject_InitFromData(IOleObject
*iface
, IDataObject
*pDataObject
, BOOL fCreation
,
201 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
202 FIXME("(%p)->(%p %x %ld)\n", This
, pDataObject
, fCreation
, dwReserved
);
206 static HRESULT WINAPI
OleObject_GetClipboardData(IOleObject
*iface
, DWORD dwReserved
, IDataObject
**ppDataObject
)
208 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
209 FIXME("(%p)->(%ld %p)\n", This
, dwReserved
, ppDataObject
);
213 static HRESULT WINAPI
OleObject_DoVerb(IOleObject
*iface
, LONG iVerb
, LPMSG lpmsg
, IOleClientSite
*pActiveSite
,
214 LONG lindex
, HWND hwndParent
, LPCRECT lprcPosRect
)
216 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
217 IOleDocumentSite
*pDocSite
;
220 TRACE("(%p)->(%ld %p %p %ld %p %p)\n", This
, iVerb
, lpmsg
, pActiveSite
, lindex
, hwndParent
, lprcPosRect
);
222 if(iVerb
!= OLEIVERB_SHOW
&& iVerb
!= OLEIVERB_UIACTIVATE
) {
223 FIXME("iVerb = %ld not supported\n", iVerb
);
228 pActiveSite
= This
->client
;
230 hres
= IOleClientSite_QueryInterface(pActiveSite
, &IID_IOleDocumentSite
, (void**)&pDocSite
);
231 if(SUCCEEDED(hres
)) {
232 IOleContainer
*pContainer
;
233 hres
= IOleClientSite_GetContainer(pActiveSite
, &pContainer
);
234 if(SUCCEEDED(hres
)) {
235 IOleContainer_LockContainer(pContainer
, TRUE
);
236 IOleContainer_Release(pContainer
);
238 /* FIXME: Create new IOleDocumentView. See CreateView for more info. */
239 hres
= IOleDocumentSite_ActivateMe(pDocSite
, DOCVIEW(This
));
240 IOleDocumentSite_Release(pDocSite
);
242 hres
= IOleDocumentView_UIActivate(DOCVIEW(This
), TRUE
);
243 if(SUCCEEDED(hres
)) {
245 RECT rect
; /* We need to pass rect as not const pointer */
246 memcpy(&rect
, lprcPosRect
, sizeof(RECT
));
247 IOleDocumentView_SetRect(DOCVIEW(This
), &rect
);
249 IOleDocumentView_Show(DOCVIEW(This
), TRUE
);
256 static HRESULT WINAPI
OleObject_EnumVerbs(IOleObject
*iface
, IEnumOLEVERB
**ppEnumOleVerb
)
258 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
259 FIXME("(%p)->(%p)\n", This
, ppEnumOleVerb
);
263 static HRESULT WINAPI
OleObject_Update(IOleObject
*iface
)
265 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
266 FIXME("(%p)\n", This
);
270 static HRESULT WINAPI
OleObject_IsUpToDate(IOleObject
*iface
)
272 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
273 FIXME("(%p)\n", This
);
277 static HRESULT WINAPI
OleObject_GetUserClassID(IOleObject
*iface
, CLSID
*pClsid
)
279 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
281 TRACE("(%p)->(%p)\n", This
, pClsid
);
286 memcpy(pClsid
, &CLSID_HTMLDocument
, sizeof(GUID
));
290 static HRESULT WINAPI
OleObject_GetUserType(IOleObject
*iface
, DWORD dwFormOfType
, LPOLESTR
*pszUserType
)
292 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
293 FIXME("(%p)->(%ld %p)\n", This
, dwFormOfType
, pszUserType
);
297 static HRESULT WINAPI
OleObject_SetExtent(IOleObject
*iface
, DWORD dwDrawAspect
, SIZEL
*psizel
)
299 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
300 FIXME("(%p)->(%ld %p)\n", This
, dwDrawAspect
, psizel
);
304 static HRESULT WINAPI
OleObject_GetExtent(IOleObject
*iface
, DWORD dwDrawAspect
, SIZEL
*psizel
)
306 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
307 FIXME("(%p)->(%ld %p)\n", This
, dwDrawAspect
, psizel
);
311 static HRESULT WINAPI
OleObject_Advise(IOleObject
*iface
, IAdviseSink
*pAdvSink
, DWORD
*pdwConnection
)
313 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
314 FIXME("(%p)->(%p %p)\n", This
, pAdvSink
, pdwConnection
);
318 static HRESULT WINAPI
OleObject_Unadvise(IOleObject
*iface
, DWORD dwConnection
)
320 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
321 FIXME("(%p)->(%ld)\n", This
, dwConnection
);
325 static HRESULT WINAPI
OleObject_EnumAdvise(IOleObject
*iface
, IEnumSTATDATA
**ppenumAdvise
)
327 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
328 FIXME("(%p)->(%p)\n", This
, ppenumAdvise
);
332 static HRESULT WINAPI
OleObject_GetMiscStatus(IOleObject
*iface
, DWORD dwAspect
, DWORD
*pdwStatus
)
334 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
335 FIXME("(%p)->(%ld %p)\n", This
, dwAspect
, pdwStatus
);
339 static HRESULT WINAPI
OleObject_SetColorScheme(IOleObject
*iface
, LOGPALETTE
*pLogpal
)
341 HTMLDocument
*This
= OLEOBJ_THIS(iface
);
342 FIXME("(%p)->(%p)\n", This
, pLogpal
);
348 static const IOleObjectVtbl OleObjectVtbl
= {
349 OleObject_QueryInterface
,
352 OleObject_SetClientSite
,
353 OleObject_GetClientSite
,
354 OleObject_SetHostNames
,
356 OleObject_SetMoniker
,
357 OleObject_GetMoniker
,
358 OleObject_InitFromData
,
359 OleObject_GetClipboardData
,
363 OleObject_IsUpToDate
,
364 OleObject_GetUserClassID
,
365 OleObject_GetUserType
,
370 OleObject_EnumAdvise
,
371 OleObject_GetMiscStatus
,
372 OleObject_SetColorScheme
375 /**********************************************************
376 * IOleDocument implementation
379 #define OLEDOC_THIS(iface) DEFINE_THIS(HTMLDocument, OleDocument, iface)
381 static HRESULT WINAPI
OleDocument_QueryInterface(IOleDocument
*iface
, REFIID riid
, void **ppvObject
)
383 HTMLDocument
*This
= OLEDOC_THIS(iface
);
384 return IHTMLDocument2_QueryInterface(HTMLDOC(This
), riid
, ppvObject
);
387 static ULONG WINAPI
OleDocument_AddRef(IOleDocument
*iface
)
389 HTMLDocument
*This
= OLEDOC_THIS(iface
);
390 return IHTMLDocument2_AddRef(HTMLDOC(This
));
393 static ULONG WINAPI
OleDocument_Release(IOleDocument
*iface
)
395 HTMLDocument
*This
= OLEDOC_THIS(iface
);
396 return IHTMLDocument2_Release(HTMLDOC(This
));
399 static HRESULT WINAPI
OleDocument_CreateView(IOleDocument
*iface
, IOleInPlaceSite
*pIPSite
, IStream
*pstm
,
400 DWORD dwReserved
, IOleDocumentView
**ppView
)
402 HTMLDocument
*This
= OLEDOC_THIS(iface
);
405 TRACE("(%p)->(%p %p %ld %p)\n", This
, pIPSite
, pstm
, dwReserved
, ppView
);
411 * Windows implementation creates new IOleDocumentView when function is called for the
412 * first time and returns E_FAIL when it is called for the second time, but it doesn't matter
413 * if the application uses returned interfaces, passed to ActivateMe or returned by
414 * QueryInterface, so there is no reason to create new interface. This needs more testing.
418 hres
= IOleDocumentView_SetInPlaceSite(DOCVIEW(This
), pIPSite
);
424 FIXME("pstm is not supported\n");
426 IOleDocumentView_AddRef(DOCVIEW(This
));
427 *ppView
= DOCVIEW(This
);
431 static HRESULT WINAPI
OleDocument_GetDocMiscStatus(IOleDocument
*iface
, DWORD
*pdwStatus
)
433 HTMLDocument
*This
= OLEDOC_THIS(iface
);
434 FIXME("(%p)->(%p)\n", This
, pdwStatus
);
438 static HRESULT WINAPI
OleDocument_EnumViews(IOleDocument
*iface
, IEnumOleDocumentViews
**ppEnum
,
439 IOleDocumentView
**ppView
)
441 HTMLDocument
*This
= OLEDOC_THIS(iface
);
442 FIXME("(%p)->(%p %p)\n", This
, ppEnum
, ppView
);
448 static const IOleDocumentVtbl OleDocumentVtbl
= {
449 OleDocument_QueryInterface
,
452 OleDocument_CreateView
,
453 OleDocument_GetDocMiscStatus
,
454 OleDocument_EnumViews
457 /**********************************************************
458 * IOleCommandTarget implementation
461 #define CMDTARGET_THIS(iface) DEFINE_THIS(HTMLDocument, OleCommandTarget, iface)
463 static HRESULT
exec_open(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
465 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
469 static HRESULT
exec_new(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
471 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
475 static HRESULT
exec_save(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
477 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
481 static HRESULT
exec_save_as(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
483 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
487 static HRESULT
exec_save_copy_as(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
489 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
493 static HRESULT
exec_print(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
495 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
499 static HRESULT
exec_print_preview(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
501 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
505 static HRESULT
exec_page_setup(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
507 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
511 static HRESULT
exec_spell(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
513 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
517 static HRESULT
exec_properties(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
519 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
523 static HRESULT
exec_cut(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
525 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
529 static HRESULT
exec_copy(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
531 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
535 static HRESULT
exec_paste(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
537 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
541 static HRESULT
exec_paste_special(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
543 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
547 static HRESULT
exec_undo(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
549 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
553 static HRESULT
exec_rendo(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
555 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
559 static HRESULT
exec_select_all(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
561 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
565 static HRESULT
exec_clear_selection(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
567 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
571 static HRESULT
exec_zoom(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
573 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
577 static HRESULT
exec_get_zoom_range(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
579 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
583 static HRESULT
exec_refresh(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
585 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
589 static HRESULT
exec_stop(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
591 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
595 static HRESULT
exec_stop_download(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
597 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
601 static HRESULT
exec_delete(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
603 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
607 static HRESULT
exec_enable_interaction(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
609 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
613 static HRESULT
exec_on_unload(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
615 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
619 static HRESULT
exec_show_page_setup(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
621 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
625 static HRESULT
exec_show_print(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
627 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
631 static HRESULT
exec_close(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
633 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
637 static HRESULT
exec_set_print_template(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
639 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
643 static HRESULT
exec_get_print_template(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
645 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
649 static const struct {
651 HRESULT (*func
)(HTMLDocument
*,DWORD
,VARIANT
*,VARIANT
*);
652 } exec_table
[OLECMDID_GETPRINTTEMPLATE
+1] = {
654 { OLECMDF_SUPPORTED
, exec_open
}, /* OLECMDID_OPEN */
655 { OLECMDF_SUPPORTED
, exec_new
}, /* OLECMDID_NEW */
656 { OLECMDF_SUPPORTED
, exec_save
}, /* OLECMDID_SAVE */
657 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_save_as
}, /* OLECMDID_SAVEAS */
658 { OLECMDF_SUPPORTED
, exec_save_copy_as
}, /* OLECMDID_SAVECOPYAS */
659 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_print
}, /* OLECMDID_PRINT */
660 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_print_preview
}, /* OLECMDID_PRINTPREVIEW */
661 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_page_setup
}, /* OLECMDID_PAGESETUP */
662 { OLECMDF_SUPPORTED
, exec_spell
}, /* OLECMDID_SPELL */
663 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_properties
}, /* OLECMDID_PROPERTIES */
664 { OLECMDF_SUPPORTED
, exec_cut
}, /* OLECMDID_CUT */
665 { OLECMDF_SUPPORTED
, exec_copy
}, /* OLECMDID_COPY */
666 { OLECMDF_SUPPORTED
, exec_paste
}, /* OLECMDID_PASTE */
667 { OLECMDF_SUPPORTED
, exec_paste_special
}, /* OLECMDID_PASTESPECIAL */
668 { OLECMDF_SUPPORTED
, exec_undo
}, /* OLECMDID_UNDO */
669 { OLECMDF_SUPPORTED
, exec_rendo
}, /* OLECMDID_REDO */
670 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_select_all
}, /* OLECMDID_SELECTALL */
671 { OLECMDF_SUPPORTED
, exec_clear_selection
}, /* OLECMDID_CLEARSELECTION */
672 { OLECMDF_SUPPORTED
, exec_zoom
}, /* OLECMDID_ZOOM */
673 { OLECMDF_SUPPORTED
, exec_get_zoom_range
}, /* OLECMDID_GETZOOMRANGE */
675 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_refresh
}, /* OLECMDID_REFRESH */
676 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_stop
}, /* OLECMDID_STOP */
677 {0},{0},{0},{0},{0},{0},
678 { OLECMDF_SUPPORTED
, exec_stop_download
}, /* OLECMDID_STOPDOWNLOAD */
680 { OLECMDF_SUPPORTED
, exec_delete
}, /* OLECMDID_DELETE */
682 { OLECMDF_SUPPORTED
, exec_enable_interaction
}, /* OLECMDID_ENABLE_INTERACTION */
683 { OLECMDF_SUPPORTED
, exec_on_unload
}, /* OLECMDID_ONUNLOAD */
685 { OLECMDF_SUPPORTED
, exec_show_page_setup
}, /* OLECMDID_SHOWPAGESETUP */
686 { OLECMDF_SUPPORTED
, exec_show_print
}, /* OLECMDID_SHOWPRINT */
688 { OLECMDF_SUPPORTED
, exec_close
}, /* OLECMDID_CLOSE */
690 { OLECMDF_SUPPORTED
, exec_set_print_template
}, /* OLECMDID_SETPRINTTEMPLATE */
691 { OLECMDF_SUPPORTED
, exec_get_print_template
} /* OLECMDID_GETPRINTTEMPLATE */
694 static HRESULT WINAPI
OleCommandTarget_QueryInterface(IOleCommandTarget
*iface
, REFIID riid
, void **ppv
)
696 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
697 return IHTMLDocument2_QueryInterface(HTMLDOC(This
), riid
, ppv
);
700 static ULONG WINAPI
OleCommandTarget_AddRef(IOleCommandTarget
*iface
)
702 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
703 return IHTMLDocument2_AddRef(HTMLDOC(This
));
706 static ULONG WINAPI
OleCommandTarget_Release(IOleCommandTarget
*iface
)
708 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
709 return IHTMLDocument_Release(HTMLDOC(This
));
712 static HRESULT WINAPI
OleCommandTarget_QueryStatus(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
713 ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
715 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
718 TRACE("(%p)->(%s %ld %p %p)\n", This
, debugstr_guid(pguidCmdGroup
), cCmds
, prgCmds
, pCmdText
);
723 for(i
=0; i
<cCmds
; i
++) {
724 if(prgCmds
[i
].cmdID
<OLECMDID_OPEN
|| prgCmds
[i
].cmdID
>OLECMDID_GETPRINTTEMPLATE
) {
725 WARN("Unsupported cmdID = %ld\n", prgCmds
[i
].cmdID
);
727 hres
= OLECMDERR_E_NOTSUPPORTED
;
729 prgCmds
[i
].cmdf
= exec_table
[prgCmds
[i
].cmdID
].cmdf
;
730 TRACE("cmdID = %ld returning %lx\n", prgCmds
[i
].cmdID
, prgCmds
[i
].cmdID
);
736 FIXME("Set pCmdText\n");
738 FIXME("Unsupported pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup
));
739 hres
= OLECMDERR_E_UNKNOWNGROUP
;
745 static HRESULT WINAPI
OleCommandTarget_Exec(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
746 DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
748 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
751 if(nCmdID
<OLECMDID_OPEN
|| nCmdID
>OLECMDID_GETPRINTTEMPLATE
|| !exec_table
[nCmdID
].func
) {
752 WARN("Unsupported cmdID = %ld\n", nCmdID
);
753 return OLECMDERR_E_NOTSUPPORTED
;
756 return exec_table
[nCmdID
].func(This
, nCmdexecopt
, pvaIn
, pvaOut
);
759 FIXME("Unsupported pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup
));
760 return OLECMDERR_E_UNKNOWNGROUP
;
763 #undef CMDTARGET_THIS
765 static const IOleCommandTargetVtbl OleCommandTargetVtbl
= {
766 OleCommandTarget_QueryInterface
,
767 OleCommandTarget_AddRef
,
768 OleCommandTarget_Release
,
769 OleCommandTarget_QueryStatus
,
770 OleCommandTarget_Exec
773 /**********************************************************
774 * IOleControl implementation
777 #define CONTROL_THIS(iface) DEFINE_THIS(HTMLDocument, OleControl, iface)
779 static HRESULT WINAPI
OleControl_QueryInterface(IOleControl
*iface
, REFIID riid
, void **ppv
)
781 HTMLDocument
*This
= CONTROL_THIS(iface
);
782 return IHTMLDocument2_QueryInterface(HTMLDOC(This
), riid
, ppv
);
785 static ULONG WINAPI
OleControl_AddRef(IOleControl
*iface
)
787 HTMLDocument
*This
= CONTROL_THIS(iface
);
788 return IHTMLDocument2_AddRef(HTMLDOC(This
));
791 static ULONG WINAPI
OleControl_Release(IOleControl
*iface
)
793 HTMLDocument
*This
= CONTROL_THIS(iface
);
794 return IHTMLDocument_Release(HTMLDOC(This
));
797 static HRESULT WINAPI
OleControl_GetControlInfo(IOleControl
*iface
, CONTROLINFO
*pCI
)
799 HTMLDocument
*This
= CONTROL_THIS(iface
);
800 FIXME("(%p)->(%p)\n", This
, pCI
);
804 static HRESULT WINAPI
OleControl_OnMnemonic(IOleControl
*iface
, MSG
*pMsg
)
806 HTMLDocument
*This
= CONTROL_THIS(iface
);
807 FIXME("(%p)->(%p)\n", This
, pMsg
);
811 static HRESULT WINAPI
OleControl_OnAmbientPropertyChange(IOleControl
*iface
, DISPID dispID
)
813 HTMLDocument
*This
= CONTROL_THIS(iface
);
814 FIXME("(%p)->(%ld)\n", This
, dispID
);
818 static HRESULT WINAPI
OleControl_FreezeEvents(IOleControl
*iface
, BOOL bFreeze
)
820 HTMLDocument
*This
= CONTROL_THIS(iface
);
821 FIXME("(%p)->(%x)\n", This
, bFreeze
);
827 static const IOleControlVtbl OleControlVtbl
= {
828 OleControl_QueryInterface
,
831 OleControl_GetControlInfo
,
832 OleControl_OnMnemonic
,
833 OleControl_OnAmbientPropertyChange
,
834 OleControl_FreezeEvents
837 void HTMLDocument_OleObj_Init(HTMLDocument
*This
)
839 This
->lpOleObjectVtbl
= &OleObjectVtbl
;
840 This
->lpOleDocumentVtbl
= &OleDocumentVtbl
;
841 This
->lpOleCommandTargetVtbl
= &OleCommandTargetVtbl
;
842 This
->lpOleControlVtbl
= &OleControlVtbl
;
847 This
->has_key_path
= FALSE
;