Jacek Caban : mshtml: Added QueryStatus(IDM_JUSTIFY*) implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Nov 9 13:57:54 CST 2006


Module: wine
Branch: master
Commit: 4769950d66ddf076ab423701749269195cec5403
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4769950d66ddf076ab423701749269195cec5403

Author: Jacek Caban <jacek at 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);
 }




More information about the wine-cvs mailing list