diff -r 000000000000 -r bde4ae8d615e os/textandloc/textrendering/textformatting/inc/EditorUndo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/textandloc/textrendering/textformatting/inc/EditorUndo.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,167 @@ +/* +* 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 EDITORUNDO_H_ +#define EDITORUNDO_H_ + +#include "unified_editor.h" + +namespace UndoSystem +/** +@internalTechnology +*/ +{ +class CCommandManager; +class MNotUndoableGatekeeper; +} + +class CEditorCommandFactory; + +/** +MUnifiedEditor decorator that adds undo functionality. +It passes commands transparently to the editor it is constructed upon, while +storing the operations so that they can be undone and redone. Calling a +non-const method of MUnifiedEditor wipes all 'Redo' operations. +The undo and redo operations are only guaranteed to be accurate if the +underlying editor satisfies certain conditions. + +@since App-frameworks6.1 +@internalAll +*/ +class CEditorWithUndo : public CBase, + public MUnifiedEditor, + private MUnifiedEditor::MStyleSupport, + private MUnifiedEditor::MPictureSupport, + private MUnifiedEditor::MClipboardSupport + + { +public: + ~CEditorWithUndo(); + + /** + * Creates a CEditorWithUndo. It does not own the aEditor. + */ + IMPORT_C static CEditorWithUndo* NewL(MUnifiedEditor& aEditor); + /** + * Creates a CEditorWithUndo, using the aSharedUndoSystem. This allows + * many objects to stay in synchronization when each is accessed + * seperately. + * The aEditor is not owned. + */ + IMPORT_C static CEditorWithUndo* NewL(MUnifiedEditor& aEditor, + UndoSystem::CCommandManager* aSharedUndoSystem); + /** + * Undoes one operation or batch of operations. If one operation in the + * middle of a batch leaves, this function will leave, but the underlying + * editor will not necessarily be in the same state as it was in before + * the call. However, all operations will still be stored, and so the + * previous state is still recoverable with a call to RedoL() or a + * further call to UndoL will complete the operation (resource acquisition + * permitting). + */ + IMPORT_C void UndoL(); + /** + * Redoes one operation or batch of operations. If one operation in the + * middle of a batch leaves, this function will leave, but the underlying + * editor will not necessarily be in the same state as it was in before + * the call. However, all operations will still be stored, and so the + * previous state is still recoverable with a call to UndoL() or a + * further call to RedoL will complete the operation (resource acquisition + * permitting). + */ + IMPORT_C void RedoL(); + /** + * Returns ETrue iff UndoL() would have an effect + */ + IMPORT_C TBool CanUndo() const; + /** + * Returns ETrue iff RedoL() would have an effect + */ + IMPORT_C TBool CanRedo() const; + /** + * Wipes all undo and redo operations + */ + IMPORT_C void ResetUndo(); + /** + * Sets limits on the 'undo depth'. This is the numbet of times that + * successive calls to UndoL() have an effect. When a depth of + * aMaxItems is reached, the undo depth is reset to aMinItems. + */ + IMPORT_C void SetMaxItems(TInt aMaxItems); + /** + * Sets a gatekeper for the undo system. This will be called whenever an + * operation is attempted that cannot be undone for any reason. + * The gatekeeper therefore has an oportunity to suppress execution and + * keep the current undo operations stored. + * NULL may be passed to restore default behaviour. + * Returns the old gatekeeper. + */ + IMPORT_C UndoSystem::MNotUndoableGatekeeper* + SetGatekeeper(UndoSystem::MNotUndoableGatekeeper*); + + // From MUnifiedEditor + MTmOptionalInterface* Interface(TUint aId); + void InsertTextL(TInt aPos, const TDesC& aText, const TDesC* aStyle, + const TTmCharFormatLayer*, const RTmParFormatLayer*); + void DeleteTextL(TInt aPos,TInt aLength); + void SetBaseFormatL(const TTmCharFormat&, const RTmParFormat&); + void SetCharFormatL(TInt aPos, TInt aLength, const TTmCharFormatLayer&); + void SetParFormatL(TInt aPos, TInt aLength, const RTmParFormatLayer&); + void DeleteCharFormatL(TInt aPos, TInt aLength); + void DeleteParFormatL(TInt aPos, TInt aLength); + TInt DocumentLength() const; + void GetText(TInt aPos, TPtrC& aText) const; + void GetBaseFormatL(TTmCharFormat&, RTmParFormat&) const; + void GetCharFormat(TInt aPos, TFormatLevel aLevel, + TTmCharFormatLayer& aFormat,TInt& aRunLength) const; + void GetParFormatL(TInt aPos, TFormatLevel aLevel, + RTmParFormatLayer& aFormat, TInt& aRunLength) const; + +private: + // from MStyleSupport + TInt CreateStyleL(const RTmStyle&); + TInt ChangeStyleL(const RTmStyle&); + TInt SetStyleL(TInt aPos, TInt aLength, const TDesC&); + TInt RenameStyleL(const TDesC& aOldName, const TDesC& aNewName); + TInt DeleteStyleL(const TDesC& aName); + TInt StyleCount() const; + void GetStyle(TInt aPos, TPtrC& aName, TInt& aRunLength) const; + TInt GetStyleByNameL(const TDesC& aName, RTmStyle&) const; + TInt GetStyleByIndexL(TInt aIndex, RTmStyle&) const; + + // from MPictureSupport + void InsertPictureL(TInt aPos, const TPictureHeader&); + void DropPictureL(TInt aPos); + void Picture(TInt aPos, TPictureHeader&) const; + + // from MClipboardSupport + void CopyToStoreL(CStreamStore& aStore, CStreamDictionary& aDictionary, + TInt aPos, TInt aLength) const; + void PasteFromStoreL(const CStreamStore& aStore, + const CStreamDictionary& aDictionary, TInt aPos); + + CEditorWithUndo(); + void ConstructL(MUnifiedEditor& aEditorBasedOn, + UndoSystem::CCommandManager* aSharedUndoSystem); + + CEditorCommandFactory* iFactory; + MUnifiedEditor* iBaseEditor; + UndoSystem::CCommandManager* iCommandManager; + }; + +#endif // EDITORUNDO_H_