diff -r 000000000000 -r 1fb32624e06b textrendering/textformatting/undo/EditorCommands.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textrendering/textformatting/undo/EditorCommands.h Tue Feb 02 02:02:46 2010 +0200 @@ -0,0 +1,463 @@ +/* +* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef EDITORCOMMANDS_H_ +#define EDITORCOMMANDS_H_ + +#include "unified_editor.h" +#include "UniqueInstance.h" +#include "UndoSystem.h" +#include "EditorPlainTextCommands.h" + +// all the combinable commands: +class CEditorCommandInsertTextAndFormat; +class CEditorCommandDeleteText; +class CEditorCommandDeleteCharFormat; +class CEditorCommandDeleteParFormat; + +/** + * Pointers to the repositories used by the undo system. + * + * @internalComponent + * @since App-frameworks6.1 + */ +struct TRepositories + { + CUniqueInstanceRepository* iChar; + CUniqueInstanceRepository* iPar; + CUniqueInstanceRepository* iDes; + }; + +// +// command prototypes +// +/** + * Base class for command prototypes. These prototypes are used to generate + * inverses. They do not need any copying to be sent into the undo system, + * executed, then recycled. Some also store a pointer to the last generated + * inverse so that they can add to it if two similar commands come along + * together. + * + * @internalComponent + * @since App-frameworks6.1 + */ +class CEditorCommandProto : public CEditorCommand + { + const TRepositories& iReps; +public: + CEditorCommandProto(const TRepositories& aReps) + : iReps(aReps) {} + const TRepositories& Repositories() const { return iReps; } + }; + +/** + * Prototype command for creating a style. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandCreateStyleProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + const RTmStyle* iStyle; + +public: + CEditorCommandCreateStyleProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(const RTmStyle&); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for setting the attributes of a style. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandChangeStyleProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + const RTmStyle* iStyle; + +public: + CEditorCommandChangeStyleProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(const RTmStyle&); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for applying a style to a run of text. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandSetStyleProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + TInt iPos; + TInt iLength; + const TDesC* iName; + +public: + CEditorCommandSetStyleProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos, TInt aLength, + const TDesC& aName); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for deleting a style. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandDeleteStyleProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + const TDesC* iName; + +public: + CEditorCommandDeleteStyleProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(const TDesC& aName); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for setting the character format of a run of text. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandSetCharFormatProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + TInt iPos; + TInt iLength; + const TTmCharFormatLayer* iFormat; + +public: + CEditorCommandSetCharFormatProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos, + TInt aLength, + const TTmCharFormatLayer& aFormat); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for setting the paragraph format of a run of text. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandSetParFormatProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + TInt iPos; + TInt iLength; + const RTmParFormatLayer* iFormat; + +public: + CEditorCommandSetParFormatProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos, + TInt aLength, + const RTmParFormatLayer& aFormat); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for inserting text with specified character and paragraph + * format. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandInsertProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + TInt iPos; + const TDesC* iText; + const TTmCharFormatLayer* iCharFormat; + const RTmParFormatLayer* iParFormat; + const TDesC* iStyle; + +public: + CEditorCommandInsertProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos, + const TDesC& aText, + const TDesC* aStyle, + const TTmCharFormatLayer* aCharFormat, + const RTmParFormatLayer* aParFormat); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + + TBool PrepareToAddInverseToLastL(UndoSystem::CSingleCommand& aLastCommand) const; + void AddInverseToLast(UndoSystem::CSingleCommand& aLastCommand) const; + }; + +/** + * Prototype command for deleting text. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandDeleteProto) : public CEditorCommandProto + { + enum { KMaxCombinableReinsertCharacters = 20 }; + + MUnifiedEditor& iTarget; + TInt iPos; + TInt iLength; + // For adding inverse to last command + mutable TBuf iDeletedText; + +public: + CEditorCommandDeleteProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos, TInt aLength); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + + TBool PrepareToAddInverseToLastL(UndoSystem::CSingleCommand& aLastCommand) const; + void AddInverseToLast(UndoSystem::CSingleCommand& aLastCommand) const; + }; + +/** + * Prototype command for setting the base format. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandSetBaseFormatProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + const TTmCharFormat* iChar; + const RTmParFormat* iPar; + +public: + CEditorCommandSetBaseFormatProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(const TTmCharFormat* aCharFormat, const RTmParFormat* aParFormat); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for deleting specific character formatting. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandDeleteCharFormatProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + TInt iPos; + TInt iLength; + +public: + CEditorCommandDeleteCharFormatProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos, TInt aLength); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for deleting specific paragraph formatting. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandDeleteParFormatProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + TInt iPos; + TInt iLength; + +public: + CEditorCommandDeleteParFormatProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos, TInt aLength); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for deleting a picture. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandDeletePictureProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + TInt iPos; + +public: + CEditorCommandDeletePictureProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos); + + TInt ExecuteL() const; + }; + +/** + * Prototype command for inserting a picture. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandInsertPictureProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + TInt iPos; + const TPictureHeader* iPicture; + +public: + CEditorCommandInsertPictureProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(TInt aPos, const TPictureHeader& picture); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for renaming a style. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandRenameStyleProto) : public CEditorCommandProto + { + MUnifiedEditor& iTarget; + const TDesC* iOldName; + const TDesC* iNewName; + +public: + CEditorCommandRenameStyleProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + void Set(const TDesC& aOldName, const TDesC& aNewName); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Prototype command for pasting text. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandPasteProto) : public CEditorCommandProto + { + TEditorPasteProtoImpl iImpl; + +public: + CEditorCommandPasteProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iImpl(aTarget) {} + void Set(const CStreamStore& aStore, + const CStreamDictionary& aStreamDictionary, + TInt aPos); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +/** + * Owner of a picture which will eventually pass on ownership. + * + * @internalComponent + * @since App-frameworks6.1 + */ +class MPictureOwner + { +public: + /** + * Forgets the delegate that has been made next in line for + * the picture. + */ + virtual void ForgetDelegate() = 0; + }; + +class CEditorCommandInsertPicture; + +/** + * Prototype command for deleting a picture from the text without + * returning ownership. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CEditorCommandDestroyPictureProto) : public CEditorCommandProto, + private MPictureOwner + { + MUnifiedEditor& iTarget; + TInt iPos; + /** + * Will own picture after us. + */ + mutable CEditorCommandInsertPicture* iPictureOwnerDelegate; + + void ForgetDelegate(); +public: + CEditorCommandDestroyPictureProto(const TRepositories& aReps, MUnifiedEditor& aTarget) + : CEditorCommandProto(aReps), iTarget(aTarget) {} + ~CEditorCommandDestroyPictureProto(); + void Set(TInt aPos); + + UndoSystem::CCommand* CreateInverseL() const; + TInt ExecuteL() const; + }; + +namespace UndoSystem + { + /** + * Finds the position of the first picture in the text. Returns + * 'KNotFound' if there are none. This will not return any + * picture characters that do not have attatched pictures. + * + * @internalComponent + * @since App-frameworks6.1 + */ + TInt FindPicture(const MUnifiedEditor& aTarget, TInt aPos, TInt aLength); + } + +#endif // EDITORCOMMANDS_H_