[studio] Make undo/redo skip over obsolete commands
This commit is contained in:
parent
b4798fd2ab
commit
e002109829
@ -7,9 +7,7 @@
|
|||||||
namespace studio {
|
namespace studio {
|
||||||
|
|
||||||
ox::Error UndoStack::push(ox::UPtr<UndoCommand> &&cmd) noexcept {
|
ox::Error UndoStack::push(ox::UPtr<UndoCommand> &&cmd) noexcept {
|
||||||
for (auto const i = m_stackIdx; i < m_stack.size();) {
|
m_stack.resize(m_stackIdx);
|
||||||
std::ignore = m_stack.erase(i);
|
|
||||||
}
|
|
||||||
OX_RETURN_ERROR(cmd->redo());
|
OX_RETURN_ERROR(cmd->redo());
|
||||||
redoTriggered.emit(cmd.get());
|
redoTriggered.emit(cmd.get());
|
||||||
changeTriggered.emit(cmd.get());
|
changeTriggered.emit(cmd.get());
|
||||||
@ -25,22 +23,29 @@ ox::Error UndoStack::push(ox::UPtr<UndoCommand> &&cmd) noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ox::Error UndoStack::redo() noexcept {
|
ox::Error UndoStack::redo() noexcept {
|
||||||
if (m_stackIdx < m_stack.size()) {
|
while (m_stackIdx < m_stack.size()) {
|
||||||
auto &c = m_stack[m_stackIdx];
|
auto const &c = m_stack[m_stackIdx];
|
||||||
OX_RETURN_ERROR(c->redo());
|
|
||||||
++m_stackIdx;
|
++m_stackIdx;
|
||||||
redoTriggered.emit(c.get());
|
if (!c->isObsolete()) {
|
||||||
changeTriggered.emit(c.get());
|
OX_RETURN_ERROR(c->redo());
|
||||||
|
redoTriggered.emit(c.get());
|
||||||
|
changeTriggered.emit(c.get());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Error UndoStack::undo() noexcept {
|
ox::Error UndoStack::undo() noexcept {
|
||||||
if (m_stackIdx) {
|
while (m_stackIdx) {
|
||||||
auto &c = m_stack[--m_stackIdx];
|
--m_stackIdx;
|
||||||
OX_RETURN_ERROR(c->undo());
|
auto const &c = m_stack[m_stackIdx];
|
||||||
undoTriggered.emit(c.get());
|
if (!c->isObsolete()) {
|
||||||
changeTriggered.emit(c.get());
|
OX_RETURN_ERROR(c->undo());
|
||||||
|
undoTriggered.emit(c.get());
|
||||||
|
changeTriggered.emit(c.get());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user