[jasper/world/studio] Make UndoCommand undo/redo return ox::Error
All checks were successful
Build / build (push) Successful in 3m9s

This commit is contained in:
Gary Talent 2024-05-23 21:30:15 -05:00
parent 815f23a0b5
commit 6eb78f90cf
20 changed files with 87 additions and 63 deletions

View File

@ -20,17 +20,18 @@ AddObjectSet::AddObjectSet(WorldDoc &doc, ox::UUID const&objSetUuid):
}
}
void AddObjectSet::redo() noexcept {
ox::Error AddObjectSet::redo() noexcept {
m_doc.objSets.insert(m_insertIdx, {
.path = std::move(m_path),
.id = ++m_doc.objSetIdIdx,
});
return {};
}
void AddObjectSet::undo() noexcept {
ox::Error AddObjectSet::undo() noexcept {
m_path = std::move(m_doc.objSets[m_insertIdx].path);
--m_doc.objSetIdIdx;
std::ignore = m_doc.objSets.erase(m_insertIdx);
return m_doc.objSets.erase(m_insertIdx).error;
}
int AddObjectSet::commandId() const noexcept {
@ -43,13 +44,14 @@ RmObjectSet::RmObjectSet(WorldDoc &doc, size_t idx):
m_idx(idx) {
}
void RmObjectSet::redo() noexcept {
ox::Error RmObjectSet::redo() noexcept {
m_entry = std::move(m_doc.objSets[m_idx]);
std::ignore = m_doc.objSets.erase(m_idx);
return m_doc.objSets.erase(m_idx).error;
}
void RmObjectSet::undo() noexcept {
ox::Error RmObjectSet::undo() noexcept {
m_doc.objSets.emplace(m_idx, std::move(m_entry));
return {};
}
int RmObjectSet::commandId() const noexcept {

View File

@ -19,8 +19,8 @@ class AddObjectSet: public studio::UndoCommand {
ox::String m_path;
public:
AddObjectSet(WorldDoc &doc, ox::UUID const&objSetUuid);
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
[[nodiscard]]
@ -36,8 +36,8 @@ class RmObjectSet: public studio::UndoCommand {
ObjectSetEntry m_entry;
public:
RmObjectSet(WorldDoc &doc, size_t idx);
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};

View File

@ -18,16 +18,18 @@ EditWorldSizeCommand::EditWorldSizeCommand(
m_oldSize(m_doc.columns, m_doc.rows),
m_newSize(size) {}
void EditWorldSizeCommand::redo() noexcept {
ox::Error EditWorldSizeCommand::redo() noexcept {
m_oldMap = m_doc.tiles;
resize(m_doc, m_newSize);
oxLogError(loadWorldStatic(m_objCache, m_doc).moveTo(m_worldStatic));
oxReturnError(loadWorldStatic(m_objCache, m_doc).moveTo(m_worldStatic));
return {};
}
void EditWorldSizeCommand::undo() noexcept {
ox::Error EditWorldSizeCommand::undo() noexcept {
resize(m_doc, m_oldSize);
m_doc.tiles = std::move(m_oldMap);
oxLogError(loadWorldStatic(m_objCache, m_doc).moveTo(m_worldStatic));
oxReturnError(loadWorldStatic(m_objCache, m_doc).moveTo(m_worldStatic));
return {};
}
bool EditWorldSizeCommand::mergeWith(studio::UndoCommand const&cmd) noexcept {

View File

@ -27,8 +27,8 @@ class EditWorldSizeCommand: public studio::UndoCommand {
WorldDoc &doc,
WorldStatic &worldStatic,
ox::Size const&size);
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
bool mergeWith(studio::UndoCommand const&cmd) noexcept override;
[[nodiscard]]
int commandId() const noexcept override;

View File

@ -27,12 +27,14 @@ ModifyTilesCommand::ModifyTilesCommand(
}
}
void ModifyTilesCommand::redo() noexcept {
ox::Error ModifyTilesCommand::redo() noexcept {
swap();
return {};
}
void ModifyTilesCommand::undo() noexcept {
ox::Error ModifyTilesCommand::undo() noexcept {
swap();
return {};
}
int ModifyTilesCommand::commandId() const noexcept {

View File

@ -29,8 +29,8 @@ class ModifyTilesCommand: public studio::UndoCommand {
WorldStatic &worldStatic,
ObjectCache &objCache,
ox::Vector<Mod> mods);
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
private:

View File

@ -19,15 +19,17 @@ AddObject::AddObject(WorldObjectSet &doc) noexcept:
}
}
void AddObject::redo() noexcept {
ox::Error AddObject::redo() noexcept {
++m_doc.objIdIdx;
m_doc.objects.emplace(m_insertIdx, std::move(m_obj));
return {};
}
void AddObject::undo() noexcept {
ox::Error AddObject::undo() noexcept {
m_obj = std::move(m_doc.objects[m_insertIdx]);
std::ignore = m_doc.objects.erase(m_insertIdx);
oxReturnError(m_doc.objects.erase(m_insertIdx));
--m_doc.objIdIdx;
return {};
}
int AddObject::commandId() const noexcept {

View File

@ -19,8 +19,8 @@ class AddObject: public studio::UndoCommand {
WorldObject m_obj{};
public:
AddObject(WorldObjectSet &doc) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
[[nodiscard]]

View File

@ -14,20 +14,21 @@ AddPalette::AddPalette(WorldObjectSet &doc, ox::FileAddress palAddr) noexcept:
m_palAddr(std::move(palAddr)) {
}
void AddPalette::redo() noexcept {
ox::Error AddPalette::redo() noexcept {
m_doc.palettes.emplace_back(PaletteCycle{
.palette = m_palAddr
});
std::sort(m_doc.palettes.begin(), m_doc.palettes.end(), [](PaletteCycle const&a, PaletteCycle const&b) {
return a.palette.getPath().or_value("") < b.palette.getPath().or_value("");
});
return {};
}
void AddPalette::undo() noexcept {
ox::Error AddPalette::undo() noexcept {
auto const idx = std::find_if(m_doc.palettes.begin(), m_doc.palettes.end(), [this](PaletteCycle const&v) {
return v.palette == m_palAddr;
});
std::ignore = m_doc.palettes.erase(idx);
return m_doc.palettes.erase(idx).error;
}
int AddPalette::commandId() const noexcept {

View File

@ -18,8 +18,8 @@ class AddPalette: public studio::UndoCommand {
ox::FileAddress m_palAddr;
public:
AddPalette(WorldObjectSet &doc, ox::FileAddress palAddr) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};

View File

@ -19,16 +19,18 @@ ChangeTileSheet::ChangeTileSheet(
m_selectedTilesheetIdx(selectedTilesheetIdx) {
}
void ChangeTileSheet::redo() noexcept {
ox::Error ChangeTileSheet::redo() noexcept {
m_oldVal = std::move(m_doc.tilesheet);
m_doc.tilesheet = std::move(m_newVal);
m_selectedTilesheetIdx = m_newIdx;
return {};
}
void ChangeTileSheet::undo() noexcept {
ox::Error ChangeTileSheet::undo() noexcept {
m_newVal = std::move(m_doc.tilesheet);
m_doc.tilesheet = std::move(m_oldVal);
m_selectedTilesheetIdx = m_oldIdx;
return {};
}
int ChangeTileSheet::commandId() const noexcept {

View File

@ -26,8 +26,8 @@ class ChangeTileSheet: public studio::UndoCommand {
ox::FileAddress newVal,
size_t newIdx,
size_t &selectedTilesheetIdx) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};

View File

@ -16,15 +16,17 @@ EditObjectName::EditObjectName(WorldObjectSet &doc, size_t objIdx, ox::String ne
m_newVal(std::move(newName)) {
}
void EditObjectName::redo() noexcept {
ox::Error EditObjectName::redo() noexcept {
auto &obj = m_doc.objects[m_objIdx];
obj.name = std::move(m_newVal);
return {};
}
void EditObjectName::undo() noexcept {
ox::Error EditObjectName::undo() noexcept {
auto &obj = m_doc.objects[m_objIdx];
m_newVal = std::move(obj.name);
obj.name = m_oldVal;
return {};
}
int EditObjectName::commandId() const noexcept {
@ -51,14 +53,16 @@ EditObjectSubSheet::EditObjectSubSheet(
m_oldVal(m_doc.objects[m_objIdx].subsheetId) {
}
void EditObjectSubSheet::redo() noexcept {
ox::Error EditObjectSubSheet::redo() noexcept {
auto &obj = m_doc.objects[m_objIdx];
obj.subsheetId = m_newVal;
return {};
}
void EditObjectSubSheet::undo() noexcept {
ox::Error EditObjectSubSheet::undo() noexcept {
auto &obj = m_doc.objects[m_objIdx];
obj.subsheetId = m_oldVal;
return {};
}
int EditObjectSubSheet::commandId() const noexcept {
@ -73,14 +77,16 @@ EditObjectPalette::EditObjectPalette(WorldObjectSet &doc, size_t objIdx, uint16_
m_newVal(palBank) {
}
void EditObjectPalette::redo() noexcept {
ox::Error EditObjectPalette::redo() noexcept {
auto &obj = m_doc.objects[m_objIdx];
obj.palBank = m_newVal;
return {};
}
void EditObjectPalette::undo() noexcept {
ox::Error EditObjectPalette::undo() noexcept {
auto &obj = m_doc.objects[m_objIdx];
obj.palBank = m_oldVal;
return {};
}
[[nodiscard]]
@ -96,14 +102,16 @@ EditObjectCollisionMap::EditObjectCollisionMap(WorldObjectSet &doc, size_t objId
m_newVal(colMap) {
}
void EditObjectCollisionMap::redo() noexcept {
ox::Error EditObjectCollisionMap::redo() noexcept {
auto &obj = m_doc.objects[m_objIdx];
obj.collisionMap = m_newVal;
return {};
}
void EditObjectCollisionMap::undo() noexcept {
ox::Error EditObjectCollisionMap::undo() noexcept {
auto &obj = m_doc.objects[m_objIdx];
obj.collisionMap = m_oldVal;
return {};
}
[[nodiscard]]

View File

@ -20,8 +20,8 @@ class EditObjectName: public studio::UndoCommand {
ox::String m_newVal{};
public:
EditObjectName(WorldObjectSet &doc, size_t objIdx, ox::String newName) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
bool mergeWith(UndoCommand const&cmd) noexcept override;
@ -35,8 +35,8 @@ class EditObjectSubSheet: public studio::UndoCommand {
ncore::SubSheetId const m_oldVal{};
public:
EditObjectSubSheet(WorldObjectSet &doc, size_t objIdx, ncore::SubSheetId subSheetId) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};
@ -49,8 +49,8 @@ class EditObjectPalette: public studio::UndoCommand {
uint16_t const m_newVal{};
public:
EditObjectPalette(WorldObjectSet &doc, size_t objIdx, uint16_t palBank) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};
@ -63,8 +63,8 @@ class EditObjectCollisionMap: public studio::UndoCommand {
CollisionMap const m_newVal{};
public:
EditObjectCollisionMap(WorldObjectSet &doc, size_t objIdx, CollisionMap colMap) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};

View File

@ -13,12 +13,14 @@ EditPalette::EditPalette(PaletteCycle &doc, uint16_t interval) noexcept:
m_newVal(interval) {
}
void EditPalette::redo() noexcept {
ox::Error EditPalette::redo() noexcept {
m_doc.intervalMs = m_newVal;
return {};
}
void EditPalette::undo() noexcept {
ox::Error EditPalette::undo() noexcept {
m_doc.intervalMs = m_oldVal;
return {};
}
int EditPalette::commandId() const noexcept {

View File

@ -19,8 +19,8 @@ class EditPalette: public studio::UndoCommand {
uint16_t const m_newVal{};
public:
EditPalette(PaletteCycle &doc, uint16_t interval) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};

View File

@ -12,13 +12,14 @@ RmObject::RmObject(WorldObjectSet &doc, size_t const rmIdx) noexcept:
m_rmIdx(rmIdx) {
}
void RmObject::redo() noexcept {
ox::Error RmObject::redo() noexcept {
m_obj = std::move(m_doc.objects[m_rmIdx]);
std::ignore = m_doc.objects.erase(m_rmIdx);
return m_doc.objects.erase(m_rmIdx).error;
}
void RmObject::undo() noexcept {
ox::Error RmObject::undo() noexcept {
m_doc.objects.emplace(m_rmIdx, std::move(m_obj));
return {};
}
int RmObject::commandId() const noexcept {

View File

@ -19,8 +19,8 @@ class RmObject: public studio::UndoCommand {
WorldObject m_obj{};
public:
RmObject(WorldObjectSet &doc, size_t rmIdx) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};

View File

@ -14,16 +14,18 @@ RmPalette::RmPalette(WorldObjectSet &doc, size_t rmIdx) noexcept:
m_rmIdx(rmIdx) {
}
void RmPalette::redo() noexcept {
ox::Error RmPalette::redo() noexcept {
m_pal = std::move(m_doc.palettes[m_rmIdx]);
std::ignore = m_doc.palettes.erase(m_rmIdx);
return {};
}
void RmPalette::undo() noexcept {
ox::Error RmPalette::undo() noexcept {
m_doc.palettes.emplace_back(std::move(m_pal));
std::sort(m_doc.palettes.begin(), m_doc.palettes.end(), [](PaletteCycle const&a, PaletteCycle const&b) {
return a.palette.getPath().or_value("") < b.palette.getPath().or_value("");
});
return {};
}
int RmPalette::commandId() const noexcept {

View File

@ -19,8 +19,8 @@ class RmPalette: public studio::UndoCommand {
size_t const m_rmIdx = 0;
public:
RmPalette(WorldObjectSet &doc, size_t rmIdx) noexcept;
void redo() noexcept override;
void undo() noexcept override;
ox::Error redo() noexcept override;
ox::Error undo() noexcept override;
[[nodiscard]]
int commandId() const noexcept override;
};