Files
o3de/Gems/LyShine/Code/Editor/Animation/UiAnimUndoManager.h
T
2021-03-08 14:30:57 -08:00

101 lines
3.2 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
// Original file Copyright Crytek GMBH or its affiliates, used under license.
#pragma once
#include <AzCore/std/string/string.h>
struct UiAnimUndoObject;
class UiAnimUndoStep;
struct IUndoManagerListener;
class UndoStack;
/*!
* UiAnimUndoManager is keeping and operating on UiAnimUndo class instances.
*/
class UiAnimUndoManager
{
public:
UiAnimUndoManager();
~UiAnimUndoManager();
//! Begin operation requiring undo.
//! Undo manager enters holding state.
void Begin();
//! Restore all undo objects registered since last Begin call.
//! @param bUndo if true all Undo object registered up to this point will be undone.
void Restore(bool bUndo = true);
//! Accept changes and registers an undo object with the undo manager.
//! This will allow the user to undo the operation.
void Accept(const AZStd::string& name);
//! Cancel changes and restore undo objects.
void Cancel();
//! Temporarily suspends recording of undo.
void Suspend();
//! Resume recording if was suspended.
void Resume();
// Undo last operation.
void Undo();
//! Redo last undo.
void Redo();
void RedoStep(UiAnimUndoStep* step);
void UndoStep(UiAnimUndoStep* step);
//! Check if undo information is recording now.
bool IsUndoRecording() const;
//////////////////////////////////////////////////////////////////////////
bool IsUndoSuspended() const;
//! Put new undo object, must be called between Begin and Accept/Cancel methods.
void RecordUndo(UiAnimUndoObject* obj);
//! Completly flush all Undo and redo buffers.
//! Must be done on level reloads or global Fetch operation.
void Flush();
void AddListener(IUndoManagerListener* pListener);
void RemoveListener(IUndoManagerListener* pListener);
void SetActiveUndoStack(UndoStack* undoStack);
UndoStack* GetActiveUndoStack() const;
// Get the active UiAnimUndoManager (if any). The active undo manager
static UiAnimUndoManager* Get();
private: // ---------------------------------------------------------------
void BeginUndoTransaction();
void EndUndoTransaction();
void BeginRestoreTransaction();
void EndRestoreTransaction();
static UiAnimUndoManager* s_instance;
UndoStack* m_uiUndoStack;
bool m_bRecording;
int m_suspendCount;
bool m_bUndoing;
bool m_bRedoing;
UiAnimUndoStep* m_currentUndo;
AZStd::vector<IUndoManagerListener*> m_listeners;
};