mshtml: Move IDM_FONTSIZE, IDM_FONTNAME and IDM_FORECOLOR to edit state command table.
This patch temporary adds code duplication.
This commit is contained in:
parent
510481b70c
commit
7a0e06b9e2
|
@ -28,6 +28,7 @@
|
|||
#include "winuser.h"
|
||||
#include "winnls.h"
|
||||
#include "ole2.h"
|
||||
#include "mshtmcid.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
#include "wine/unicode.h"
|
||||
|
@ -36,6 +37,11 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
#define NSCMD_FONTCOLOR "cmd_fontColor"
|
||||
#define NSCMD_FONTFACE "cmd_fontFace"
|
||||
|
||||
#define NSSTATE_ATTRIBUTE "state_attribute"
|
||||
|
||||
#define DOM_VK_LEFT VK_LEFT
|
||||
#define DOM_VK_UP VK_UP
|
||||
#define DOM_VK_RIGHT VK_RIGHT
|
||||
|
@ -44,6 +50,65 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
|||
static const WCHAR wszFont[] = {'f','o','n','t',0};
|
||||
static const WCHAR wszSize[] = {'s','i','z','e',0};
|
||||
|
||||
static void do_ns_command(NSContainer *This, const char *cmd, nsICommandParams *nsparam)
|
||||
{
|
||||
nsICommandManager *cmdmgr;
|
||||
nsIInterfaceRequestor *iface_req;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)\n", This);
|
||||
|
||||
nsres = nsIWebBrowser_QueryInterface(This->webbrowser,
|
||||
&IID_nsIInterfaceRequestor, (void**)&iface_req);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Could not get nsIInterfaceRequestor: %08x\n", nsres);
|
||||
return;
|
||||
}
|
||||
|
||||
nsres = nsIInterfaceRequestor_GetInterface(iface_req, &IID_nsICommandManager,
|
||||
(void**)&cmdmgr);
|
||||
nsIInterfaceRequestor_Release(iface_req);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Could not get nsICommandManager: %08x\n", nsres);
|
||||
return;
|
||||
}
|
||||
|
||||
nsres = nsICommandManager_DoCommand(cmdmgr, cmd, nsparam, NULL);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("DoCommand(%s) failed: %08x\n", debugstr_a(cmd), nsres);
|
||||
|
||||
nsICommandManager_Release(cmdmgr);
|
||||
}
|
||||
|
||||
static nsresult get_ns_command_state(NSContainer *This, const char *cmd, nsICommandParams *nsparam)
|
||||
{
|
||||
nsICommandManager *cmdmgr;
|
||||
nsIInterfaceRequestor *iface_req;
|
||||
nsresult nsres;
|
||||
|
||||
nsres = nsIWebBrowser_QueryInterface(This->webbrowser,
|
||||
&IID_nsIInterfaceRequestor, (void**)&iface_req);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Could not get nsIInterfaceRequestor: %08x\n", nsres);
|
||||
return nsres;
|
||||
}
|
||||
|
||||
nsres = nsIInterfaceRequestor_GetInterface(iface_req, &IID_nsICommandManager,
|
||||
(void**)&cmdmgr);
|
||||
nsIInterfaceRequestor_Release(iface_req);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Could not get nsICommandManager: %08x\n", nsres);
|
||||
return nsres;
|
||||
}
|
||||
|
||||
nsres = nsICommandManager_GetCommandState(cmdmgr, cmd, NULL, nsparam);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("GetCommandState(%s) failed: %08x\n", debugstr_a(cmd), nsres);
|
||||
|
||||
nsICommandManager_Release(cmdmgr);
|
||||
return nsres;
|
||||
}
|
||||
|
||||
static nsISelection *get_ns_selection(HTMLDocument *This)
|
||||
{
|
||||
nsIDOMWindow *dom_window;
|
||||
|
@ -435,3 +500,141 @@ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
|
|||
|
||||
nsIDOMKeyEvent_Release(key_event);
|
||||
}
|
||||
|
||||
static HRESULT exec_fontname(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
||||
{
|
||||
TRACE("(%p)->(%p %p)\n", This, in, out);
|
||||
|
||||
if(!This->nscontainer)
|
||||
return E_FAIL;
|
||||
|
||||
if(in) {
|
||||
nsICommandParams *nsparam = create_nscommand_params();
|
||||
char *stra;
|
||||
DWORD len;
|
||||
|
||||
if(V_VT(in) != VT_BSTR) {
|
||||
FIXME("Unsupported vt=%d\n", V_VT(out));
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
len = WideCharToMultiByte(CP_ACP, 0, V_BSTR(in), -1, NULL, 0, NULL, NULL);
|
||||
stra = mshtml_alloc(len);
|
||||
WideCharToMultiByte(CP_ACP, 0, V_BSTR(in), -1, stra, -1, NULL, NULL);
|
||||
nsICommandParams_SetCStringValue(nsparam, NSSTATE_ATTRIBUTE, stra);
|
||||
mshtml_free(stra);
|
||||
|
||||
do_ns_command(This->nscontainer, NSCMD_FONTFACE, nsparam);
|
||||
|
||||
nsICommandParams_Release(nsparam);
|
||||
}
|
||||
|
||||
if(out) {
|
||||
nsICommandParams *nsparam;
|
||||
LPWSTR strw;
|
||||
char *stra;
|
||||
DWORD len;
|
||||
nsresult nsres;
|
||||
|
||||
if(V_VT(out) != VT_BSTR) {
|
||||
FIXME("Unsupported vt=%d\n", V_VT(out));
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
nsparam = create_nscommand_params();
|
||||
|
||||
nsres = get_ns_command_state(This->nscontainer, NSCMD_FONTFACE, nsparam);
|
||||
if(NS_FAILED(nsres))
|
||||
return S_OK;
|
||||
|
||||
nsICommandParams_GetCStringValue(nsparam, NSSTATE_ATTRIBUTE, &stra);
|
||||
nsICommandParams_Release(nsparam);
|
||||
|
||||
len = MultiByteToWideChar(CP_ACP, 0, stra, -1, NULL, 0);
|
||||
strw = mshtml_alloc(len*sizeof(WCHAR));
|
||||
MultiByteToWideChar(CP_ACP, 0, stra, -1, strw, -1);
|
||||
nsfree(stra);
|
||||
|
||||
V_BSTR(out) = SysAllocString(strw);
|
||||
mshtml_free(strw);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT exec_forecolor(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
||||
{
|
||||
TRACE("(%p)->(%p %p)\n", This, in, out);
|
||||
|
||||
if(in) {
|
||||
if(V_VT(in) == VT_I4) {
|
||||
nsICommandParams *nsparam = create_nscommand_params();
|
||||
char color_str[10];
|
||||
|
||||
sprintf(color_str, "#%02x%02x%02x",
|
||||
V_I4(in)&0xff, (V_I4(in)>>8)&0xff, (V_I4(in)>>16)&0xff);
|
||||
|
||||
nsICommandParams_SetCStringValue(nsparam, NSSTATE_ATTRIBUTE, color_str);
|
||||
do_ns_command(This->nscontainer, NSCMD_FONTCOLOR, nsparam);
|
||||
|
||||
nsICommandParams_Release(nsparam);
|
||||
}else {
|
||||
FIXME("unsupported in vt=%d\n", V_VT(in));
|
||||
}
|
||||
}
|
||||
|
||||
if(out) {
|
||||
FIXME("unsupported out\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT exec_fontsize(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
||||
{
|
||||
TRACE("(%p)->(%p %p)\n", This, in, out);
|
||||
|
||||
if(out) {
|
||||
WCHAR val[10] = {0};
|
||||
|
||||
switch(V_VT(out)) {
|
||||
case VT_I4:
|
||||
get_font_size(This, val);
|
||||
V_I4(out) = strtolW(val, NULL, 10);
|
||||
break;
|
||||
case VT_BSTR:
|
||||
get_font_size(This, val);
|
||||
V_BSTR(out) = SysAllocString(val);
|
||||
break;
|
||||
default:
|
||||
FIXME("unsupported vt %d\n", V_VT(out));
|
||||
}
|
||||
}
|
||||
|
||||
if(in) {
|
||||
switch(V_VT(in)) {
|
||||
case VT_I4: {
|
||||
WCHAR size[10];
|
||||
static const WCHAR format[] = {'%','d',0};
|
||||
wsprintfW(size, format, V_I4(in));
|
||||
set_font_size(This, size);
|
||||
break;
|
||||
}
|
||||
case VT_BSTR:
|
||||
set_font_size(This, V_BSTR(in));
|
||||
break;
|
||||
default:
|
||||
FIXME("unsupported vt %d\n", V_VT(in));
|
||||
}
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
const cmdtable_t editmode_cmds[] = {
|
||||
{IDM_FONTNAME, NULL, exec_fontname},
|
||||
{IDM_FONTSIZE, NULL, exec_fontsize},
|
||||
{IDM_FORECOLOR, NULL, exec_forecolor},
|
||||
{0,NULL,NULL}
|
||||
};
|
||||
|
|
|
@ -380,6 +380,8 @@ typedef struct {
|
|||
HRESULT (*exec)(HTMLDocument*,DWORD,VARIANT*,VARIANT*);
|
||||
} cmdtable_t;
|
||||
|
||||
extern const cmdtable_t editmode_cmds[];
|
||||
|
||||
/* editor */
|
||||
void handle_edit_event(HTMLDocument*,nsIDOMEvent*);
|
||||
|
||||
|
|
|
@ -44,9 +44,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
|||
#define NSCMD_BOLD "cmd_bold"
|
||||
#define NSCMD_ITALIC "cmd_italic"
|
||||
#define NSCMD_UNDERLINE "cmd_underline"
|
||||
#define NSCMD_FONTCOLOR "cmd_fontColor"
|
||||
#define NSCMD_ALIGN "cmd_align"
|
||||
#define NSCMD_FONTFACE "cmd_fontFace"
|
||||
#define NSCMD_INDENT "cmd_indent"
|
||||
#define NSCMD_OUTDENT "cmd_outdent"
|
||||
#define NSCMD_INSERTHR "cmd_insertHR"
|
||||
|
@ -595,137 +593,6 @@ static HRESULT exec_mshtml_paste(HTMLDocument *This)
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT exec_fontname(HTMLDocument *This, VARIANT *in, VARIANT *out)
|
||||
{
|
||||
TRACE("(%p)->(%p %p)\n", This, in, out);
|
||||
|
||||
if(!This->nscontainer)
|
||||
return E_FAIL;
|
||||
|
||||
if(in) {
|
||||
nsICommandParams *nsparam = create_nscommand_params();
|
||||
char *stra;
|
||||
DWORD len;
|
||||
|
||||
if(V_VT(in) != VT_BSTR) {
|
||||
FIXME("Unsupported vt=%d\n", V_VT(out));
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
len = WideCharToMultiByte(CP_ACP, 0, V_BSTR(in), -1, NULL, 0, NULL, NULL);
|
||||
stra = mshtml_alloc(len);
|
||||
WideCharToMultiByte(CP_ACP, 0, V_BSTR(in), -1, stra, -1, NULL, NULL);
|
||||
nsICommandParams_SetCStringValue(nsparam, NSSTATE_ATTRIBUTE, stra);
|
||||
mshtml_free(stra);
|
||||
|
||||
do_ns_command(This->nscontainer, NSCMD_FONTFACE, nsparam);
|
||||
|
||||
nsICommandParams_Release(nsparam);
|
||||
}
|
||||
|
||||
if(out) {
|
||||
nsICommandParams *nsparam;
|
||||
LPWSTR strw;
|
||||
char *stra;
|
||||
DWORD len;
|
||||
nsresult nsres;
|
||||
|
||||
if(V_VT(out) != VT_BSTR) {
|
||||
FIXME("Unsupported vt=%d\n", V_VT(out));
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
nsparam = create_nscommand_params();
|
||||
|
||||
nsres = get_ns_command_state(This->nscontainer, NSCMD_FONTFACE, nsparam);
|
||||
if(NS_FAILED(nsres))
|
||||
return S_OK;
|
||||
|
||||
nsICommandParams_GetCStringValue(nsparam, NSSTATE_ATTRIBUTE, &stra);
|
||||
nsICommandParams_Release(nsparam);
|
||||
|
||||
len = MultiByteToWideChar(CP_ACP, 0, stra, -1, NULL, 0);
|
||||
strw = mshtml_alloc(len*sizeof(WCHAR));
|
||||
MultiByteToWideChar(CP_ACP, 0, stra, -1, strw, -1);
|
||||
nsfree(stra);
|
||||
|
||||
V_BSTR(out) = SysAllocString(strw);
|
||||
mshtml_free(strw);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT exec_forecolor(HTMLDocument *This, VARIANT *in, VARIANT *out)
|
||||
{
|
||||
TRACE("(%p)->(%p %p)\n", This, in, out);
|
||||
|
||||
if(in) {
|
||||
if(V_VT(in) == VT_I4) {
|
||||
nsICommandParams *nsparam = create_nscommand_params();
|
||||
char color_str[10];
|
||||
|
||||
sprintf(color_str, "#%02x%02x%02x",
|
||||
V_I4(in)&0xff, (V_I4(in)>>8)&0xff, (V_I4(in)>>16)&0xff);
|
||||
|
||||
nsICommandParams_SetCStringValue(nsparam, NSSTATE_ATTRIBUTE, color_str);
|
||||
do_ns_command(This->nscontainer, NSCMD_FONTCOLOR, nsparam);
|
||||
|
||||
nsICommandParams_Release(nsparam);
|
||||
}else {
|
||||
FIXME("unsupported in vt=%d\n", V_VT(in));
|
||||
}
|
||||
}
|
||||
|
||||
if(out) {
|
||||
FIXME("unsupported out\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT exec_fontsize(HTMLDocument *This, VARIANT *in, VARIANT *out)
|
||||
{
|
||||
TRACE("(%p)->(%p %p)\n", This, in, out);
|
||||
|
||||
if(out) {
|
||||
WCHAR val[10] = {0};
|
||||
|
||||
switch(V_VT(out)) {
|
||||
case VT_I4:
|
||||
get_font_size(This, val);
|
||||
V_I4(out) = strtolW(val, NULL, 10);
|
||||
break;
|
||||
case VT_BSTR:
|
||||
get_font_size(This, val);
|
||||
V_BSTR(out) = SysAllocString(val);
|
||||
break;
|
||||
default:
|
||||
FIXME("unsupported vt %d\n", V_VT(out));
|
||||
}
|
||||
}
|
||||
|
||||
if(in) {
|
||||
switch(V_VT(in)) {
|
||||
case VT_I4: {
|
||||
WCHAR size[10];
|
||||
static const WCHAR format[] = {'%','d',0};
|
||||
wsprintfW(size, format, V_I4(in));
|
||||
set_font_size(This, size);
|
||||
break;
|
||||
}
|
||||
case VT_BSTR:
|
||||
set_font_size(This, V_BSTR(in));
|
||||
break;
|
||||
default:
|
||||
FIXME("unsupported vt %d\n", V_VT(in));
|
||||
}
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT exec_bold(HTMLDocument *This)
|
||||
{
|
||||
TRACE("(%p)\n", This);
|
||||
|
@ -1212,7 +1079,9 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
|
|||
return OLECMDERR_E_NOTSUPPORTED;
|
||||
}else if(IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) {
|
||||
HRESULT hres = exec_from_table(This, base_cmds, nCmdID, nCmdexecopt, pvaIn, pvaOut);
|
||||
|
||||
if(hres == OLECMDERR_E_NOTSUPPORTED)
|
||||
hres = exec_from_table(This, editmode_cmds, nCmdID,
|
||||
nCmdexecopt, pvaIn, pvaOut);
|
||||
if(hres != OLECMDERR_E_NOTSUPPORTED)
|
||||
return hres;
|
||||
|
||||
|
@ -1225,10 +1094,6 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
|
|||
if(pvaIn || pvaOut)
|
||||
FIXME("unsupported arguments\n");
|
||||
return exec_mshtml_cut(This);
|
||||
case IDM_FONTNAME:
|
||||
return exec_fontname(This, pvaIn, pvaOut);
|
||||
case IDM_FONTSIZE:
|
||||
return exec_fontsize(This, pvaIn, pvaOut);
|
||||
case IDM_PASTE:
|
||||
if(pvaIn || pvaOut)
|
||||
FIXME("unsupported arguments\n");
|
||||
|
@ -1239,8 +1104,6 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
|
|||
if(pvaIn || pvaOut)
|
||||
FIXME("unsupported arguments\n");
|
||||
return exec_bold(This);
|
||||
case IDM_FORECOLOR:
|
||||
return exec_forecolor(This, pvaIn, pvaOut);
|
||||
case IDM_ITALIC:
|
||||
if(pvaIn || pvaOut)
|
||||
FIXME("unsupported arguments\n");
|
||||
|
|
Loading…
Reference in New Issue