Files
jasper/src/olympic/studio/modlib/src/undostack.cpp
Gary Talent 4ea4a61d54 Squashed 'deps/nostalgia/' changes from 98ddb08a..791b7746
791b7746 [nostalgia] Update liccor file
842e3587 [nostalgia] Update .gitignore for new location of scripts dir
318e7900 [ox] Update liccor file
9f338a74 [ox] Run liccor
645e48af [nostalgia,olympic] Run liccor
ef92c8df [nostalgia] Make pkg-gba.py force lower case for pack tool
849d50be [nostalgia/core] Make getTileIdx return an Optional
845092f1 [turbine] Make common turbine.cpp file private to its target
75819a17 [ox/std] Add SmallMap::values()
d66da857 [ox/std] SmallMap fixes, add findIdx function

git-subtree-dir: deps/nostalgia
git-subtree-split: 791b7746f331a3ad02cfdcdbc7c3ecde0cab7779
2025-01-11 12:32:00 -06:00

49 lines
1.0 KiB
C++

/*
* Copyright 2016 - 2025 Gary Talent (gary@drinkingtea.net). All rights reserved.
*/
#include <studio/undostack.hpp>
namespace studio {
ox::Error UndoStack::push(ox::UPtr<UndoCommand> &&cmd) noexcept {
for (auto const i = m_stackIdx; i < m_stack.size();) {
std::ignore = m_stack.erase(i);
}
OX_RETURN_ERROR(cmd->redo());
redoTriggered.emit(cmd.get());
changeTriggered.emit(cmd.get());
if (m_stack.empty() || !(*m_stack.back().value)->mergeWith(*cmd)) {
m_stack.emplace_back(std::move(cmd));
++m_stackIdx;
}
if ((*m_stack.back().unwrap())->isObsolete()) {
m_stack.pop_back();
--m_stackIdx;
}
return {};
}
ox::Error UndoStack::redo() noexcept {
if (m_stackIdx < m_stack.size()) {
auto &c = m_stack[m_stackIdx];
OX_RETURN_ERROR(c->redo());
++m_stackIdx;
redoTriggered.emit(c.get());
changeTriggered.emit(c.get());
}
return {};
}
ox::Error UndoStack::undo() noexcept {
if (m_stackIdx) {
auto &c = m_stack[--m_stackIdx];
OX_RETURN_ERROR(c->undo());
undoTriggered.emit(c.get());
changeTriggered.emit(c.get());
}
return {};
}
}