Files
2026-08-16 18:24:52 +07:00

67 lines
1.7 KiB
C++

// This file is part of VSTGUI. It is subject to the license terms
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
#pragma once
#include "../../lib/vstguibase.h"
#if VSTGUI_LIVE_EDITING
#include "../../lib/dispatchlist.h"
#include <list>
#include <deque>
namespace VSTGUI {
class IAction;
class UIGroupAction;
class UIUndoManager;
//----------------------------------------------------------------------------------------------------
struct IUIUndoManagerListener
{
virtual ~IUIUndoManagerListener () noexcept = default;
virtual void onUndoManagerChange () = 0;
};
//----------------------------------------------------------------------------------------------------
class UIUndoManager : public NonAtomicReferenceCounted,
protected ListenerProvider<UIUndoManager, IUIUndoManagerListener>,
protected std::list<IAction*>
{
public:
UIUndoManager ();
~UIUndoManager () override;
void pushAndPerform (IAction* action);
UTF8StringPtr getUndoName ();
UTF8StringPtr getRedoName ();
void performUndo ();
void performRedo ();
bool canUndo ();
bool canRedo ();
void startGroupAction (UTF8StringPtr name);
void endGroupAction ();
void cancelGroupAction ();
void clear ();
void markSavePosition ();
bool isSavePosition () const;
using ListenerProvider<UIUndoManager, IUIUndoManagerListener>::registerListener;
using ListenerProvider<UIUndoManager, IUIUndoManagerListener>::unregisterListener;
protected:
iterator position;
iterator savePosition;
using GroupActionDeque = std::deque<UIGroupAction*>;
GroupActionDeque groupQueue;
};
} // VSTGUI
#endif // VSTGUI_LIVE_EDITING