#include #include "editor.h" #include "editor_actions.h" #include "editor_history.h" void CEditorHistory::RecordAction(const std::shared_ptr &pAction) { RecordAction(pAction, nullptr); } void CEditorHistory::Execute(const std::shared_ptr &pAction, const char *pDisplay) { pAction->Redo(); RecordAction(pAction, pDisplay); } void CEditorHistory::RecordAction(const std::shared_ptr &pAction, const char *pDisplay) { m_vpRedoActions.clear(); if((int)m_vpUndoActions.size() >= g_Config.m_ClEditorMaxHistory) { m_vpUndoActions.pop_front(); } if(pDisplay == nullptr) m_vpUndoActions.emplace_back(pAction); else m_vpUndoActions.emplace_back(std::make_shared(m_pEditor, std::vector>{pAction}, pDisplay)); } bool CEditorHistory::Undo() { if(m_vpUndoActions.empty()) return false; auto pLastAction = m_vpUndoActions.back(); m_vpUndoActions.pop_back(); pLastAction->Undo(); m_vpRedoActions.emplace_back(pLastAction); return true; } bool CEditorHistory::Redo() { if(m_vpRedoActions.empty()) return false; auto pLastAction = m_vpRedoActions.back(); m_vpRedoActions.pop_back(); pLastAction->Redo(); m_vpUndoActions.emplace_back(pLastAction); return true; } void CEditorHistory::Clear() { m_vpUndoActions.clear(); m_vpRedoActions.clear(); }