[studio,nostalgia] Fix PaletteEditor color update command merging, add setObsolete
This commit is contained in:
parent
1f6fefdb68
commit
c6efabaa1d
@ -243,7 +243,7 @@ void PaletteEditorImGui::drawColorEditor() noexcept {
|
|||||||
auto const¤tName = m_pal.colorNames[m_selectedColorRow];
|
auto const¤tName = m_pal.colorNames[m_selectedColorRow];
|
||||||
ox::IString<50> name;
|
ox::IString<50> name;
|
||||||
name = currentName;
|
name = currentName;
|
||||||
auto const nameUpdated = ImGui::InputText("Name", name.data(), name.cap() + 1);
|
auto const nameUpdated = ig::InputText("Name", name);
|
||||||
bool inputFocused = ImGui::IsItemFocused();
|
bool inputFocused = ImGui::IsItemFocused();
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
colorInput("Red", r, inputFocused);
|
colorInput("Red", r, inputFocused);
|
||||||
@ -271,7 +271,7 @@ void PaletteEditorImGui::drawColorEditor() noexcept {
|
|||||||
}
|
}
|
||||||
if (nameUpdated) {
|
if (nameUpdated) {
|
||||||
std::ignore = pushCommand<UpdateColorInfoCommand>(
|
std::ignore = pushCommand<UpdateColorInfoCommand>(
|
||||||
m_pal, m_selectedColorRow, ox::String{name.data()});
|
m_pal, m_selectedColorRow, ox::String{name});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,19 +188,21 @@ UpdateColorInfoCommand::UpdateColorInfoCommand(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UpdateColorInfoCommand::mergeWith(UndoCommand const&cmd) noexcept {
|
bool UpdateColorInfoCommand::mergeWith(UndoCommand &cmd) noexcept {
|
||||||
if (cmd.commandId() != static_cast<int>(PaletteEditorCommandId::UpdateColor)) {
|
if (cmd.commandId() != static_cast<int>(PaletteEditorCommandId::UpdateColorInfo)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
auto ucCmd = static_cast<UpdateColorInfoCommand const*>(&cmd);
|
auto ucCmd = dynamic_cast<UpdateColorInfoCommand const*>(&cmd);
|
||||||
if (m_idx != ucCmd->m_idx) {
|
if (m_idx != ucCmd->m_idx) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_pal.colorNames[m_idx] = std::move(ucCmd->m_pal.colorNames[m_idx]);
|
||||||
|
setObsolete(m_altColorInfo == m_pal.colorNames[m_idx]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int UpdateColorInfoCommand::commandId() const noexcept {
|
int UpdateColorInfoCommand::commandId() const noexcept {
|
||||||
return static_cast<int>(PaletteEditorCommandId::UpdateColor);
|
return static_cast<int>(PaletteEditorCommandId::UpdateColorInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Error UpdateColorInfoCommand::redo() noexcept {
|
ox::Error UpdateColorInfoCommand::redo() noexcept {
|
||||||
@ -232,11 +234,11 @@ UpdateColorCommand::UpdateColorCommand(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UpdateColorCommand::mergeWith(UndoCommand const&cmd) noexcept {
|
bool UpdateColorCommand::mergeWith(UndoCommand &cmd) noexcept {
|
||||||
if (cmd.commandId() != static_cast<int>(PaletteEditorCommandId::UpdateColor)) {
|
if (cmd.commandId() != static_cast<int>(PaletteEditorCommandId::UpdateColor)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
auto ucCmd = static_cast<UpdateColorCommand const*>(&cmd);
|
auto ucCmd = dynamic_cast<UpdateColorCommand const*>(&cmd);
|
||||||
if (m_idx != ucCmd->m_idx) {
|
if (m_idx != ucCmd->m_idx) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ class UpdateColorInfoCommand: public studio::UndoCommand {
|
|||||||
~UpdateColorInfoCommand() noexcept override = default;
|
~UpdateColorInfoCommand() noexcept override = default;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
bool mergeWith(const UndoCommand &cmd) noexcept final;
|
bool mergeWith(UndoCommand &cmd) noexcept final;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
int commandId() const noexcept final;
|
int commandId() const noexcept final;
|
||||||
@ -194,7 +194,7 @@ class UpdateColorCommand: public studio::UndoCommand {
|
|||||||
~UpdateColorCommand() noexcept override = default;
|
~UpdateColorCommand() noexcept override = default;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
bool mergeWith(const UndoCommand &cmd) noexcept final;
|
bool mergeWith(UndoCommand &cmd) noexcept final;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
int commandId() const noexcept final;
|
int commandId() const noexcept final;
|
||||||
|
@ -17,13 +17,22 @@ class NoChangesException: public ox::Exception {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class UndoCommand {
|
class UndoCommand {
|
||||||
|
private:
|
||||||
|
bool m_obsolete{};
|
||||||
public:
|
public:
|
||||||
virtual ~UndoCommand() noexcept = default;
|
virtual ~UndoCommand() noexcept = default;
|
||||||
virtual ox::Error redo() noexcept = 0;
|
virtual ox::Error redo() noexcept = 0;
|
||||||
virtual ox::Error undo() noexcept = 0;
|
virtual ox::Error undo() noexcept = 0;
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
virtual int commandId() const noexcept = 0;
|
virtual int commandId() const noexcept = 0;
|
||||||
virtual bool mergeWith(UndoCommand const&cmd) noexcept;
|
virtual bool mergeWith(UndoCommand &cmd) noexcept;
|
||||||
|
constexpr void setObsolete(bool obsolete) noexcept {
|
||||||
|
m_obsolete = obsolete;
|
||||||
|
}
|
||||||
|
[[nodiscard]]
|
||||||
|
constexpr bool isObsolete() const noexcept {
|
||||||
|
return m_obsolete;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
namespace studio {
|
namespace studio {
|
||||||
|
|
||||||
bool UndoCommand::mergeWith(UndoCommand const&) noexcept {
|
bool UndoCommand::mergeWith(UndoCommand&) noexcept {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,10 @@ ox::Error UndoStack::push(ox::UPtr<UndoCommand> &&cmd) noexcept {
|
|||||||
m_stack.emplace_back(std::move(cmd));
|
m_stack.emplace_back(std::move(cmd));
|
||||||
++m_stackIdx;
|
++m_stackIdx;
|
||||||
}
|
}
|
||||||
|
if ((*m_stack.back().unwrap())->isObsolete()) {
|
||||||
|
m_stack.pop_back();
|
||||||
|
--m_stackIdx;
|
||||||
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user