support for DeleteTextTxn, backspace and delete

git-svn-id: svn://10.0.0.236/trunk@17315 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
buster%netscape.com 1999-01-07 17:58:15 +00:00
parent 2659c27999
commit 9a53de3e33
6 changed files with 82 additions and 14 deletions

View File

@ -31,6 +31,7 @@ CPPSRCS = \
ChangeAttributeTxn.cpp \
EditTxn.cpp \
InsertTextTxn.cpp \
DeleteTextTxn.cpp \
$(NULL)
MODULE = editor

View File

@ -20,6 +20,7 @@
#include "editor.h"
#include "ChangeAttributeTxn.h"
#include "InsertTextTxn.h"
#include "DeleteTextTxn.h"
#include "nsIDOMDocument.h"
#include "nsIDOMElement.h"
#include "nsIDOMCharacterData.h"
@ -91,12 +92,6 @@ nsresult
nsEditorKeyListener::GetCharFromKeyCode(PRUint32 aKeyCode, PRBool aIsShift, char *aChar)
{
/* This is completely temporary to get this working while I check out Unicode conversion code. */
#ifdef XP_MAC
if (aChar) {
*aChar = (char)aKeyCode;
return NS_OK;
}
#else
if (aKeyCode >= 0x41 && aKeyCode <= 0x5A) {
if (aIsShift) {
*aChar = (char)aKeyCode;
@ -110,7 +105,6 @@ nsEditorKeyListener::GetCharFromKeyCode(PRUint32 aKeyCode, PRBool aIsShift, char
*aChar = (char)aKeyCode;
return NS_OK;
}
#endif
return NS_ERROR_FAILURE;
}
@ -134,7 +128,43 @@ nsEditorKeyListener::KeyDown(nsIDOMEvent* aKeyEvent)
{
switch(keyCode) {
case nsIDOMEvent::VK_BACK:
{
// XXX: for now, just grab the first text node
nsCOMPtr<nsIDOMNode> currentNode;
nsCOMPtr<nsIDOMNode> textNode;
nsCOMPtr<nsIDOMCharacterData> text;
if (NS_SUCCEEDED(mEditor->GetCurrentNode(getter_AddRefs(currentNode))) &&
NS_SUCCEEDED(mEditor->GetFirstTextNode(currentNode,getter_AddRefs(textNode))) &&
NS_SUCCEEDED(textNode->QueryInterface(kIDOMCharacterDataIID, getter_AddRefs(text))))
{
// XXX: for now, just append the text
PRUint32 offset;
text->GetLength(&offset);
DeleteTextTxn *txn;
txn = new DeleteTextTxn(mEditor, text, offset-1, 1);
mEditor->ExecuteTransaction(txn);
}
}
break;
case nsIDOMEvent::VK_DELETE:
{
// XXX: for now, just grab the first text node
nsCOMPtr<nsIDOMNode> currentNode;
nsCOMPtr<nsIDOMNode> textNode;
nsCOMPtr<nsIDOMCharacterData> text;
if (NS_SUCCEEDED(mEditor->GetCurrentNode(getter_AddRefs(currentNode))) &&
NS_SUCCEEDED(mEditor->GetFirstTextNode(currentNode,getter_AddRefs(textNode))) &&
NS_SUCCEEDED(textNode->QueryInterface(kIDOMCharacterDataIID, getter_AddRefs(text))))
{
// XXX: for now, just append the text
DeleteTextTxn *txn;
txn = new DeleteTextTxn(mEditor, text, 0, 1);
mEditor->ExecuteTransaction(txn);
}
}
break;
case nsIDOMEvent::VK_RETURN:
// Need to implement creation of either <P> or <BR> nodes.
mEditor->Commit(ctrlKey);
@ -149,6 +179,7 @@ nsEditorKeyListener::KeyDown(nsIDOMEvent* aKeyEvent)
key.ToLowerCase();
}
// XXX: for now, just grab the first text node
nsCOMPtr<nsIDOMNode> currentNode;
nsCOMPtr<nsIDOMNode> textNode;
nsCOMPtr<nsIDOMCharacterData> text;

View File

@ -27,6 +27,7 @@ CPPSRCS = \
EditTxn.cpp \
ChangeAttributeTxn.cpp \
InsertTextTxn.cpp \
DeleteTextTxn.cpp \
$(NULL)
CPP_OBJS = \
@ -36,6 +37,7 @@ CPP_OBJS = \
.\$(OBJDIR)\EditTxn.obj \
.\$(OBJDIR)\ChangeAttributeTxn.obj \
.\$(OBJDIR)\InsertTextTxn.obj \
.\$(OBJDIR)\DeleteTextTxn.obj \
$(NULL)
MODULE=editor

View File

@ -31,6 +31,7 @@ CPPSRCS = \
ChangeAttributeTxn.cpp \
EditTxn.cpp \
InsertTextTxn.cpp \
DeleteTextTxn.cpp \
$(NULL)
MODULE = editor

View File

@ -20,6 +20,7 @@
#include "editor.h"
#include "ChangeAttributeTxn.h"
#include "InsertTextTxn.h"
#include "DeleteTextTxn.h"
#include "nsIDOMDocument.h"
#include "nsIDOMElement.h"
#include "nsIDOMCharacterData.h"
@ -91,12 +92,6 @@ nsresult
nsEditorKeyListener::GetCharFromKeyCode(PRUint32 aKeyCode, PRBool aIsShift, char *aChar)
{
/* This is completely temporary to get this working while I check out Unicode conversion code. */
#ifdef XP_MAC
if (aChar) {
*aChar = (char)aKeyCode;
return NS_OK;
}
#else
if (aKeyCode >= 0x41 && aKeyCode <= 0x5A) {
if (aIsShift) {
*aChar = (char)aKeyCode;
@ -110,7 +105,6 @@ nsEditorKeyListener::GetCharFromKeyCode(PRUint32 aKeyCode, PRBool aIsShift, char
*aChar = (char)aKeyCode;
return NS_OK;
}
#endif
return NS_ERROR_FAILURE;
}
@ -134,7 +128,43 @@ nsEditorKeyListener::KeyDown(nsIDOMEvent* aKeyEvent)
{
switch(keyCode) {
case nsIDOMEvent::VK_BACK:
{
// XXX: for now, just grab the first text node
nsCOMPtr<nsIDOMNode> currentNode;
nsCOMPtr<nsIDOMNode> textNode;
nsCOMPtr<nsIDOMCharacterData> text;
if (NS_SUCCEEDED(mEditor->GetCurrentNode(getter_AddRefs(currentNode))) &&
NS_SUCCEEDED(mEditor->GetFirstTextNode(currentNode,getter_AddRefs(textNode))) &&
NS_SUCCEEDED(textNode->QueryInterface(kIDOMCharacterDataIID, getter_AddRefs(text))))
{
// XXX: for now, just append the text
PRUint32 offset;
text->GetLength(&offset);
DeleteTextTxn *txn;
txn = new DeleteTextTxn(mEditor, text, offset-1, 1);
mEditor->ExecuteTransaction(txn);
}
}
break;
case nsIDOMEvent::VK_DELETE:
{
// XXX: for now, just grab the first text node
nsCOMPtr<nsIDOMNode> currentNode;
nsCOMPtr<nsIDOMNode> textNode;
nsCOMPtr<nsIDOMCharacterData> text;
if (NS_SUCCEEDED(mEditor->GetCurrentNode(getter_AddRefs(currentNode))) &&
NS_SUCCEEDED(mEditor->GetFirstTextNode(currentNode,getter_AddRefs(textNode))) &&
NS_SUCCEEDED(textNode->QueryInterface(kIDOMCharacterDataIID, getter_AddRefs(text))))
{
// XXX: for now, just append the text
DeleteTextTxn *txn;
txn = new DeleteTextTxn(mEditor, text, 0, 1);
mEditor->ExecuteTransaction(txn);
}
}
break;
case nsIDOMEvent::VK_RETURN:
// Need to implement creation of either <P> or <BR> nodes.
mEditor->Commit(ctrlKey);
@ -149,6 +179,7 @@ nsEditorKeyListener::KeyDown(nsIDOMEvent* aKeyEvent)
key.ToLowerCase();
}
// XXX: for now, just grab the first text node
nsCOMPtr<nsIDOMNode> currentNode;
nsCOMPtr<nsIDOMNode> textNode;
nsCOMPtr<nsIDOMCharacterData> text;

View File

@ -27,6 +27,7 @@ CPPSRCS = \
EditTxn.cpp \
ChangeAttributeTxn.cpp \
InsertTextTxn.cpp \
DeleteTextTxn.cpp \
$(NULL)
CPP_OBJS = \
@ -36,6 +37,7 @@ CPP_OBJS = \
.\$(OBJDIR)\EditTxn.obj \
.\$(OBJDIR)\ChangeAttributeTxn.obj \
.\$(OBJDIR)\InsertTextTxn.obj \
.\$(OBJDIR)\DeleteTextTxn.obj \
$(NULL)
MODULE=editor