/*
 * Copyright (c) Contributors to the Open 3D Engine Project.
 * For complete copyright and license terms please see the LICENSE at the root of this distribution.
 *
 * SPDX-License-Identifier: Apache-2.0 OR MIT
 *
 */
#ifndef CRYINCLUDE_EDITOR_CORE_UTIL_UNDO_UTIL_H
#define CRYINCLUDE_EDITOR_CORE_UTIL_UNDO_UTIL_H
#pragma once

#include "Include/EditorCoreAPI.h"

struct IUndoObject;
class EDITOR_CORE_API CUndo
{
public:
    CUndo(const char* description);

    ~CUndo();

    void Cancel() { m_bCancelled = true; }

    //! Check if undo is recording.
    static bool IsRecording();

    //! Check if undo is suspended.
    static bool IsSuspended();

    //! Record specified object.
    static void Record(IUndoObject* undo);

private:
    static const AZ::u32 scDescSize = 256;
    char m_description[scDescSize];
    bool m_bCancelled;
    bool m_bStartedRecord;
};

//! CUndoSuspend is a utility undo class
//! Define instance of this class in block of code where you want to suspend undo operations
class EDITOR_CORE_API CUndoSuspend
{
public:
    CUndoSuspend();

    ~CUndoSuspend();
};

#endif // CRYINCLUDE_EDITOR_CORE_UTIL_UNDO_UTIL_H
