diff --git a/mozilla/webshell/tests/viewer/Makefile b/mozilla/webshell/tests/viewer/Makefile index 3a27768cef1..4ac2ecca0c0 100644 --- a/mozilla/webshell/tests/viewer/Makefile +++ b/mozilla/webshell/tests/viewer/Makefile @@ -109,17 +109,23 @@ $(OBJDIR)/nsViewer.o:: nsViewer.cpp $(OBJDIR)/nsMotifMenu.o:: nsMotifMenu.cpp $(CCC) -o $@ -c $(CFLAGS) nsMotifMenu.cpp $(LDFLAGS) +$(OBJDIR)/nsEditorMode.o:: nsEditorMode.cpp + $(CCC) -o $@ -c $(CFLAGS) nsEditorMode.cpp $(LDFLAGS) + +$(OBJDIR)/nsEditorInterfaces.o:: nsEditorInterfaces.cpp + $(CCC) -o $@ -c $(CFLAGS) nsEditorInterfaces.cpp $(LDFLAGS) + $(OBJDIR)/%.o: %.cpp @$(MAKE_OBJDIR) $(CCC) -o $@ $(CFLAGS) -c $*.cpp -$(PROGS):$(OBJDIR)/%: $(OBJDIR)/%.o $(OBJDIR)/nsDocLoader.o $(OBJDIR)/nsViewer.o $(OBJDIR)/nsMotifMenu.o $(EX_LIBS) +$(PROGS):$(OBJDIR)/%: $(OBJDIR)/%.o $(OBJDIR)/nsDocLoader.o $(OBJDIR)/nsViewer.o $(OBJDIR)/nsMotifMenu.o $(OBJDIR)/nsEditorMode.o $(OBJDIR)/nsEditorInterfaces.o $(EX_LIBS) @$(MAKE_OBJDIR) ifeq ($(OS_ARCH),Linux) - $(CCC) -rdynamic -o $@ $@.o $(OBJDIR)/nsDocLoader.o $(OBJDIR)/nsViewer.o $(OBJDIR)/nsMotifMenu.o $(LDFLAGS) $(EX_LIBS) $(OS_LIBS) -L/usr/X11R6/lib -lXm -lXt -lX11 -lXp -lXext + $(CCC) -rdynamic -o $@ $@.o $(OBJDIR)/nsDocLoader.o $(OBJDIR)/nsViewer.o $(OBJDIR)/nsMotifMenu.o $(OBJDIR)/nsEditorMode.o $(OBJDIR)/nsEditorInterfaces.o $(LDFLAGS) $(EX_LIBS) $(OS_LIBS) -L/usr/X11R6/lib -lXm -lXt -lX11 -lXp -lXext else - $(CCC) -o $@ $@.o -woff 84,85 $(LDFLAGS) $(OBJDIR)/nsDocLoader.o $(OBJDIR)/nsViewer.o $(OBJDIR)/nsMotifMenu.o $(EX_LIBS) $(OS_LIBS) -lXm -lXt -lX11 + $(CCC) -o $@ $@.o -woff 84,85 $(LDFLAGS) $(OBJDIR)/nsDocLoader.o $(OBJDIR)/nsViewer.o $(OBJDIR)/nsMotifMenu.o $(OBJDIR)/nsEditorMode.o $(OBJDIR)/nsEditorInterfaces.o $(EX_LIBS) $(OS_LIBS) -lXm -lXt -lX11 endif export:: diff --git a/mozilla/webshell/tests/viewer/makefile.win b/mozilla/webshell/tests/viewer/makefile.win index 7549b279865..dc58d6bf1e5 100644 --- a/mozilla/webshell/tests/viewer/makefile.win +++ b/mozilla/webshell/tests/viewer/makefile.win @@ -30,11 +30,13 @@ MISCDEP= \ $(DIST)\lib\libplc21.lib -OBJS = \ - .\$(OBJDIR)\winmain.obj \ - .\$(OBJDIR)\nsViewer.obj \ - .\$(OBJDIR)\JSConsole.obj \ - .\$(OBJDIR)\nsDocLoader.obj \ +OBJS = \ + .\$(OBJDIR)\winmain.obj \ + .\$(OBJDIR)\nsViewer.obj \ + .\$(OBJDIR)\JSConsole.obj \ + .\$(OBJDIR)\nsDocLoader.obj \ + .\$(OBJDIR)\nsEditorInterfaces.obj \ + .\$(OBJDIR)\nsEditorMode.obj \ $(NULL) LINCS=-I$(PUBLIC)\raptor -I$(PUBLIC)\xpcom -I$(PUBLIC)\dom -I$(PUBLIC)\js -I$(PUBLIC)\netlib @@ -77,6 +79,7 @@ install:: $(PROGRAM) $(MAKE_INSTALL) samples\test8siz.html $(DIST)\bin\res\samples $(MAKE_INSTALL) samples\test8sca.html $(DIST)\bin\res\samples $(MAKE_INSTALL) samples\test8tab.html $(DIST)\bin\res\samples + $(MAKE_INSTALL) samples\test_ed.html $(DIST)\bin\res\samples $(MAKE_INSTALL) samples\test9.html $(DIST)\bin\res\samples $(MAKE_INSTALL) samples\test9a.html $(DIST)\bin\res\samples $(MAKE_INSTALL) samples\raptor.jpg $(DIST)\bin\res\samples @@ -99,6 +102,7 @@ clobber:: rm -f $(DIST)\bin\res\samples\test8siz.html rm -f $(DIST)\bin\res\samples\test8sca.html rm -f $(DIST)\bin\res\samples\test8tab.html + rm -f $(DIST)\bin\res\samples\test_ed.html rm -f $(DIST)\bin\res\samples\test9.html rm -f $(DIST)\bin\res\samples\test9a.html rm -f $(DIST)\bin\res\samples\raptor.jpg diff --git a/mozilla/webshell/tests/viewer/nsEditorInterfaces.cpp b/mozilla/webshell/tests/viewer/nsEditorInterfaces.cpp new file mode 100644 index 00000000000..39a2a2fdd0a --- /dev/null +++ b/mozilla/webshell/tests/viewer/nsEditorInterfaces.cpp @@ -0,0 +1,241 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +#include "nsEditorInterfaces.h" +#include "nsEditorMode.h" +#include "nsString.h" + +/* + * nsEditorKeyListener implementation + */ + +nsEditorKeyListener::nsEditorKeyListener() +{ +} + +nsEditorKeyListener::~nsEditorKeyListener() +{ +} + +nsresult nsEditorKeyListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) +{ + if (NULL == aInstancePtr) { + return NS_ERROR_NULL_POINTER; + } + static NS_DEFINE_IID(kIDOMKeyListenerIID, NS_IDOMKEYLISTENER_IID); + static NS_DEFINE_IID(kIDOMEventListenerIID, NS_IDOMEVENTLISTENER_IID); + static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); + if (aIID.Equals(kISupportsIID)) { + *aInstancePtr = (void*)(nsISupports*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(kIDOMEventListenerIID)) { + *aInstancePtr = (void*)(nsIDOMEventListener*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(kIDOMKeyListenerIID)) { + *aInstancePtr = (void*)(nsIDOMKeyListener*)this; + AddRef(); + return NS_OK; + } + return NS_NOINTERFACE; +} + +NS_IMPL_ADDREF(nsEditorKeyListener) + +NS_IMPL_RELEASE(nsEditorKeyListener) + +nsresult nsEditorKeyListener::ProcessEvent(nsIDOMEvent* aEvent) +{ + return NS_OK; +} + +nsresult nsEditorKeyListener::GetCharFromKeyCode(PRUint32 aKeyCode, PRBool aIsShift, char *aChar) +{ + /* This is completely temporary to get this working while I check out Unicode conversion code. */ + if (aKeyCode >= 0x41 && aKeyCode <= 0x5A) { + if (aIsShift) { + *aChar = (char)aKeyCode; + } + else { + *aChar = (char)(aKeyCode + 0x20); + } + return NS_OK; + } + else if (aKeyCode >= 0x30 && aKeyCode <= 0x39) { + *aChar = (char)aKeyCode; + return NS_OK; + } + return NS_ERROR_FAILURE; +} + +nsresult nsEditorKeyListener::KeyDown(nsIDOMEvent* aKeyEvent) +{ + PRUint32 mKeyCode; + PRBool mIsShift; + char mChar; + + if (NS_OK == aKeyEvent->GetKeyCode(mKeyCode) && + NS_OK == aKeyEvent->GetShiftKey(mIsShift)) { + switch(mKeyCode) { + case NS_VK_BACK: + nsDeleteLast(); + break; + case NS_VK_RETURN: + // Need to implement creation of either

or
nodes. + break; + default: + // XXX Replace with x-platform NS-virtkeycode transform. + char mChar; + if (NS_OK == GetCharFromKeyCode(mKeyCode, mIsShift, &mChar)) { + nsString* key = new nsString(); + *key += mChar; + if (!mIsShift) { + key->ToLowerCase(); + } + nsAppendText(key); + } + break; + } + } + + return NS_ERROR_BASE; +} + +nsresult nsEditorKeyListener::KeyUp(nsIDOMEvent* aKeyEvent) +{ + return NS_OK; +} + +nsresult nsEditorKeyListener::KeyPress(nsIDOMEvent* aKeyEvent) +{ + return NS_OK; +} + +/* + * nsEditorMouseListener implementation + */ + +nsEditorMouseListener::nsEditorMouseListener() +{ +} + +nsEditorMouseListener::~nsEditorMouseListener() +{ +} + +nsresult nsEditorMouseListener::QueryInterface(REFNSIID aIID, void** aInstancePtr) +{ + if (NULL == aInstancePtr) { + return NS_ERROR_NULL_POINTER; + } + static NS_DEFINE_IID(kIDOMMouseListenerIID, NS_IDOMMOUSELISTENER_IID); + static NS_DEFINE_IID(kIDOMEventListenerIID, NS_IDOMEVENTLISTENER_IID); + static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); + if (aIID.Equals(kISupportsIID)) { + *aInstancePtr = (void*)(nsISupports*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(kIDOMEventListenerIID)) { + *aInstancePtr = (void*)(nsIDOMEventListener*)this; + AddRef(); + return NS_OK; + } + if (aIID.Equals(kIDOMMouseListenerIID)) { + *aInstancePtr = (void*)(nsIDOMMouseListener*)this; + AddRef(); + return NS_OK; + } + return NS_NOINTERFACE; +} + +NS_IMPL_ADDREF(nsEditorMouseListener) + +NS_IMPL_RELEASE(nsEditorMouseListener) + +nsresult nsEditorMouseListener::ProcessEvent(nsIDOMEvent* aEvent) +{ + return NS_OK; +} + +nsresult nsEditorMouseListener::MouseDown(nsIDOMEvent* aMouseEvent) +{ + nsIDOMNode *aTarget; + if (NS_OK == aMouseEvent->GetTarget(&aTarget)) { + nsSetCurrentNode(aTarget); + NS_RELEASE(aTarget); + } + //Should not be error. Need a new way to do return values + return NS_ERROR_BASE; +} + +nsresult nsEditorMouseListener::MouseUp(nsIDOMEvent* aMouseEvent) +{ + return NS_OK; +} + +nsresult nsEditorMouseListener::MouseClick(nsIDOMEvent* aMouseEvent) +{ + return NS_OK; +} + +nsresult nsEditorMouseListener::MouseDblClick(nsIDOMEvent* aMouseEvent) +{ + return NS_OK; +} + +nsresult nsEditorMouseListener::MouseOver(nsIDOMEvent* aMouseEvent) +{ + return NS_OK; +} + +nsresult nsEditorMouseListener::MouseOut(nsIDOMEvent* aMouseEvent) +{ + return NS_OK; +} + +/* + * Factory functions + */ + +nsresult NS_NewEditorKeyListener(nsIDOMEventListener ** aInstancePtrResult) +{ + nsEditorKeyListener* it = new nsEditorKeyListener(); + if (NULL == it) { + return NS_ERROR_OUT_OF_MEMORY; + } + + static NS_DEFINE_IID(kIDOMEventListenerIID, NS_IDOMEVENTLISTENER_IID); + + return it->QueryInterface(kIDOMEventListenerIID, (void **) aInstancePtrResult); +} + +nsresult NS_NewEditorMouseListener(nsIDOMEventListener ** aInstancePtrResult) +{ + nsEditorMouseListener* it = new nsEditorMouseListener(); + if (NULL == it) { + return NS_ERROR_OUT_OF_MEMORY; + } + + static NS_DEFINE_IID(kIDOMEventListenerIID, NS_IDOMEVENTLISTENER_IID); + + return it->QueryInterface(kIDOMEventListenerIID, (void **) aInstancePtrResult); +} + diff --git a/mozilla/webshell/tests/viewer/nsEditorInterfaces.h b/mozilla/webshell/tests/viewer/nsEditorInterfaces.h new file mode 100644 index 00000000000..933353c93f3 --- /dev/null +++ b/mozilla/webshell/tests/viewer/nsEditorInterfaces.h @@ -0,0 +1,69 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + +#ifndef nsEditorInterfaces_h__ +#define nsEditorInterfaces_h__ + +#include "nsIDOMEvent.h" +#include "nsIDOMKeyListener.h" +#include "nsIDOMMouseListener.h" + +//nsIDOMKeyListener interface +class nsEditorKeyListener : public nsIDOMKeyListener { +public: + nsEditorKeyListener(); + virtual ~nsEditorKeyListener(); + + NS_DECL_ISUPPORTS + + virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + +public: + virtual nsresult KeyDown(nsIDOMEvent* aKeyEvent); + virtual nsresult KeyUp(nsIDOMEvent* aKeyEvent); + virtual nsresult KeyPress(nsIDOMEvent* aKeyEvent); + +private: + virtual nsresult GetCharFromKeyCode(PRUint32 aKeyCode, PRBool aIsShift, char *aChar); +}; + +//nsIDOMMouseListener interface +class nsEditorMouseListener : public nsIDOMMouseListener { +public: + nsEditorMouseListener(); + virtual ~nsEditorMouseListener(); + + NS_DECL_ISUPPORTS + + virtual nsresult ProcessEvent(nsIDOMEvent* aEvent); + +public: + virtual nsresult MouseDown(nsIDOMEvent* aMouseEvent); + virtual nsresult MouseUp(nsIDOMEvent* aMouseEvent); + virtual nsresult MouseClick(nsIDOMEvent* aMouseEvent); + virtual nsresult MouseDblClick(nsIDOMEvent* aMouseEvent); + virtual nsresult MouseOver(nsIDOMEvent* aMouseEvent); + virtual nsresult MouseOut(nsIDOMEvent* aMouseEvent); +}; + + +extern nsresult NS_NewEditorKeyListener(nsIDOMEventListener ** aInstancePtrResult); + +extern nsresult NS_NewEditorMouseListener(nsIDOMEventListener ** aInstancePtrResult); + +#endif //nsEditorInterfaces_h__ \ No newline at end of file diff --git a/mozilla/webshell/tests/viewer/nsEditorMode.cpp b/mozilla/webshell/tests/viewer/nsEditorMode.cpp new file mode 100644 index 00000000000..4ade2e67ab5 --- /dev/null +++ b/mozilla/webshell/tests/viewer/nsEditorMode.cpp @@ -0,0 +1,170 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +#include "nsEditorMode.h" +#include "nsEditorInterfaces.h" +#include "nsIDOMEventReceiver.h" +#include "nsIDOMEventCapturer.h" +#include "nsString.h" +#include "nsIDOMText.h" +#include "nsIDOMElement.h" + +static nsIDOMDocument* kDomDoc; +static nsIDOMNode* kCurrentNode; + +static NS_DEFINE_IID(kIDOMTextIID, NS_IDOMTEXT_IID); +static NS_DEFINE_IID(kIDOMElementIID, NS_IDOMELEMENT_IID); + +nsresult nsInitEditorMode(nsIDOMDocument *aDOMDocument) +{ + NS_IF_RELEASE(kCurrentNode); + + kCurrentNode = nsnull; + + kDomDoc = aDOMDocument; + kDomDoc->AddRef(); + + RegisterEventListeners(); + + return NS_OK; +} + +nsresult RegisterEventListeners() +{ + nsIDOMEventReceiver *er; + + static NS_DEFINE_IID(kIDOMEventReceiverIID, NS_IDOMEVENTRECEIVER_IID); + static NS_DEFINE_IID(kIDOMMouseListenerIID, NS_IDOMMOUSELISTENER_IID); + static NS_DEFINE_IID(kIDOMKeyListenerIID, NS_IDOMKEYLISTENER_IID); + + if (NS_OK == kDomDoc->QueryInterface(kIDOMEventReceiverIID, (void**) &er)) { + + nsIDOMEventListener * mouseListener; + nsIDOMEventListener * keyListener; + + if (NS_OK == NS_NewEditorKeyListener(&keyListener)) { + er->AddEventListener(keyListener, kIDOMKeyListenerIID); + } + if (NS_OK == NS_NewEditorMouseListener(&mouseListener)) { + er->AddEventListener(mouseListener, kIDOMMouseListenerIID); + } + } + + return NS_OK; +} + +nsresult nsDeleteLast() +{ + nsIDOMNode *mNode; + nsIDOMText *mText; + nsString mStr; + PRInt32 mLength; + + if (NS_OK == nsGetCurrentNode(&mNode) && + NS_OK == mNode->QueryInterface(kIDOMTextIID, (void**)&mText)) { + mText->GetData(mStr); + mLength = mStr.Length(); + if (mLength > 0) { + mText->Delete(mLength-1, 1); + } + NS_RELEASE(mText); + } + + NS_IF_RELEASE(mNode); + + return NS_OK; +} + +nsresult GetFirstTextNode(nsIDOMNode *aNode, nsIDOMNode **aRetNode) +{ + PRInt32 mType; + PRBool mCNodes; + + *aRetNode = nsnull; + + aNode->GetNodeType(&mType); + + if (aNode->ELEMENT == mType) { + if (NS_OK == aNode->HasChildNodes(&mCNodes) && PR_TRUE == mCNodes) { + nsIDOMNode *mNode, *mSibNode; + + aNode->GetFirstChild(&mNode); + while(nsnull == *aRetNode) { + GetFirstTextNode(mNode, aRetNode); + mNode->GetNextSibling(&mSibNode); + NS_RELEASE(mNode); + mNode = mSibNode; + } + NS_IF_RELEASE(mNode); + } + } + else if (aNode->TEXT == mType) { + *aRetNode = aNode; + aNode->AddRef(); + } + + return NS_OK; +} + +nsresult nsGetCurrentNode(nsIDOMNode ** aNode) +{ + if (kCurrentNode != nsnull) { + *aNode = kCurrentNode; + kCurrentNode->AddRef(); + return NS_OK; + } + + /* If no node set, get first text node */ + nsIDOMNode *mDocNode, *mFirstTextNode; + + if (NS_OK == kDomDoc->GetFirstChild(&mDocNode) && + NS_OK == GetFirstTextNode(mDocNode, &mFirstTextNode)) { + nsSetCurrentNode(mFirstTextNode); + NS_RELEASE(mFirstTextNode); + NS_RELEASE(mDocNode); + *aNode = kCurrentNode; + kCurrentNode->AddRef(); + return NS_OK; + } + + NS_IF_RELEASE(mDocNode); + return NS_ERROR_FAILURE; +} + +nsresult nsSetCurrentNode(nsIDOMNode * aNode) +{ + NS_IF_RELEASE(kCurrentNode); + kCurrentNode = aNode; + kCurrentNode->AddRef(); + return NS_OK; +} + +nsresult nsAppendText(nsString *aStr) +{ + nsIDOMNode *mNode; + nsIDOMText *mText; + + if (NS_OK == nsGetCurrentNode(&mNode) && + NS_OK == mNode->QueryInterface(kIDOMTextIID, (void**)&mText)) { + mText->Append(*aStr); + NS_RELEASE(mText); + } + + NS_IF_RELEASE(mNode); + + return NS_OK; +} \ No newline at end of file diff --git a/mozilla/webshell/tests/viewer/nsEditorMode.h b/mozilla/webshell/tests/viewer/nsEditorMode.h new file mode 100644 index 00000000000..a480f8d8097 --- /dev/null +++ b/mozilla/webshell/tests/viewer/nsEditorMode.h @@ -0,0 +1,33 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + +#ifndef nsEditorMode_h__ +#define nsEditorMode_h__ + +#include "nsIDOMDocument.h" + +extern nsresult nsInitEditorMode(nsIDOMDocument * aDOMDocument); +extern nsresult nsAppendText(nsString *aStr); +extern nsresult nsDeleteLast(); +extern nsresult nsSetCurrentNode(nsIDOMNode *aNode); +extern nsresult nsGetCurrentNode(nsIDOMNode **aNode); + +nsresult RegisterEventListeners(); +nsresult GetFirstTextNode(nsIDOMNode *aNode, nsIDOMNode **aRetNode); + +#endif //nsEditorMode_h__ \ No newline at end of file diff --git a/mozilla/webshell/tests/viewer/nsViewer.cpp b/mozilla/webshell/tests/viewer/nsViewer.cpp index 8c39cc9fddc..2febf51b003 100644 --- a/mozilla/webshell/tests/viewer/nsViewer.cpp +++ b/mozilla/webshell/tests/viewer/nsViewer.cpp @@ -48,6 +48,8 @@ #include "nsIScriptContext.h" #include "nsDocLoader.h" #include "nsIFileWidget.h" +#include "nsIDOMDocument.h" +#include "nsEditorMode.h" #include "nsIContent.h" #include "nsIFrame.h" #include "nsIPresShell.h" @@ -1037,6 +1039,16 @@ nsEventStatus nsViewer::ProcessMenu(PRUint32 aId, WindowData* wd) case JS_CONSOLE: ShowConsole(wd); break; + + case EDITOR_MODE: + if ((nsnull != wd) && (nsnull != wd->ww)) { + nsIDOMDocument* domDoc = nsnull; + if (NS_OK == wd->ww->GetDOMDocument(&domDoc)) { + nsInitEditorMode(domDoc); + domDoc->Release(); + } + } + break; } return(result); diff --git a/mozilla/webshell/tests/viewer/resources.h b/mozilla/webshell/tests/viewer/resources.h index 6ad3fcea563..2447f5cbdd2 100644 --- a/mozilla/webshell/tests/viewer/resources.h +++ b/mozilla/webshell/tests/viewer/resources.h @@ -56,6 +56,7 @@ #define VIEWER_THREE_COLUMN 40035 #define JS_CONSOLE 40100 +#define EDITOR_MODE 40120 #define VIEWER_EDIT_CUT 40201 #define VIEWER_EDIT_COPY 40202 diff --git a/mozilla/webshell/tests/viewer/viewer.rc b/mozilla/webshell/tests/viewer/viewer.rc index 9aa7fd37d71..7dd427ec5d5 100644 --- a/mozilla/webshell/tests/viewer/viewer.rc +++ b/mozilla/webshell/tests/viewer/viewer.rc @@ -80,6 +80,7 @@ VIEWER MENU DISCARDABLE POPUP "&Tools" { MENUITEM "&JavaScript Console", JS_CONSOLE + MENUITEM "&Editor Mode", EDITOR_MODE } }