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
49 lines
1.0 KiB
C++
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 {};
|
|
}
|
|
|
|
}
|