Module: wine Branch: master Commit: f5a8a450b2e0678770c35cbb42035a4d8bfe38e5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f5a8a450b2e0678770c35cbb42...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Dec 6 12:23:22 2007 +0100
mshtml: Added HTMLTxtRange::Exec(IDM_INDENT) implementation.
---
dlls/mshtml/txtrange.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 48 insertions(+), 1 deletions(-)
diff --git a/dlls/mshtml/txtrange.c b/dlls/mshtml/txtrange.c index 7d046bb..d5e65b8 100644 --- a/dlls/mshtml/txtrange.c +++ b/dlls/mshtml/txtrange.c @@ -28,6 +28,7 @@ #include "winuser.h" #include "winnls.h" #include "ole2.h" +#include "mshtmcid.h"
#include "wine/debug.h" #include "wine/unicode.h" @@ -1729,15 +1730,61 @@ static HRESULT WINAPI RangeCommandTarget_QueryStatus(IOleCommandTarget *iface, c return E_NOTIMPL; }
+static HRESULT exec_indent(HTMLTxtRange *This, VARIANT *in, VARIANT *out) +{ + nsIDOMDocumentFragment *fragment; + nsIDOMElement *blockquote_elem, *p_elem; + nsIDOMDocument *nsdoc; + nsIDOMNode *tmp; + nsAString tag_str; + + static const PRUnichar blockquoteW[] = {'B','L','O','C','K','Q','U','O','T','E',0}; + static const PRUnichar pW[] = {'P',0}; + + TRACE("(%p)->(%p %p)\n", This, in, out); + + nsIWebNavigation_GetDocument(This->doc->nscontainer->navigation, &nsdoc); + + nsAString_Init(&tag_str, blockquoteW); + nsIDOMDocument_CreateElement(nsdoc, &tag_str, &blockquote_elem); + nsAString_Finish(&tag_str); + + nsAString_Init(&tag_str, pW); + nsIDOMDocument_CreateElement(nsdoc, &tag_str, &p_elem); + nsAString_Finish(&tag_str); + + nsIDOMDocument_Release(nsdoc); + + nsIDOMRange_ExtractContents(This->nsrange, &fragment); + nsIDOMElement_AppendChild(p_elem, (nsIDOMNode*)fragment, &tmp); + nsIDOMDocumentFragment_Release(fragment); + nsIDOMNode_Release(tmp); + + nsIDOMElement_AppendChild(blockquote_elem, (nsIDOMNode*)p_elem, &tmp); + nsIDOMElement_Release(p_elem); + nsIDOMNode_Release(tmp); + + nsIDOMRange_InsertNode(This->nsrange, (nsIDOMNode*)blockquote_elem); + nsIDOMElement_Release(blockquote_elem); + + return S_OK; +} + static HRESULT WINAPI RangeCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) { HTMLTxtRange *This = OLECMDTRG_THIS(iface); + TRACE("(%p)->(%s %d %x %p %p)\n", This, debugstr_guid(pguidCmdGroup), nCmdID, nCmdexecopt, pvaIn, pvaOut);
if(pguidCmdGroup && IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) { - FIXME("Unsupported cmdid %d of CGID_MSHTML\n", nCmdID); + switch(nCmdID) { + case IDM_INDENT: + return exec_indent(This, pvaIn, pvaOut); + default: + FIXME("Unsupported cmdid %d of CGID_MSHTML\n", nCmdID); + } }else { FIXME("Unsupported cmd %d of group %s\n", nCmdID, debugstr_guid(pguidCmdGroup)); }