mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 12:20:56 +00:00

Headers in editor module has a lot of forward declarations for avoiding the include hell and has a lot of helper template classes. Forward declarations of template classes is really messy and I'd want to avoid the duplication because it blocks changing template class. Therefore, centralizing forward declarations makes the headers cleaner and maintaining template classes easier. Therefore, this patch adds a new header file which has only forward declarations and some aliases. It'd be better to define `enum class`es in it like `EventForwards.h` for reducing the dependencies between headers, but currently this does not do it for making the new file simpler as far as possible. Removing `EditActionListener.h` is because it's unused. Removing `AutoTopLevelEditSubActionNotifier` is because it's renamed to `AutoEditSubActionNotifier`. https://hg.mozilla.org/mozilla-central/rev/6de55c5b5f8d5f92389d0d244d2bced1f979ade9 Differential Revision: https://phabricator.services.mozilla.com/D143817
103 lines
3.4 KiB
C++
103 lines
3.4 KiB
C++
/* -*- 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 CompositionTransaction_h
|
|
#define CompositionTransaction_h
|
|
|
|
#include "EditTransactionBase.h" // base class
|
|
|
|
#include "EditorForwards.h"
|
|
|
|
#include "mozilla/WeakPtr.h"
|
|
#include "nsCycleCollectionParticipant.h" // various macros
|
|
#include "nsString.h" // mStringToInsert
|
|
|
|
namespace mozilla {
|
|
class TextComposition;
|
|
class TextRangeArray;
|
|
|
|
namespace dom {
|
|
class Text;
|
|
} // namespace dom
|
|
|
|
/**
|
|
* CompositionTransaction stores all edit for a composition, i.e.,
|
|
* from compositionstart event to compositionend event. E.g., inserting a
|
|
* composition string, modifying the composition string or its IME selection
|
|
* ranges and commit or cancel the composition.
|
|
*/
|
|
class CompositionTransaction final : public EditTransactionBase,
|
|
public SupportsWeakPtr {
|
|
protected:
|
|
CompositionTransaction(EditorBase& aEditorBase,
|
|
const nsAString& aStringToInsert,
|
|
const EditorDOMPointInText& aPointToInsert);
|
|
|
|
public:
|
|
/**
|
|
* Creates a composition transaction. aEditorBase must not return from
|
|
* GetComposition() while calling this method. Note that this method will
|
|
* update text node information of aEditorBase.mComposition.
|
|
*
|
|
* @param aEditorBase The editor which has composition.
|
|
* @param aStringToInsert The new composition string to insert. This may
|
|
* be different from actual composition string.
|
|
* E.g., password editor can hide the character
|
|
* with a different character.
|
|
* @param aPointToInsert The insertion point.
|
|
*/
|
|
static already_AddRefed<CompositionTransaction> Create(
|
|
EditorBase& aEditorBase, const nsAString& aStringToInsert,
|
|
const EditorDOMPointInText& aPointToInsert);
|
|
|
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(CompositionTransaction,
|
|
EditTransactionBase)
|
|
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
|
|
NS_DECL_EDITTRANSACTIONBASE
|
|
NS_DECL_EDITTRANSACTIONBASE_GETASMETHODS_OVERRIDE(CompositionTransaction)
|
|
|
|
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction() override;
|
|
NS_IMETHOD Merge(nsITransaction* aOtherTransaction, bool* aDidMerge) override;
|
|
|
|
void MarkFixed();
|
|
|
|
MOZ_CAN_RUN_SCRIPT static nsresult SetIMESelection(
|
|
EditorBase& aEditorBase, dom::Text* aTextNode, uint32_t aOffsetInNode,
|
|
uint32_t aLengthOfCompositionString, const TextRangeArray* aRanges);
|
|
|
|
friend std::ostream& operator<<(std::ostream& aStream,
|
|
const CompositionTransaction& aTransaction);
|
|
|
|
private:
|
|
virtual ~CompositionTransaction() = default;
|
|
|
|
MOZ_CAN_RUN_SCRIPT nsresult SetSelectionForRanges();
|
|
|
|
// The text element to operate upon.
|
|
RefPtr<dom::Text> mTextNode;
|
|
|
|
// The offsets into mTextNode where the insertion should be placed.
|
|
uint32_t mOffset;
|
|
|
|
uint32_t mReplaceLength;
|
|
|
|
// The range list.
|
|
RefPtr<TextRangeArray> mRanges;
|
|
|
|
// The text to insert into mTextNode at mOffset.
|
|
nsString mStringToInsert;
|
|
|
|
// The editor, which is used to get the selection controller.
|
|
RefPtr<EditorBase> mEditorBase;
|
|
|
|
bool mFixed;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // #ifndef CompositionTransaction_h
|