EditTransactionBase.h (3588B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef mozilla_EditTransactionBase_h 7 #define mozilla_EditTransactionBase_h 8 9 #include "mozilla/EditorForwards.h" 10 11 #include "nsCycleCollectionParticipant.h" 12 #include "nsISupportsImpl.h" 13 #include "nsITransaction.h" 14 #include "nscore.h" 15 16 already_AddRefed<mozilla::EditTransactionBase> 17 nsITransaction::GetAsEditTransactionBase() { 18 RefPtr<mozilla::EditTransactionBase> editTransactionBase; 19 return NS_SUCCEEDED( 20 GetAsEditTransactionBase(getter_AddRefs(editTransactionBase))) 21 ? editTransactionBase.forget() 22 : nullptr; 23 } 24 25 namespace mozilla { 26 class LogModule; 27 28 #define NS_DECL_GETASTRANSACTION_BASE(aClass) \ 29 virtual aClass* GetAs##aClass(); \ 30 virtual const aClass* GetAs##aClass() const; 31 32 /** 33 * Base class for all document editing transactions. 34 */ 35 class EditTransactionBase : public nsITransaction { 36 public: 37 NS_DECL_CYCLE_COLLECTING_ISUPPORTS 38 NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(EditTransactionBase, nsITransaction) 39 40 MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction(void) override; 41 NS_IMETHOD GetIsTransient(bool* aIsTransient) override; 42 NS_IMETHOD Merge(nsITransaction* aTransaction, bool* aDidMerge) override; 43 NS_IMETHOD GetAsEditTransactionBase( 44 EditTransactionBase** aEditTransactionBase) final { 45 MOZ_ASSERT(aEditTransactionBase); 46 MOZ_ASSERT(!*aEditTransactionBase); 47 *aEditTransactionBase = do_AddRef(this).take(); 48 return NS_OK; 49 } 50 51 NS_DECL_GETASTRANSACTION_BASE(ChangeAttributeTransaction) 52 NS_DECL_GETASTRANSACTION_BASE(ChangeStyleTransaction) 53 NS_DECL_GETASTRANSACTION_BASE(CompositionTransaction) 54 NS_DECL_GETASTRANSACTION_BASE(DeleteContentTransactionBase) 55 NS_DECL_GETASTRANSACTION_BASE(DeleteMultipleRangesTransaction) 56 NS_DECL_GETASTRANSACTION_BASE(DeleteNodeTransaction) 57 NS_DECL_GETASTRANSACTION_BASE(DeleteRangeTransaction) 58 NS_DECL_GETASTRANSACTION_BASE(DeleteTextTransaction) 59 NS_DECL_GETASTRANSACTION_BASE(EditAggregateTransaction) 60 NS_DECL_GETASTRANSACTION_BASE(InsertNodeTransaction) 61 NS_DECL_GETASTRANSACTION_BASE(InsertTextTransaction) 62 NS_DECL_GETASTRANSACTION_BASE(JoinNodesTransaction) 63 NS_DECL_GETASTRANSACTION_BASE(MoveNodeTransaction) 64 NS_DECL_GETASTRANSACTION_BASE(MoveNodeTransactionBase) 65 NS_DECL_GETASTRANSACTION_BASE(MoveSiblingsTransaction) 66 NS_DECL_GETASTRANSACTION_BASE(PlaceholderTransaction) 67 NS_DECL_GETASTRANSACTION_BASE(ReplaceTextTransaction) 68 NS_DECL_GETASTRANSACTION_BASE(SplitNodeTransaction) 69 70 protected: 71 virtual ~EditTransactionBase() = default; 72 73 NS_DECL_GETASTRANSACTION_BASE(CompositionInTextNodeTransaction) 74 NS_DECL_GETASTRANSACTION_BASE(DeleteTextFromTextNodeTransaction) 75 NS_DECL_GETASTRANSACTION_BASE(InsertTextIntoTextNodeTransaction) 76 NS_DECL_GETASTRANSACTION_BASE(ReplaceTextInTextNodeTransaction) 77 78 static LogModule* GetLogModule(); 79 }; 80 81 #undef NS_DECL_GETASTRANSACTION_BASE 82 83 } // namespace mozilla 84 85 #define NS_DECL_EDITTRANSACTIONBASE \ 86 MOZ_CAN_RUN_SCRIPT NS_IMETHOD DoTransaction() override; \ 87 MOZ_CAN_RUN_SCRIPT NS_IMETHOD UndoTransaction() override; 88 89 #define NS_DECL_EDITTRANSACTIONBASE_GETASMETHODS_OVERRIDE(aClass) \ 90 aClass* GetAs##aClass() final { return this; } \ 91 const aClass* GetAs##aClass() const final { return this; } 92 93 #endif // #ifndef mozilla_EditTransactionBase_h