зеркало из https://github.com/mozilla/gecko-dev.git
134 строки
4.7 KiB
C++
134 строки
4.7 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 ChangeStyleTransaction_h
|
|
#define ChangeStyleTransaction_h
|
|
|
|
#include "EditTransactionBase.h" // base class
|
|
|
|
#include "nsCOMPtr.h" // nsCOMPtr members
|
|
#include "nsCycleCollectionParticipant.h" // various macros
|
|
#include "nsString.h" // nsString members
|
|
|
|
class nsAtom;
|
|
class nsStyledElement;
|
|
|
|
namespace mozilla {
|
|
|
|
namespace dom {
|
|
class Element;
|
|
} // namespace dom
|
|
|
|
/**
|
|
* A transaction that changes the value of a CSS inline style of a content
|
|
* node. This transaction covers add, remove, and change a property's value.
|
|
*/
|
|
class ChangeStyleTransaction final : public EditTransactionBase {
|
|
protected:
|
|
ChangeStyleTransaction(nsStyledElement& aStyledElement, nsAtom& aProperty,
|
|
const nsAString& aValue, bool aRemove);
|
|
|
|
public:
|
|
/**
|
|
* Creates a change style transaction. This never returns nullptr.
|
|
*
|
|
* @param aStyledElement The node whose style attribute will be changed.
|
|
* @param aProperty The name of the property to change.
|
|
* @param aValue New value for aProperty.
|
|
*/
|
|
static already_AddRefed<ChangeStyleTransaction> Create(
|
|
nsStyledElement& aStyledElement, nsAtom& aProperty,
|
|
const nsAString& aValue);
|
|
|
|
/**
|
|
* Creates a change style transaction. This never returns nullptr.
|
|
*
|
|
* @param aStyledElement The node whose style attribute will be changed.
|
|
* @param aProperty The name of the property to change.
|
|
* @param aValue The value to remove from aProperty.
|
|
*/
|
|
static already_AddRefed<ChangeStyleTransaction> CreateToRemove(
|
|
nsStyledElement& aStyledElement, nsAtom& aProperty,
|
|
const nsAString& aValue);
|
|
|
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ChangeStyleTransaction,
|
|
EditTransactionBase)
|
|
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
|
|
NS_DECL_EDITTRANSACTIONBASE
|
|
NS_DECL_EDITTRANSACTIONBASE_GETASMETHODS_OVERRIDE(ChangeStyleTransaction)
|
|
|
|
MOZ_CAN_RUN_SCRIPT NS_IMETHOD RedoTransaction() override;
|
|
|
|
/**
|
|
* Returns true if the list of white-space separated values contains aValue
|
|
*
|
|
* @param aValueList [IN] a list of white-space separated values
|
|
* @param aValue [IN] the value to look for in the list
|
|
* @return true if the value is in the list of values
|
|
*/
|
|
static bool ValueIncludes(const nsACString& aValueList,
|
|
const nsACString& aValue);
|
|
|
|
friend std::ostream& operator<<(std::ostream& aStream,
|
|
const ChangeStyleTransaction& aTransaction);
|
|
|
|
private:
|
|
virtual ~ChangeStyleTransaction() = default;
|
|
|
|
/**
|
|
* Build new text-decoration value to set/remove specific values to/from the
|
|
* rule which already has aCurrentValues.
|
|
*/
|
|
void BuildTextDecorationValueToSet(const nsACString& aCurrentValues,
|
|
const nsACString& aAddingValues,
|
|
nsACString& aOutValues);
|
|
void BuildTextDecorationValueToRemove(const nsACString& aCurrentValues,
|
|
const nsACString& aRemovingValues,
|
|
nsACString& aOutValues);
|
|
|
|
/**
|
|
* Helper method for above methods.
|
|
*/
|
|
void BuildTextDecorationValue(bool aUnderline, bool aOverline,
|
|
bool aLineThrough, nsACString& aOutValues);
|
|
|
|
/**
|
|
* If the boolean is true and if the value is not the empty string,
|
|
* set the property in the transaction to that value; if the value
|
|
* is empty, remove the property from element's styles. If the boolean
|
|
* is false, just remove the style attribute.
|
|
*/
|
|
MOZ_CAN_RUN_SCRIPT nsresult SetStyle(bool aAttributeWasSet,
|
|
nsACString& aValue);
|
|
|
|
// The element to operate upon.
|
|
RefPtr<nsStyledElement> mStyledElement;
|
|
|
|
// The CSS property to change.
|
|
RefPtr<nsAtom> mProperty;
|
|
|
|
// The value to set the property to (ignored if mRemoveProperty==true).
|
|
nsCString mValue;
|
|
|
|
// The value to set the property to for undo.
|
|
nsCString mUndoValue;
|
|
// The value to set the property to for redo.
|
|
nsCString mRedoValue;
|
|
|
|
// true if the operation is to remove mProperty from mElement.
|
|
bool mRemoveProperty;
|
|
|
|
// True if the style attribute was present and not empty before DoTransaction.
|
|
bool mUndoAttributeWasSet;
|
|
// True if the style attribute is present and not empty after DoTransaction.
|
|
bool mRedoAttributeWasSet;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif // #ifndef ChangeStyleTransaction_h
|