Module: wine Branch: master Commit: 4769950d66ddf076ab423701749269195cec5403 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4769950d66ddf076ab42370174...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Nov 9 10:50:51 2006 +0100
mshtml: Added QueryStatus(IDM_JUSTIFY*) implementation.
---
dlls/mshtml/olecmd.c | 44 ++++++++++++++++++++++++++++++++++-------- dlls/mshtml/tests/htmldoc.c | 3 ++ 2 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c index d663e48..1e8d048 100644 --- a/dlls/mshtml/olecmd.c +++ b/dlls/mshtml/olecmd.c @@ -49,6 +49,10 @@ #define NSCMD_FONTFACE "cmd_fontFace" #define NSSTATE_ATTRIBUTE "state_attribute" #define NSSTATE_ALL "state_all"
+#define NSALIGN_CENTER "center" +#define NSALIGN_LEFT "left" +#define NSALIGN_RIGHT "right" + /********************************************************** * IOleCommandTarget implementation */ @@ -321,11 +325,33 @@ static DWORD query_edit_status(HTMLDocum get_ns_command_state(This->nscontainer, nscmd, nsparam);
nsICommandParams_GetBooleanValue(nsparam, NSSTATE_ALL, &b); + + nsICommandParams_Release(nsparam); }
return OLECMDF_SUPPORTED | OLECMDF_ENABLED | (b ? OLECMDF_LATCHED : 0); }
+static DWORD query_align_status(HTMLDocument *This, const char *align_str) +{ + nsICommandParams *nsparam; + char *align = NULL; + + if(This->usermode != EDITMODE || This->readystate < READYSTATE_INTERACTIVE) + return OLECMDF_SUPPORTED; + + if(This->nscontainer) { + nsparam = create_nscommand_params(); + get_ns_command_state(This->nscontainer, NSCMD_ALIGN, nsparam); + + nsICommandParams_GetCStringValue(nsparam, NSSTATE_ATTRIBUTE, &align); + + nsICommandParams_Release(nsparam); + } + + return OLECMDF_SUPPORTED | OLECMDF_ENABLED | (align && !strcmp(align_str, align) ? OLECMDF_LATCHED : 0); +} + static void set_ns_align(HTMLDocument *This, const char *align_str) { nsICommandParams *nsparam; @@ -460,21 +486,21 @@ static HRESULT exec_italic(HTMLDocument static HRESULT exec_justifycenter(HTMLDocument *This) { TRACE("(%p)\n", This); - set_ns_align(This, "center"); + set_ns_align(This, NSALIGN_CENTER); return S_OK; }
static HRESULT exec_justifyleft(HTMLDocument *This) { TRACE("(%p)\n", This); - set_ns_align(This, "left"); + set_ns_align(This, NSALIGN_LEFT); return S_OK; }
static HRESULT exec_justifyright(HTMLDocument *This) { TRACE("(%p)\n", This); - set_ns_align(This, "right"); + set_ns_align(This, NSALIGN_RIGHT); return S_OK; }
@@ -737,16 +763,16 @@ static HRESULT WINAPI OleCommandTarget_Q prgCmds[i].cmdf = query_edit_status(This, NSCMD_ITALIC); break; case IDM_JUSTIFYCENTER: - FIXME("CGID_MSHTML: IDM_JUSTIFYCENTER\n"); - prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED; + TRACE("CGID_MSHTML: IDM_JUSTIFYCENTER\n"); + prgCmds[i].cmdf = query_align_status(This, NSALIGN_CENTER); break; case IDM_JUSTIFYLEFT: - FIXME("CGID_MSHTML: IDM_JUSTIFYLEFT\n"); - prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED; + TRACE("CGID_MSHTML: IDM_JUSTIFYLEFT\n"); + prgCmds[i].cmdf = query_align_status(This, NSALIGN_LEFT); break; case IDM_JUSTIFYRIGHT: - FIXME("CGID_MSHTML: IDM_JUSTIFYRIGHT\n"); - prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED; + TRACE("CGID_MSHTML: IDM_JUSTIFYRIGHT\n"); + prgCmds[i].cmdf = query_align_status(This, NSALIGN_RIGHT); break; case IDM_UNDERLINE: TRACE("CGID_MSHTML: IDM_UNDERLINE\n"); diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c index 2ae2dbb..a42e296 100644 --- a/dlls/mshtml/tests/htmldoc.c +++ b/dlls/mshtml/tests/htmldoc.c @@ -2043,6 +2043,9 @@ static void test_MSHTML_QueryStatus(IUnk test_QueryStatus(unk, &CGID_MSHTML, IDM_FONTSIZE, cmdf); test_QueryStatus(unk, &CGID_MSHTML, IDM_BOLD, cmdf); test_QueryStatus(unk, &CGID_MSHTML, IDM_FORECOLOR, cmdf); + test_QueryStatus(unk, &CGID_MSHTML, IDM_JUSTIFYCENTER, cmdf); + test_QueryStatus(unk, &CGID_MSHTML, IDM_JUSTIFYLEFT, cmdf); + test_QueryStatus(unk, &CGID_MSHTML, IDM_JUSTIFYRIGHT, cmdf); test_QueryStatus(unk, &CGID_MSHTML, IDM_ITALIC, cmdf); test_QueryStatus(unk, &CGID_MSHTML, IDM_UNDERLINE, cmdf); }