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 "nsCycleCollectionParticipant.h" 10 #include "nsISupportsImpl.h" 11 #include "nsITransaction.h" 12 #include "nscore.h" 13 14 already_AddRefed<mozilla::EditTransactionBase> GetAsEditTransactionBase()15nsITransaction::GetAsEditTransactionBase() { 16 RefPtr<mozilla::EditTransactionBase> editTransactionBase; 17 return NS_SUCCEEDED( 18 GetAsEditTransactionBase(getter_AddRefs(editTransactionBase))) 19 ? editTransactionBase.forget() 20 : nullptr; 21 } 22 23 namespace mozilla { 24 25 class ChangeAttributeTransaction; 26 class ChangeStyleTransaction; 27 class CompositionTransaction; 28 class CreateElementTransaction; 29 class DeleteNodeTransaction; 30 class DeleteRangeTransaction; 31 class DeleteTextTransaction; 32 class EditAggregateTransaction; 33 class InsertNodeTransaction; 34 class InsertTextTransaction; 35 class JoinNodeTransaction; 36 class LogModule; 37 class PlaceholderTransaction; 38 class ReplaceTextTransaction; 39 class SplitNodeTransaction; 40 41 #define NS_DECL_GETASTRANSACTION_BASE(aClass) \ 42 virtual aClass* GetAs##aClass(); \ 43 virtual const aClass* GetAs##aClass() const; 44 45 /** 46 * Base class for all document editing transactions. 47 */ 48 class EditTransactionBase : public nsITransaction { 49 public: 50 NS_DECL_CYCLE_COLLECTING_ISUPPORTS 51 NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(EditTransactionBase, nsITransaction) 52 53 MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction(void) override; 54 NS_IMETHOD GetIsTransient(bool* aIsTransient) override; 55 NS_IMETHOD Merge(nsITransaction* aTransaction, bool* aDidMerge) override; GetAsEditTransactionBase(EditTransactionBase ** aEditTransactionBase)56 NS_IMETHOD GetAsEditTransactionBase( 57 EditTransactionBase** aEditTransactionBase) final { 58 MOZ_ASSERT(aEditTransactionBase); 59 MOZ_ASSERT(!*aEditTransactionBase); 60 *aEditTransactionBase = do_AddRef(this).take(); 61 return NS_OK; 62 } 63 64 NS_DECL_GETASTRANSACTION_BASE(ChangeAttributeTransaction) 65 NS_DECL_GETASTRANSACTION_BASE(ChangeStyleTransaction) 66 NS_DECL_GETASTRANSACTION_BASE(CompositionTransaction) 67 NS_DECL_GETASTRANSACTION_BASE(CreateElementTransaction) 68 NS_DECL_GETASTRANSACTION_BASE(DeleteNodeTransaction) 69 NS_DECL_GETASTRANSACTION_BASE(DeleteRangeTransaction) 70 NS_DECL_GETASTRANSACTION_BASE(DeleteTextTransaction) 71 NS_DECL_GETASTRANSACTION_BASE(EditAggregateTransaction) 72 NS_DECL_GETASTRANSACTION_BASE(InsertNodeTransaction) 73 NS_DECL_GETASTRANSACTION_BASE(InsertTextTransaction) 74 NS_DECL_GETASTRANSACTION_BASE(JoinNodeTransaction) 75 NS_DECL_GETASTRANSACTION_BASE(PlaceholderTransaction) 76 NS_DECL_GETASTRANSACTION_BASE(ReplaceTextTransaction) 77 NS_DECL_GETASTRANSACTION_BASE(SplitNodeTransaction) 78 79 protected: 80 virtual ~EditTransactionBase() = default; 81 82 static LogModule* GetLogModule(); 83 }; 84 85 #undef NS_DECL_GETASTRANSACTION_BASE 86 87 } // namespace mozilla 88 89 #define NS_DECL_EDITTRANSACTIONBASE \ 90 MOZ_CAN_RUN_SCRIPT NS_IMETHOD DoTransaction() override; \ 91 MOZ_CAN_RUN_SCRIPT NS_IMETHOD UndoTransaction() override; 92 93 #define NS_DECL_EDITTRANSACTIONBASE_GETASMETHODS_OVERRIDE(aClass) \ 94 aClass* GetAs##aClass() final { return this; } \ 95 const aClass* GetAs##aClass() const final { return this; } 96 97 #endif // #ifndef mozilla_EditTransactionBase_h 98