зеркало из https://github.com/mozilla/pjs.git
ChangedAttributeTxn implementation
base class EditTxn implementation
This commit is contained in:
Родитель
d3bf0584b2
Коммит
2a75ddbb5c
|
@ -0,0 +1,101 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 "ChangeAttributeTxn.h"
|
||||
#include "editor.h"
|
||||
|
||||
// note that aEditor is not refcounted
|
||||
ChangeAttributeTxn::ChangeAttributeTxn(nsEditor *aEditor,
|
||||
nsIDOMElement *aElement,
|
||||
const nsString& aAttribute,
|
||||
const nsString& aValue)
|
||||
: EditTxn(aEditor)
|
||||
{
|
||||
mElement = aElement;
|
||||
mAttribute = aAttribute;
|
||||
mValue = aValue;
|
||||
mAttributeWasSet=PR_FALSE;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Do(void)
|
||||
{
|
||||
// need to get the current value of the attribute and save it, and set mAttributeWasSet
|
||||
const int stringlen=100;
|
||||
char attributeAsCString[stringlen+1];
|
||||
char valueAsCString[stringlen+1];
|
||||
mAttribute.ToCString(attributeAsCString, stringlen);
|
||||
mAttributeWasSet;
|
||||
mEditor->GetAttributeValue(mElement, mAttribute, mUndoValue, mAttributeWasSet);
|
||||
|
||||
if (mAttributeWasSet)
|
||||
mUndoValue.ToCString(valueAsCString, stringlen);
|
||||
|
||||
// now set the attribute to the new value
|
||||
return mEditor->SetAttribute(mElement, mAttribute, mValue);
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Undo(void)
|
||||
{
|
||||
nsresult result=NS_OK;
|
||||
if (PR_TRUE==mAttributeWasSet)
|
||||
{
|
||||
result = mEditor->SetAttribute(mElement, mAttribute, mUndoValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = mEditor->RemoveAttribute(mElement, mAttribute);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Redo(void)
|
||||
{
|
||||
return mEditor->SetAttribute(mElement, mAttribute, mValue);
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetIsTransient(PRBool *aIsTransient)
|
||||
{
|
||||
if (nsnull!=aIsTransient)
|
||||
*aIsTransient = PR_FALSE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Merge(PRBool *aDidMerge, nsITransaction *aTransaction)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Write(nsIOutputStream *aOutputStream)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetUndoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetRedoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 ChangeAttributeTxn_h__
|
||||
#define ChangeAttributeTxn_h__
|
||||
|
||||
#include "EditTxn.h"
|
||||
|
||||
class nsIDOMElement;
|
||||
|
||||
/**
|
||||
* A transaction that changes an attribute of a content node.
|
||||
*/
|
||||
class ChangeAttributeTxn : public EditTxn
|
||||
{
|
||||
public:
|
||||
|
||||
ChangeAttributeTxn(nsEditor *aEditor,
|
||||
nsIDOMElement *aElement,
|
||||
const nsString& aAttribute,
|
||||
const nsString& aValue);
|
||||
|
||||
virtual nsresult Do(void);
|
||||
|
||||
virtual nsresult Undo(void);
|
||||
|
||||
virtual nsresult Redo(void);
|
||||
|
||||
virtual nsresult GetIsTransient(PRBool *aIsTransient);
|
||||
|
||||
virtual nsresult Merge(PRBool *aDidMerge, nsITransaction *aTransaction);
|
||||
|
||||
virtual nsresult Write(nsIOutputStream *aOutputStream);
|
||||
|
||||
virtual nsresult GetUndoString(nsString **aString);
|
||||
|
||||
virtual nsresult GetRedoString(nsString **aString);
|
||||
|
||||
protected:
|
||||
nsIDOMElement *mElement;
|
||||
nsString mAttribute;
|
||||
nsString mValue;
|
||||
nsString mUndoValue;
|
||||
PRBool mAttributeWasSet;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,98 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 "EditTxn.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kITransactionIID, NS_ITRANSACTION_IID);
|
||||
|
||||
NS_IMPL_ADDREF(EditTxn)
|
||||
NS_IMPL_RELEASE(EditTxn)
|
||||
|
||||
// note that aEditor is not refcounted
|
||||
EditTxn::EditTxn(nsEditor *aEditor)
|
||||
{
|
||||
NS_ASSERTION(nsnull!=aEditor, "null aEditor arg to EditTxn constructor");
|
||||
mEditor = aEditor;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Do(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Undo(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Redo(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetIsTransient(PRBool *aIsTransient)
|
||||
{
|
||||
if (nsnull!=aIsTransient)
|
||||
*aIsTransient = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Merge(PRBool *aDidMerge, nsITransaction *aTransaction)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Write(nsIOutputStream *aOutputStream)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetUndoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetRedoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
EditTxn::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
if (NULL == aInstancePtr) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = (void*)(nsISupports*)this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(kITransactionIID)) {
|
||||
*aInstancePtr = (void*)(nsITransaction*)this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
*aInstancePtr = 0;
|
||||
return NS_NOINTERFACE;
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 EditTxn_h__
|
||||
#define EditTxn_h__
|
||||
|
||||
#include "nsITransaction.h"
|
||||
class nsEditor;
|
||||
|
||||
/**
|
||||
* base class for all document editing transactions.
|
||||
* provides access to the nsEditor that created this transaction.
|
||||
*/
|
||||
class EditTxn : public nsITransaction
|
||||
{
|
||||
public:
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
EditTxn(nsEditor *aEditor);
|
||||
|
||||
virtual nsresult Do(void);
|
||||
|
||||
virtual nsresult Undo(void);
|
||||
|
||||
virtual nsresult Redo(void);
|
||||
|
||||
virtual nsresult GetIsTransient(PRBool *aIsTransient);
|
||||
|
||||
virtual nsresult Merge(PRBool *aDidMerge, nsITransaction *aTransaction);
|
||||
|
||||
virtual nsresult Write(nsIOutputStream *aOutputStream);
|
||||
|
||||
virtual nsresult GetUndoString(nsString **aString);
|
||||
|
||||
virtual nsresult GetRedoString(nsString **aString);
|
||||
|
||||
protected:
|
||||
|
||||
nsEditor *mEditor;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
|
@ -24,12 +24,16 @@ CPPSRCS = \
|
|||
editor.cpp \
|
||||
editorInterfaces.cpp \
|
||||
nsEditFactory.cpp \
|
||||
EditTxn.cpp \
|
||||
ChangeAttributeTxn.cpp \
|
||||
$(NULL)
|
||||
|
||||
CPP_OBJS = \
|
||||
.\$(OBJDIR)\editor.obj \
|
||||
.\$(OBJDIR)\nsEditFactory.obj \
|
||||
.\$(OBJDIR)\editorInterfaces.obj \
|
||||
.\$(OBJDIR)\EditTxn.obj \
|
||||
.\$(OBJDIR)\ChangeAttributeTxn.obj \
|
||||
$(NULL)
|
||||
|
||||
MODULE=editor
|
||||
|
@ -40,6 +44,7 @@ LINCS=-I$(PUBLIC)\editor \
|
|||
-I$(PUBLIC)\xpcom \
|
||||
-I$(PUBLIC)\raptor \
|
||||
-I$(PUBLIC)\js \
|
||||
-I$(PUBLIC)\txmgr \
|
||||
-I$(PUBLIC)\dom
|
||||
|
||||
MAKE_OBJ_TYPE = DLL
|
||||
|
|
|
@ -119,7 +119,7 @@ nsEditFactory::nsEditFactory(const nsCID &aClass)
|
|||
|
||||
nsEditFactory::~nsEditFactory()
|
||||
{
|
||||
nsRepository::UnregisterFactory(mCID, (nsIFactory *)this); //we are out of ref counts anyway
|
||||
//nsRepository::UnregisterFactory(mCID, (nsIFactory *)this); //we are out of ref counts anyway
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 "ChangeAttributeTxn.h"
|
||||
#include "editor.h"
|
||||
|
||||
// note that aEditor is not refcounted
|
||||
ChangeAttributeTxn::ChangeAttributeTxn(nsEditor *aEditor,
|
||||
nsIDOMElement *aElement,
|
||||
const nsString& aAttribute,
|
||||
const nsString& aValue)
|
||||
: EditTxn(aEditor)
|
||||
{
|
||||
mElement = aElement;
|
||||
mAttribute = aAttribute;
|
||||
mValue = aValue;
|
||||
mAttributeWasSet=PR_FALSE;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Do(void)
|
||||
{
|
||||
// need to get the current value of the attribute and save it, and set mAttributeWasSet
|
||||
const int stringlen=100;
|
||||
char attributeAsCString[stringlen+1];
|
||||
char valueAsCString[stringlen+1];
|
||||
mAttribute.ToCString(attributeAsCString, stringlen);
|
||||
mAttributeWasSet;
|
||||
mEditor->GetAttributeValue(mElement, mAttribute, mUndoValue, mAttributeWasSet);
|
||||
|
||||
if (mAttributeWasSet)
|
||||
mUndoValue.ToCString(valueAsCString, stringlen);
|
||||
|
||||
// now set the attribute to the new value
|
||||
return mEditor->SetAttribute(mElement, mAttribute, mValue);
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Undo(void)
|
||||
{
|
||||
nsresult result=NS_OK;
|
||||
if (PR_TRUE==mAttributeWasSet)
|
||||
{
|
||||
result = mEditor->SetAttribute(mElement, mAttribute, mUndoValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = mEditor->RemoveAttribute(mElement, mAttribute);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Redo(void)
|
||||
{
|
||||
return mEditor->SetAttribute(mElement, mAttribute, mValue);
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetIsTransient(PRBool *aIsTransient)
|
||||
{
|
||||
if (nsnull!=aIsTransient)
|
||||
*aIsTransient = PR_FALSE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Merge(PRBool *aDidMerge, nsITransaction *aTransaction)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Write(nsIOutputStream *aOutputStream)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetUndoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetRedoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 ChangeAttributeTxn_h__
|
||||
#define ChangeAttributeTxn_h__
|
||||
|
||||
#include "EditTxn.h"
|
||||
|
||||
class nsIDOMElement;
|
||||
|
||||
/**
|
||||
* A transaction that changes an attribute of a content node.
|
||||
*/
|
||||
class ChangeAttributeTxn : public EditTxn
|
||||
{
|
||||
public:
|
||||
|
||||
ChangeAttributeTxn(nsEditor *aEditor,
|
||||
nsIDOMElement *aElement,
|
||||
const nsString& aAttribute,
|
||||
const nsString& aValue);
|
||||
|
||||
virtual nsresult Do(void);
|
||||
|
||||
virtual nsresult Undo(void);
|
||||
|
||||
virtual nsresult Redo(void);
|
||||
|
||||
virtual nsresult GetIsTransient(PRBool *aIsTransient);
|
||||
|
||||
virtual nsresult Merge(PRBool *aDidMerge, nsITransaction *aTransaction);
|
||||
|
||||
virtual nsresult Write(nsIOutputStream *aOutputStream);
|
||||
|
||||
virtual nsresult GetUndoString(nsString **aString);
|
||||
|
||||
virtual nsresult GetRedoString(nsString **aString);
|
||||
|
||||
protected:
|
||||
nsIDOMElement *mElement;
|
||||
nsString mAttribute;
|
||||
nsString mValue;
|
||||
nsString mUndoValue;
|
||||
PRBool mAttributeWasSet;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,98 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 "EditTxn.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kITransactionIID, NS_ITRANSACTION_IID);
|
||||
|
||||
NS_IMPL_ADDREF(EditTxn)
|
||||
NS_IMPL_RELEASE(EditTxn)
|
||||
|
||||
// note that aEditor is not refcounted
|
||||
EditTxn::EditTxn(nsEditor *aEditor)
|
||||
{
|
||||
NS_ASSERTION(nsnull!=aEditor, "null aEditor arg to EditTxn constructor");
|
||||
mEditor = aEditor;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Do(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Undo(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Redo(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetIsTransient(PRBool *aIsTransient)
|
||||
{
|
||||
if (nsnull!=aIsTransient)
|
||||
*aIsTransient = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Merge(PRBool *aDidMerge, nsITransaction *aTransaction)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Write(nsIOutputStream *aOutputStream)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetUndoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetRedoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
EditTxn::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
if (NULL == aInstancePtr) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = (void*)(nsISupports*)this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(kITransactionIID)) {
|
||||
*aInstancePtr = (void*)(nsITransaction*)this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
*aInstancePtr = 0;
|
||||
return NS_NOINTERFACE;
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 EditTxn_h__
|
||||
#define EditTxn_h__
|
||||
|
||||
#include "nsITransaction.h"
|
||||
class nsEditor;
|
||||
|
||||
/**
|
||||
* base class for all document editing transactions.
|
||||
* provides access to the nsEditor that created this transaction.
|
||||
*/
|
||||
class EditTxn : public nsITransaction
|
||||
{
|
||||
public:
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
EditTxn(nsEditor *aEditor);
|
||||
|
||||
virtual nsresult Do(void);
|
||||
|
||||
virtual nsresult Undo(void);
|
||||
|
||||
virtual nsresult Redo(void);
|
||||
|
||||
virtual nsresult GetIsTransient(PRBool *aIsTransient);
|
||||
|
||||
virtual nsresult Merge(PRBool *aDidMerge, nsITransaction *aTransaction);
|
||||
|
||||
virtual nsresult Write(nsIOutputStream *aOutputStream);
|
||||
|
||||
virtual nsresult GetUndoString(nsString **aString);
|
||||
|
||||
virtual nsresult GetRedoString(nsString **aString);
|
||||
|
||||
protected:
|
||||
|
||||
nsEditor *mEditor;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
|
@ -24,12 +24,16 @@ CPPSRCS = \
|
|||
editor.cpp \
|
||||
editorInterfaces.cpp \
|
||||
nsEditFactory.cpp \
|
||||
EditTxn.cpp \
|
||||
ChangeAttributeTxn.cpp \
|
||||
$(NULL)
|
||||
|
||||
CPP_OBJS = \
|
||||
.\$(OBJDIR)\editor.obj \
|
||||
.\$(OBJDIR)\nsEditFactory.obj \
|
||||
.\$(OBJDIR)\editorInterfaces.obj \
|
||||
.\$(OBJDIR)\EditTxn.obj \
|
||||
.\$(OBJDIR)\ChangeAttributeTxn.obj \
|
||||
$(NULL)
|
||||
|
||||
MODULE=editor
|
||||
|
@ -40,6 +44,7 @@ LINCS=-I$(PUBLIC)\editor \
|
|||
-I$(PUBLIC)\xpcom \
|
||||
-I$(PUBLIC)\raptor \
|
||||
-I$(PUBLIC)\js \
|
||||
-I$(PUBLIC)\txmgr \
|
||||
-I$(PUBLIC)\dom
|
||||
|
||||
MAKE_OBJ_TYPE = DLL
|
||||
|
|
|
@ -119,7 +119,7 @@ nsEditFactory::nsEditFactory(const nsCID &aClass)
|
|||
|
||||
nsEditFactory::~nsEditFactory()
|
||||
{
|
||||
nsRepository::UnregisterFactory(mCID, (nsIFactory *)this); //we are out of ref counts anyway
|
||||
//nsRepository::UnregisterFactory(mCID, (nsIFactory *)this); //we are out of ref counts anyway
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 "ChangeAttributeTxn.h"
|
||||
#include "editor.h"
|
||||
|
||||
// note that aEditor is not refcounted
|
||||
ChangeAttributeTxn::ChangeAttributeTxn(nsEditor *aEditor,
|
||||
nsIDOMElement *aElement,
|
||||
const nsString& aAttribute,
|
||||
const nsString& aValue)
|
||||
: EditTxn(aEditor)
|
||||
{
|
||||
mElement = aElement;
|
||||
mAttribute = aAttribute;
|
||||
mValue = aValue;
|
||||
mAttributeWasSet=PR_FALSE;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Do(void)
|
||||
{
|
||||
// need to get the current value of the attribute and save it, and set mAttributeWasSet
|
||||
const int stringlen=100;
|
||||
char attributeAsCString[stringlen+1];
|
||||
char valueAsCString[stringlen+1];
|
||||
mAttribute.ToCString(attributeAsCString, stringlen);
|
||||
mAttributeWasSet;
|
||||
mEditor->GetAttributeValue(mElement, mAttribute, mUndoValue, mAttributeWasSet);
|
||||
|
||||
if (mAttributeWasSet)
|
||||
mUndoValue.ToCString(valueAsCString, stringlen);
|
||||
|
||||
// now set the attribute to the new value
|
||||
return mEditor->SetAttribute(mElement, mAttribute, mValue);
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Undo(void)
|
||||
{
|
||||
nsresult result=NS_OK;
|
||||
if (PR_TRUE==mAttributeWasSet)
|
||||
{
|
||||
result = mEditor->SetAttribute(mElement, mAttribute, mUndoValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = mEditor->RemoveAttribute(mElement, mAttribute);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Redo(void)
|
||||
{
|
||||
return mEditor->SetAttribute(mElement, mAttribute, mValue);
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetIsTransient(PRBool *aIsTransient)
|
||||
{
|
||||
if (nsnull!=aIsTransient)
|
||||
*aIsTransient = PR_FALSE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Merge(PRBool *aDidMerge, nsITransaction *aTransaction)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::Write(nsIOutputStream *aOutputStream)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetUndoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult ChangeAttributeTxn::GetRedoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 ChangeAttributeTxn_h__
|
||||
#define ChangeAttributeTxn_h__
|
||||
|
||||
#include "EditTxn.h"
|
||||
|
||||
class nsIDOMElement;
|
||||
|
||||
/**
|
||||
* A transaction that changes an attribute of a content node.
|
||||
*/
|
||||
class ChangeAttributeTxn : public EditTxn
|
||||
{
|
||||
public:
|
||||
|
||||
ChangeAttributeTxn(nsEditor *aEditor,
|
||||
nsIDOMElement *aElement,
|
||||
const nsString& aAttribute,
|
||||
const nsString& aValue);
|
||||
|
||||
virtual nsresult Do(void);
|
||||
|
||||
virtual nsresult Undo(void);
|
||||
|
||||
virtual nsresult Redo(void);
|
||||
|
||||
virtual nsresult GetIsTransient(PRBool *aIsTransient);
|
||||
|
||||
virtual nsresult Merge(PRBool *aDidMerge, nsITransaction *aTransaction);
|
||||
|
||||
virtual nsresult Write(nsIOutputStream *aOutputStream);
|
||||
|
||||
virtual nsresult GetUndoString(nsString **aString);
|
||||
|
||||
virtual nsresult GetRedoString(nsString **aString);
|
||||
|
||||
protected:
|
||||
nsIDOMElement *mElement;
|
||||
nsString mAttribute;
|
||||
nsString mValue;
|
||||
nsString mUndoValue;
|
||||
PRBool mAttributeWasSet;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,98 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 "EditTxn.h"
|
||||
|
||||
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
|
||||
static NS_DEFINE_IID(kITransactionIID, NS_ITRANSACTION_IID);
|
||||
|
||||
NS_IMPL_ADDREF(EditTxn)
|
||||
NS_IMPL_RELEASE(EditTxn)
|
||||
|
||||
// note that aEditor is not refcounted
|
||||
EditTxn::EditTxn(nsEditor *aEditor)
|
||||
{
|
||||
NS_ASSERTION(nsnull!=aEditor, "null aEditor arg to EditTxn constructor");
|
||||
mEditor = aEditor;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Do(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Undo(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Redo(void)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetIsTransient(PRBool *aIsTransient)
|
||||
{
|
||||
if (nsnull!=aIsTransient)
|
||||
*aIsTransient = PR_TRUE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Merge(PRBool *aDidMerge, nsITransaction *aTransaction)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::Write(nsIOutputStream *aOutputStream)
|
||||
{
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetUndoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult EditTxn::GetRedoString(nsString **aString)
|
||||
{
|
||||
if (nsnull!=aString)
|
||||
*aString=nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
EditTxn::QueryInterface(REFNSIID aIID, void** aInstancePtr)
|
||||
{
|
||||
if (NULL == aInstancePtr) {
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
if (aIID.Equals(kISupportsIID)) {
|
||||
*aInstancePtr = (void*)(nsISupports*)this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
if (aIID.Equals(kITransactionIID)) {
|
||||
*aInstancePtr = (void*)(nsITransaction*)this;
|
||||
NS_ADDREF_THIS();
|
||||
return NS_OK;
|
||||
}
|
||||
*aInstancePtr = 0;
|
||||
return NS_NOINTERFACE;
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/* -*- Mode: C++; tab-width: 2; 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 EditTxn_h__
|
||||
#define EditTxn_h__
|
||||
|
||||
#include "nsITransaction.h"
|
||||
class nsEditor;
|
||||
|
||||
/**
|
||||
* base class for all document editing transactions.
|
||||
* provides access to the nsEditor that created this transaction.
|
||||
*/
|
||||
class EditTxn : public nsITransaction
|
||||
{
|
||||
public:
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
EditTxn(nsEditor *aEditor);
|
||||
|
||||
virtual nsresult Do(void);
|
||||
|
||||
virtual nsresult Undo(void);
|
||||
|
||||
virtual nsresult Redo(void);
|
||||
|
||||
virtual nsresult GetIsTransient(PRBool *aIsTransient);
|
||||
|
||||
virtual nsresult Merge(PRBool *aDidMerge, nsITransaction *aTransaction);
|
||||
|
||||
virtual nsresult Write(nsIOutputStream *aOutputStream);
|
||||
|
||||
virtual nsresult GetUndoString(nsString **aString);
|
||||
|
||||
virtual nsresult GetRedoString(nsString **aString);
|
||||
|
||||
protected:
|
||||
|
||||
nsEditor *mEditor;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
Загрузка…
Ссылка в новой задаче