diff --git a/src/scenedit/scen.actions.cpp b/src/scenedit/scen.actions.cpp index 87f7e443..a9c55c81 100644 --- a/src/scenedit/scen.actions.cpp +++ b/src/scenedit/scen.actions.cpp @@ -534,6 +534,8 @@ static bool handle_rb_action(location the_point, bool option_hit) { if(option_hit) { if(j == size_before) break; + undo_list.add(action_ptr(new aCreateDeleteTalkNode(false, cur_town, j, town->talking.talk_nodes[j]))); + update_edit_menu(); town->talking.talk_nodes.erase(town->talking.talk_nodes.begin() + j); } else { bool is_new = false; @@ -541,8 +543,20 @@ static bool handle_rb_action(location the_point, bool option_hit) { is_new = true; town->talking.talk_nodes.emplace_back(); } - if((j = edit_talk_node(j)) >= 0 && is_new) - town->talking.talk_nodes.erase(town->talking.talk_nodes.begin() + j); + if((j = edit_talk_node(j)) >= 0){ + // Cancel create new + if(is_new) + town->talking.talk_nodes.erase(town->talking.talk_nodes.begin() + j); + } + // Create confirmed + else if(is_new){ + undo_list.add(action_ptr(new aCreateDeleteTalkNode(true, cur_town, j, town->talking.talk_nodes[j]))); + update_edit_menu(); + } + // Edit confirmed + else{ + + } } start_dialogue_editing(); if(size_before > town->talking.talk_nodes.size()) diff --git a/src/scenedit/scen.undo.cpp b/src/scenedit/scen.undo.cpp index ca7902c0..76a1e100 100644 --- a/src/scenedit/scen.undo.cpp +++ b/src/scenedit/scen.undo.cpp @@ -1000,10 +1000,28 @@ bool aEditOutEncounter::redo_me() { bool aEditPersonality::undo_me() { scenario.towns[town_num]->talking.people[which] = old_pers; + // Show the change + start_dialogue_editing(); return true; } bool aEditPersonality::redo_me() { scenario.towns[town_num]->talking.people[which] = new_pers; + // Show the change + start_dialogue_editing(); + return true; +} + +bool aCreateDeleteTalkNode::undo_me() { + scenario.towns[town_num]->talking.talk_nodes.erase(scenario.towns[town_num]->talking.talk_nodes.begin() + which); + // Show the change + start_dialogue_editing(); + return true; +} + +bool aCreateDeleteTalkNode::redo_me() { + scenario.towns[town_num]->talking.talk_nodes.insert(scenario.towns[town_num]->talking.talk_nodes.begin() + which, node); + // Show the change + start_dialogue_editing(); return true; } \ No newline at end of file diff --git a/src/scenedit/scen.undo.hpp b/src/scenedit/scen.undo.hpp index 7461fae9..e3d3d173 100644 --- a/src/scenedit/scen.undo.hpp +++ b/src/scenedit/scen.undo.hpp @@ -674,4 +674,15 @@ public: cAction("Edit Personality"), town_num(town_num), which(which), old_pers(old_pers), new_pers(new_pers) {} }; +class aCreateDeleteTalkNode : public cAction { + size_t town_num; + size_t which; + cSpeech::cNode node; + bool undo_me() override; + bool redo_me() override; +public: + aCreateDeleteTalkNode(bool create, size_t town_num, size_t which, cSpeech::cNode node) : + cAction(create ? "Create Talk Node" : "Delete Talk Node", !create), town_num(town_num), which(which), node(node) {} +}; + #endif \ No newline at end of file