ChangedAttributeTxn implementation

base class EditTxn implementation
This commit is contained in:
buster%netscape.com 1999-01-06 20:30:13 +00:00
Родитель d3bf0584b2
Коммит 2a75ddbb5c
16 изменённых файлов: 972 добавлений и 2 удалений

Просмотреть файл

@ -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

98
editor/base/EditTxn.cpp Normal file
Просмотреть файл

@ -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;
}

59
editor/base/EditTxn.h Normal file
Просмотреть файл

@ -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

98
editor/core/EditTxn.cpp Normal file
Просмотреть файл

@ -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;
}

59
editor/core/EditTxn.h Normal file
Просмотреть файл

@ -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