/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef JoinElementTxn_h__ #define JoinElementTxn_h__ #include "EditTxn.h" // for EditTxn, NS_DECL_EDITTXN #include "nsCOMPtr.h" // for nsCOMPtr #include "nsCycleCollectionParticipant.h" #include "nsID.h" // for REFNSIID #include "nscore.h" // for NS_IMETHOD class nsEditor; class nsINode; /** * A transaction that joins two elements E1 (left node) and E2 (right node) * into a single node E. * The children of E are the children of E1 followed by the children of E2. * After DoTransaction() and RedoTransaction(), E1 is removed from the content * tree and E2 remains. */ class JoinElementTxn : public EditTxn { public: /** initialize the transaction * @param aEditor the provider of core editing operations * @param aLeftNode the first of two nodes to join * @param aRightNode the second of two nodes to join */ NS_IMETHOD Init(nsEditor *aEditor, nsINode *aLeftNode, nsINode *aRightNode); JoinElementTxn(); NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(JoinElementTxn, EditTxn) NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr); NS_DECL_EDITTXN protected: /** the elements to operate upon. * After the merge, mRightNode remains and mLeftNode is removed from the content tree. */ nsCOMPtr mLeftNode; nsCOMPtr mRightNode; /** the offset into mNode where the children of mElement are split (for undo).
* mOffset is the index of the first child in the right node. * -1 means the left node had no children. */ uint32_t mOffset; /** the parent node containing mLeftNode and mRightNode */ nsCOMPtr mParent; nsEditor* mEditor; }; #endif