diff --git a/editor/base/nsHTMLEditRules.cpp b/editor/base/nsHTMLEditRules.cpp index 4ca52716df4c..8db14d5a6d84 100644 --- a/editor/base/nsHTMLEditRules.cpp +++ b/editor/base/nsHTMLEditRules.cpp @@ -35,6 +35,9 @@ const static char* kMOZEditorBogusNodeValue="TRUE"; static NS_DEFINE_IID(kPlaceholderTxnIID, PLACEHOLDER_TXN_IID); +/******************************************************** + * Constructor/Destructor + ********************************************************/ nsHTMLEditRules::nsHTMLEditRules() { @@ -44,6 +47,45 @@ nsHTMLEditRules::~nsHTMLEditRules() { } + +/******************************************************** + * Public methods + ********************************************************/ + +NS_IMETHODIMP +nsHTMLEditRules::WillDoAction(int aAction, nsIDOMSelection *aSelection, + void **aOtherInfo, PRBool *aCancel) +{ + if (!aSelection) + return NS_ERROR_NULL_POINTER; + + switch (aAction) + { + case kInsertBreak: + return WillInsertBreak(aSelection, aCancel); + } + return nsTextEditRules::WillDoAction(aAction, aSelection, aOtherInfo, aCancel); +} + +NS_IMETHODIMP +nsHTMLEditRules::DidDoAction(int aAction, nsIDOMSelection *aSelection, + void **aOtherInfo, nsresult aResult) +{ + if (!aSelection) + return NS_ERROR_NULL_POINTER; + + switch (aAction) + { + case kInsertBreak: + return DidInsertBreak(aSelection, aResult); + } + return nsTextEditRules::DidDoAction(aAction, aSelection, aOtherInfo, aResult); +} + + +/******************************************************** + * Protected methods + ********************************************************/ NS_IMETHODIMP nsHTMLEditRules::WillInsertBreak(nsIDOMSelection *aSelection, PRBool *aCancel) { diff --git a/editor/base/nsHTMLEditRules.h b/editor/base/nsHTMLEditRules.h index ccc4bc02d2eb..f11ff94dd8bd 100644 --- a/editor/base/nsHTMLEditRules.h +++ b/editor/base/nsHTMLEditRules.h @@ -28,6 +28,18 @@ public: nsHTMLEditRules(); virtual ~nsHTMLEditRules(); + // nsEditRules methods + NS_IMETHOD WillDoAction(int aAction, nsIDOMSelection *aSelection, void **aOtherInfo, PRBool *aCancel); + NS_IMETHOD DidDoAction(int aAction, nsIDOMSelection *aSelection, void **aOtherInfo, nsresult aResult); + + // nsHTMLEditRules action id's + enum + { + kInsertBreak = 3000 + }; +protected: + + // nsHTMLEditRules implementation methods NS_IMETHOD WillInsertBreak(nsIDOMSelection *aSelection, PRBool *aCancel); NS_IMETHOD DidInsertBreak(nsIDOMSelection *aSelection, nsresult aResult); diff --git a/editor/base/nsHTMLEditor.cpp b/editor/base/nsHTMLEditor.cpp index 772c876bdc41..08530e51e1b8 100644 --- a/editor/base/nsHTMLEditor.cpp +++ b/editor/base/nsHTMLEditor.cpp @@ -146,7 +146,7 @@ NS_IMETHODIMP nsHTMLEditor::InsertBreak() // pre-process nsEditor::GetSelection(getter_AddRefs(selection)); - result = mRules->WillInsertBreak(selection, &cancel); + result = mRules->WillDoAction(nsHTMLEditRules::kInsertBreak, selection, nsnull, &cancel); if ((PR_FALSE==cancel) && (NS_SUCCEEDED(result))) { // create the new BR node @@ -196,7 +196,7 @@ NS_IMETHODIMP nsHTMLEditor::InsertBreak() } } // post-process, always called if WillInsertBreak didn't return cancel==PR_TRUE - result = mRules->DidInsertBreak(selection, result); + result = mRules->DidDoAction(nsHTMLEditRules::kInsertBreak, selection, nsnull, result); } nsresult endTxnResult = nsEditor::EndTransaction(); // don't return this result! NS_ASSERTION ((NS_SUCCEEDED(endTxnResult)), "bad end transaction result"); diff --git a/editor/base/nsTextEditRules.cpp b/editor/base/nsTextEditRules.cpp index 3431850787a2..668c2a205a2b 100644 --- a/editor/base/nsTextEditRules.cpp +++ b/editor/base/nsTextEditRules.cpp @@ -36,9 +36,9 @@ const static char* kMOZEditorBogusNodeValue="TRUE"; static NS_DEFINE_IID(kPlaceholderTxnIID, PLACEHOLDER_TXN_IID); -/*-------------------------------------------------------------------* +/******************************************************** * Helper Functions - *-------------------------------------------------------------------*/ + ********************************************************/ PRBool nsTextEditRules::NodeIsType(nsIDOMNode *aNode, nsIAtom *aTag) { @@ -96,10 +96,9 @@ PRBool nsTextEditRules::IsEditable(nsIDOMNode *aNode) } -/*-------------------------------------------------------------------* +/******************************************************** * Constructor/Destructor - *-------------------------------------------------------------------*/ - + ********************************************************/ nsTextEditRules::nsTextEditRules() { @@ -112,32 +111,66 @@ nsTextEditRules::~nsTextEditRules() } - -/*-------------------------------------------------------------------* +/******************************************************** * Public methods - *-------------------------------------------------------------------*/ - + ********************************************************/ NS_IMETHODIMP -nsTextEditRules::Init(nsTextEditor *aEditor) +nsTextEditRules::Init(nsIEditor *aEditor) { // null aNextRule is ok if (!aEditor) { return NS_ERROR_NULL_POINTER; } - mEditor = aEditor; // we hold a non-refcounted reference back to our editor + mEditor = (nsTextEditor*)aEditor; // we hold a non-refcounted reference back to our editor return NS_OK; } -NS_IMETHODIMP -nsTextEditRules::WillInsertBreak(nsIDOMSelection *aSelection, PRBool *aCancel) +NS_IMETHODIMP +nsTextEditRules::WillDoAction(int aAction, nsIDOMSelection *aSelection, + void **aOtherInfo, PRBool *aCancel) { - return NS_ERROR_NOT_IMPLEMENTED; + if (!aSelection) + return NS_ERROR_NULL_POINTER; + + switch (aAction) + { + case kInsertText: + return WillInsertText(aSelection, aCancel, (PlaceholderTxn**)aOtherInfo); + case kDeleteSelection: + return WillDeleteSelection(aSelection, aCancel); + case kUndo: + return WillUndo(aSelection, aCancel); + case kRedo: + return WillRedo(aSelection, aCancel); + } + return NS_ERROR_FAILURE; } + +NS_IMETHODIMP +nsTextEditRules::DidDoAction(int aAction, nsIDOMSelection *aSelection, + void **aOtherInfo, nsresult aResult) +{ + if (!aSelection) + return NS_ERROR_NULL_POINTER; + + switch (aAction) + { + case kInsertText: + return DidInsertText(aSelection, aResult); + case kDeleteSelection: + return DidDeleteSelection(aSelection, aResult); + case kUndo: + return DidUndo(aSelection, aResult); + case kRedo: + return DidRedo(aSelection, aResult); + } + return NS_ERROR_FAILURE; +} + + +/******************************************************** + * Protected methods + ********************************************************/ -NS_IMETHODIMP -nsTextEditRules::DidInsertBreak(nsIDOMSelection *aSelection, nsresult aResult) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} NS_IMETHODIMP nsTextEditRules::WillInsert(nsIDOMSelection *aSelection, PRBool *aCancel) @@ -166,18 +199,13 @@ nsTextEditRules::DidInsert(nsIDOMSelection *aSelection, nsresult aResult) NS_IMETHODIMP nsTextEditRules::WillInsertText(nsIDOMSelection *aSelection, - const nsString &aInputString, - PRBool *aCancel, - nsString &aOutputString, - TypeInState &aTypeInState, + PRBool *aCancel, PlaceholderTxn **aTxn) { if (!aSelection || !aCancel) { return NS_ERROR_NULL_POINTER; } // initialize out param *aCancel = PR_FALSE; - // by default, we insert what we're told to insert - aOutputString = aInputString; - TypeInState typeInState = aTypeInState; // remember the initial type-in state + TypeInState typeInState = mEditor->GetTypeInState(); if (mBogusNode || (PR_TRUE==typeInState.IsAnySet())) { nsresult result = TransactionFactory::GetNewTransaction(kPlaceholderTxnIID, (EditTxn **)aTxn); @@ -199,7 +227,6 @@ nsTextEditRules::WillInsertText(nsIDOMSelection *aSelection, NS_IMETHODIMP nsTextEditRules::DidInsertText(nsIDOMSelection *aSelection, - const nsString& aStringToInsert, nsresult aResult) { return DidInsert(aSelection, aResult); diff --git a/editor/base/nsTextEditRules.h b/editor/base/nsTextEditRules.h index c7f3d6d727da..18399280ea76 100644 --- a/editor/base/nsTextEditRules.h +++ b/editor/base/nsTextEditRules.h @@ -20,12 +20,13 @@ #define nsTextEditRules_h__ #include "nsIEditor.h" +#include "nsEditRules.h" #include "nsCOMPtr.h" #include "nsIDOMNode.h" #include "TypeInState.h" -class nsTextEditor; class PlaceholderTxn; +class nsTextEditor; /** Object that encapsulates HTML text-specific editing rules. * @@ -38,25 +39,34 @@ class PlaceholderTxn; * 2. Selection must not be explicitly set by the rule method. * Any manipulation of Selection must be done by the editor. */ -class nsTextEditRules +class nsTextEditRules : public nsEditRules { public: nsTextEditRules(); virtual ~nsTextEditRules(); - NS_IMETHOD Init(nsTextEditor *aEditor); + // nsEditRules methods + NS_IMETHOD Init(nsIEditor *aEditor); + NS_IMETHOD WillDoAction(int aAction, nsIDOMSelection *aSelection, void **aOtherInfo, PRBool *aCancel); + NS_IMETHOD DidDoAction(int aAction, nsIDOMSelection *aSelection, void **aOtherInfo, nsresult aResult); - NS_IMETHOD WillInsertBreak(nsIDOMSelection *aSelection, PRBool *aCancel); - NS_IMETHOD DidInsertBreak(nsIDOMSelection *aSelection, nsresult aResult); + // nsTextEditRules action id's + enum + { + kUndo = 1000, + kRedo = 1001, + kInsertText = 2000, + kDeleteSelection = 2001 + }; + +protected: + // nsTextEditRules implementation methods NS_IMETHOD WillInsertText(nsIDOMSelection *aSelection, - const nsString &aInputString, PRBool *aCancel, - nsString &aOutputString, - TypeInState &aTypeInState, PlaceholderTxn **aTxn); - NS_IMETHOD DidInsertText(nsIDOMSelection *aSelection, const nsString& aStringToInsert, nsresult aResult); + NS_IMETHOD DidInsertText(nsIDOMSelection *aSelection, nsresult aResult); NS_IMETHOD CreateStyleForInsertText(nsIDOMSelection *aSelection, TypeInState &aTypeInState); NS_IMETHOD WillInsert(nsIDOMSelection *aSelection, PRBool *aCancel); @@ -71,8 +81,6 @@ public: NS_IMETHOD WillRedo(nsIDOMSelection *aSelection, PRBool *aCancel); NS_IMETHOD DidRedo(nsIDOMSelection *aSelection, nsresult aResult); -protected: - // helper functions static PRBool NodeIsType(nsIDOMNode *aNode, nsIAtom *aTag); static PRBool IsEditable(nsIDOMNode *aNode); @@ -83,6 +91,7 @@ protected: */ NS_IMETHOD InsertStyleNode(nsIDOMNode *aNode, nsIAtom *aTag, nsIDOMSelection *aSelection); + // data nsTextEditor *mEditor; // note that we do not refcount the editor nsCOMPtr mBogusNode; // magic node acts as placeholder in empty doc }; diff --git a/editor/base/nsTextEditor.cpp b/editor/base/nsTextEditor.cpp index 0d3da1ee0146..76636e844cbc 100644 --- a/editor/base/nsTextEditor.cpp +++ b/editor/base/nsTextEditor.cpp @@ -650,12 +650,12 @@ NS_IMETHODIMP nsTextEditor::DeleteSelection(nsIEditor::Direction aDir) // pre-process nsEditor::GetSelection(getter_AddRefs(selection)); - result = mRules->WillDeleteSelection(selection, &cancel); + result = mRules->WillDoAction(nsTextEditRules::kDeleteSelection, selection, nsnull, &cancel); if ((PR_FALSE==cancel) && (NS_SUCCEEDED(result))) { result = nsEditor::DeleteSelection(aDir); // post-process - result = mRules->DidDeleteSelection(selection, result); + result = mRules->DidDoAction(nsTextEditRules::kDeleteSelection, selection, nsnull, result); } nsresult endTxnResult = nsEditor::EndTransaction(); // don't return this result! @@ -683,13 +683,12 @@ NS_IMETHODIMP nsTextEditor::InsertText(const nsString& aStringToInsert) nsEditor::GetSelection(getter_AddRefs(selection)); nsAutoString stringToInsert; PlaceholderTxn *placeholderTxn=nsnull; - nsresult result = mRules->WillInsertText(selection, aStringToInsert, &cancel, stringToInsert, - mTypeInState, &placeholderTxn); + nsresult result = mRules->WillDoAction(nsTextEditRules::kInsertText, selection, (void**)&placeholderTxn, &cancel); if ((PR_FALSE==cancel) && (NS_SUCCEEDED(result))) { result = nsEditor::InsertText(stringToInsert); // post-process - result = mRules->DidInsertText(selection, stringToInsert, result); + result = mRules->DidDoAction(nsTextEditRules::kInsertText, selection, nsnull, result); } if (placeholderTxn) placeholderTxn->SetAbsorb(PR_FALSE); // this ends the merging of txns into placeholderTxn @@ -721,12 +720,12 @@ NS_IMETHODIMP nsTextEditor::Undo(PRUint32 aCount) // pre-process nsEditor::GetSelection(getter_AddRefs(selection)); - nsresult result = mRules->WillUndo(selection, &cancel); + nsresult result = mRules->WillDoAction(nsTextEditRules::kUndo, selection, nsnull, &cancel); if ((PR_FALSE==cancel) && (NS_SUCCEEDED(result))) { result = nsEditor::Undo(aCount); nsEditor::GetSelection(getter_AddRefs(selection)); - result = mRules->DidUndo(selection, result); + result = mRules->DidDoAction(nsTextEditRules::kUndo, selection, nsnull, result); } return result; } @@ -743,12 +742,12 @@ NS_IMETHODIMP nsTextEditor::Redo(PRUint32 aCount) // pre-process nsEditor::GetSelection(getter_AddRefs(selection)); - nsresult result = mRules->WillRedo(selection, &cancel); + nsresult result = mRules->WillDoAction(nsTextEditRules::kRedo, selection, nsnull, &cancel); if ((PR_FALSE==cancel) && (NS_SUCCEEDED(result))) { result = nsEditor::Redo(aCount); nsEditor::GetSelection(getter_AddRefs(selection)); - result = mRules->DidRedo(selection, result); + result = mRules->DidDoAction(nsTextEditRules::kRedo, selection, nsnull, result); } return result; } diff --git a/editor/base/nsTextEditor.h b/editor/base/nsTextEditor.h index bd25b189b029..b9158655e424 100644 --- a/editor/base/nsTextEditor.h +++ b/editor/base/nsTextEditor.h @@ -161,17 +161,21 @@ protected: NS_IMETHOD SetTypeInStateForProperty(TypeInState &aTypeInState, nsIAtom *aPropName); + + TypeInState GetTypeInState() { return mTypeInState;} // Data members protected: - TypeInState mTypeInState; + TypeInState mTypeInState; // xxx - isn't it wrong to have xpcom classes as members? shouldn't it be a pointer? nsTextEditRules* mRules; nsCOMPtr mKeyListenerP; nsCOMPtr mMouseListenerP; nsCOMPtr mTextListenerP; nsCOMPtr mDragListenerP; +// friends +friend class nsTextEditRules; }; #endif //nsTextEditor_h__ diff --git a/editor/libeditor/html/nsHTMLEditRules.cpp b/editor/libeditor/html/nsHTMLEditRules.cpp index 4ca52716df4c..8db14d5a6d84 100644 --- a/editor/libeditor/html/nsHTMLEditRules.cpp +++ b/editor/libeditor/html/nsHTMLEditRules.cpp @@ -35,6 +35,9 @@ const static char* kMOZEditorBogusNodeValue="TRUE"; static NS_DEFINE_IID(kPlaceholderTxnIID, PLACEHOLDER_TXN_IID); +/******************************************************** + * Constructor/Destructor + ********************************************************/ nsHTMLEditRules::nsHTMLEditRules() { @@ -44,6 +47,45 @@ nsHTMLEditRules::~nsHTMLEditRules() { } + +/******************************************************** + * Public methods + ********************************************************/ + +NS_IMETHODIMP +nsHTMLEditRules::WillDoAction(int aAction, nsIDOMSelection *aSelection, + void **aOtherInfo, PRBool *aCancel) +{ + if (!aSelection) + return NS_ERROR_NULL_POINTER; + + switch (aAction) + { + case kInsertBreak: + return WillInsertBreak(aSelection, aCancel); + } + return nsTextEditRules::WillDoAction(aAction, aSelection, aOtherInfo, aCancel); +} + +NS_IMETHODIMP +nsHTMLEditRules::DidDoAction(int aAction, nsIDOMSelection *aSelection, + void **aOtherInfo, nsresult aResult) +{ + if (!aSelection) + return NS_ERROR_NULL_POINTER; + + switch (aAction) + { + case kInsertBreak: + return DidInsertBreak(aSelection, aResult); + } + return nsTextEditRules::DidDoAction(aAction, aSelection, aOtherInfo, aResult); +} + + +/******************************************************** + * Protected methods + ********************************************************/ NS_IMETHODIMP nsHTMLEditRules::WillInsertBreak(nsIDOMSelection *aSelection, PRBool *aCancel) { diff --git a/editor/libeditor/html/nsHTMLEditRules.h b/editor/libeditor/html/nsHTMLEditRules.h index ccc4bc02d2eb..f11ff94dd8bd 100644 --- a/editor/libeditor/html/nsHTMLEditRules.h +++ b/editor/libeditor/html/nsHTMLEditRules.h @@ -28,6 +28,18 @@ public: nsHTMLEditRules(); virtual ~nsHTMLEditRules(); + // nsEditRules methods + NS_IMETHOD WillDoAction(int aAction, nsIDOMSelection *aSelection, void **aOtherInfo, PRBool *aCancel); + NS_IMETHOD DidDoAction(int aAction, nsIDOMSelection *aSelection, void **aOtherInfo, nsresult aResult); + + // nsHTMLEditRules action id's + enum + { + kInsertBreak = 3000 + }; +protected: + + // nsHTMLEditRules implementation methods NS_IMETHOD WillInsertBreak(nsIDOMSelection *aSelection, PRBool *aCancel); NS_IMETHOD DidInsertBreak(nsIDOMSelection *aSelection, nsresult aResult); diff --git a/editor/libeditor/html/nsHTMLEditor.cpp b/editor/libeditor/html/nsHTMLEditor.cpp index 772c876bdc41..08530e51e1b8 100644 --- a/editor/libeditor/html/nsHTMLEditor.cpp +++ b/editor/libeditor/html/nsHTMLEditor.cpp @@ -146,7 +146,7 @@ NS_IMETHODIMP nsHTMLEditor::InsertBreak() // pre-process nsEditor::GetSelection(getter_AddRefs(selection)); - result = mRules->WillInsertBreak(selection, &cancel); + result = mRules->WillDoAction(nsHTMLEditRules::kInsertBreak, selection, nsnull, &cancel); if ((PR_FALSE==cancel) && (NS_SUCCEEDED(result))) { // create the new BR node @@ -196,7 +196,7 @@ NS_IMETHODIMP nsHTMLEditor::InsertBreak() } } // post-process, always called if WillInsertBreak didn't return cancel==PR_TRUE - result = mRules->DidInsertBreak(selection, result); + result = mRules->DidDoAction(nsHTMLEditRules::kInsertBreak, selection, nsnull, result); } nsresult endTxnResult = nsEditor::EndTransaction(); // don't return this result! NS_ASSERTION ((NS_SUCCEEDED(endTxnResult)), "bad end transaction result"); diff --git a/editor/libeditor/text/nsTextEditRules.cpp b/editor/libeditor/text/nsTextEditRules.cpp index 3431850787a2..668c2a205a2b 100644 --- a/editor/libeditor/text/nsTextEditRules.cpp +++ b/editor/libeditor/text/nsTextEditRules.cpp @@ -36,9 +36,9 @@ const static char* kMOZEditorBogusNodeValue="TRUE"; static NS_DEFINE_IID(kPlaceholderTxnIID, PLACEHOLDER_TXN_IID); -/*-------------------------------------------------------------------* +/******************************************************** * Helper Functions - *-------------------------------------------------------------------*/ + ********************************************************/ PRBool nsTextEditRules::NodeIsType(nsIDOMNode *aNode, nsIAtom *aTag) { @@ -96,10 +96,9 @@ PRBool nsTextEditRules::IsEditable(nsIDOMNode *aNode) } -/*-------------------------------------------------------------------* +/******************************************************** * Constructor/Destructor - *-------------------------------------------------------------------*/ - + ********************************************************/ nsTextEditRules::nsTextEditRules() { @@ -112,32 +111,66 @@ nsTextEditRules::~nsTextEditRules() } - -/*-------------------------------------------------------------------* +/******************************************************** * Public methods - *-------------------------------------------------------------------*/ - + ********************************************************/ NS_IMETHODIMP -nsTextEditRules::Init(nsTextEditor *aEditor) +nsTextEditRules::Init(nsIEditor *aEditor) { // null aNextRule is ok if (!aEditor) { return NS_ERROR_NULL_POINTER; } - mEditor = aEditor; // we hold a non-refcounted reference back to our editor + mEditor = (nsTextEditor*)aEditor; // we hold a non-refcounted reference back to our editor return NS_OK; } -NS_IMETHODIMP -nsTextEditRules::WillInsertBreak(nsIDOMSelection *aSelection, PRBool *aCancel) +NS_IMETHODIMP +nsTextEditRules::WillDoAction(int aAction, nsIDOMSelection *aSelection, + void **aOtherInfo, PRBool *aCancel) { - return NS_ERROR_NOT_IMPLEMENTED; + if (!aSelection) + return NS_ERROR_NULL_POINTER; + + switch (aAction) + { + case kInsertText: + return WillInsertText(aSelection, aCancel, (PlaceholderTxn**)aOtherInfo); + case kDeleteSelection: + return WillDeleteSelection(aSelection, aCancel); + case kUndo: + return WillUndo(aSelection, aCancel); + case kRedo: + return WillRedo(aSelection, aCancel); + } + return NS_ERROR_FAILURE; } + +NS_IMETHODIMP +nsTextEditRules::DidDoAction(int aAction, nsIDOMSelection *aSelection, + void **aOtherInfo, nsresult aResult) +{ + if (!aSelection) + return NS_ERROR_NULL_POINTER; + + switch (aAction) + { + case kInsertText: + return DidInsertText(aSelection, aResult); + case kDeleteSelection: + return DidDeleteSelection(aSelection, aResult); + case kUndo: + return DidUndo(aSelection, aResult); + case kRedo: + return DidRedo(aSelection, aResult); + } + return NS_ERROR_FAILURE; +} + + +/******************************************************** + * Protected methods + ********************************************************/ -NS_IMETHODIMP -nsTextEditRules::DidInsertBreak(nsIDOMSelection *aSelection, nsresult aResult) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} NS_IMETHODIMP nsTextEditRules::WillInsert(nsIDOMSelection *aSelection, PRBool *aCancel) @@ -166,18 +199,13 @@ nsTextEditRules::DidInsert(nsIDOMSelection *aSelection, nsresult aResult) NS_IMETHODIMP nsTextEditRules::WillInsertText(nsIDOMSelection *aSelection, - const nsString &aInputString, - PRBool *aCancel, - nsString &aOutputString, - TypeInState &aTypeInState, + PRBool *aCancel, PlaceholderTxn **aTxn) { if (!aSelection || !aCancel) { return NS_ERROR_NULL_POINTER; } // initialize out param *aCancel = PR_FALSE; - // by default, we insert what we're told to insert - aOutputString = aInputString; - TypeInState typeInState = aTypeInState; // remember the initial type-in state + TypeInState typeInState = mEditor->GetTypeInState(); if (mBogusNode || (PR_TRUE==typeInState.IsAnySet())) { nsresult result = TransactionFactory::GetNewTransaction(kPlaceholderTxnIID, (EditTxn **)aTxn); @@ -199,7 +227,6 @@ nsTextEditRules::WillInsertText(nsIDOMSelection *aSelection, NS_IMETHODIMP nsTextEditRules::DidInsertText(nsIDOMSelection *aSelection, - const nsString& aStringToInsert, nsresult aResult) { return DidInsert(aSelection, aResult); diff --git a/editor/libeditor/text/nsTextEditRules.h b/editor/libeditor/text/nsTextEditRules.h index c7f3d6d727da..18399280ea76 100644 --- a/editor/libeditor/text/nsTextEditRules.h +++ b/editor/libeditor/text/nsTextEditRules.h @@ -20,12 +20,13 @@ #define nsTextEditRules_h__ #include "nsIEditor.h" +#include "nsEditRules.h" #include "nsCOMPtr.h" #include "nsIDOMNode.h" #include "TypeInState.h" -class nsTextEditor; class PlaceholderTxn; +class nsTextEditor; /** Object that encapsulates HTML text-specific editing rules. * @@ -38,25 +39,34 @@ class PlaceholderTxn; * 2. Selection must not be explicitly set by the rule method. * Any manipulation of Selection must be done by the editor. */ -class nsTextEditRules +class nsTextEditRules : public nsEditRules { public: nsTextEditRules(); virtual ~nsTextEditRules(); - NS_IMETHOD Init(nsTextEditor *aEditor); + // nsEditRules methods + NS_IMETHOD Init(nsIEditor *aEditor); + NS_IMETHOD WillDoAction(int aAction, nsIDOMSelection *aSelection, void **aOtherInfo, PRBool *aCancel); + NS_IMETHOD DidDoAction(int aAction, nsIDOMSelection *aSelection, void **aOtherInfo, nsresult aResult); - NS_IMETHOD WillInsertBreak(nsIDOMSelection *aSelection, PRBool *aCancel); - NS_IMETHOD DidInsertBreak(nsIDOMSelection *aSelection, nsresult aResult); + // nsTextEditRules action id's + enum + { + kUndo = 1000, + kRedo = 1001, + kInsertText = 2000, + kDeleteSelection = 2001 + }; + +protected: + // nsTextEditRules implementation methods NS_IMETHOD WillInsertText(nsIDOMSelection *aSelection, - const nsString &aInputString, PRBool *aCancel, - nsString &aOutputString, - TypeInState &aTypeInState, PlaceholderTxn **aTxn); - NS_IMETHOD DidInsertText(nsIDOMSelection *aSelection, const nsString& aStringToInsert, nsresult aResult); + NS_IMETHOD DidInsertText(nsIDOMSelection *aSelection, nsresult aResult); NS_IMETHOD CreateStyleForInsertText(nsIDOMSelection *aSelection, TypeInState &aTypeInState); NS_IMETHOD WillInsert(nsIDOMSelection *aSelection, PRBool *aCancel); @@ -71,8 +81,6 @@ public: NS_IMETHOD WillRedo(nsIDOMSelection *aSelection, PRBool *aCancel); NS_IMETHOD DidRedo(nsIDOMSelection *aSelection, nsresult aResult); -protected: - // helper functions static PRBool NodeIsType(nsIDOMNode *aNode, nsIAtom *aTag); static PRBool IsEditable(nsIDOMNode *aNode); @@ -83,6 +91,7 @@ protected: */ NS_IMETHOD InsertStyleNode(nsIDOMNode *aNode, nsIAtom *aTag, nsIDOMSelection *aSelection); + // data nsTextEditor *mEditor; // note that we do not refcount the editor nsCOMPtr mBogusNode; // magic node acts as placeholder in empty doc };