undo/redo for edit talk node
This commit is contained in:
@@ -543,7 +543,8 @@ 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){
|
||||
cSpeech::cNode old_node = town->talking.talk_nodes[j];
|
||||
if(edit_talk_node(j) >= 0){
|
||||
// Cancel create new
|
||||
if(is_new)
|
||||
town->talking.talk_nodes.erase(town->talking.talk_nodes.begin() + j);
|
||||
@@ -554,8 +555,9 @@ static bool handle_rb_action(location the_point, bool option_hit) {
|
||||
update_edit_menu();
|
||||
}
|
||||
// Edit confirmed
|
||||
else{
|
||||
|
||||
else if(old_node != town->talking.talk_nodes[j]){
|
||||
undo_list.add(action_ptr(new aEditTalkNode(cur_town, j, old_node, town->talking.talk_nodes[j])));
|
||||
update_edit_menu();
|
||||
}
|
||||
}
|
||||
start_dialogue_editing();
|
||||
|
@@ -1024,4 +1024,14 @@ bool aCreateDeleteTalkNode::redo_me() {
|
||||
// Show the change
|
||||
start_dialogue_editing();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool aEditTalkNode::undo_me() {
|
||||
scenario.towns[town_num]->talking.talk_nodes[which] = old_node;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool aEditTalkNode::redo_me() {
|
||||
scenario.towns[town_num]->talking.talk_nodes[which] = new_node;
|
||||
return true;
|
||||
}
|
@@ -685,4 +685,16 @@ public:
|
||||
cAction(create ? "Create Talk Node" : "Delete Talk Node", !create), town_num(town_num), which(which), node(node) {}
|
||||
};
|
||||
|
||||
class aEditTalkNode : public cAction {
|
||||
size_t town_num;
|
||||
size_t which;
|
||||
cSpeech::cNode old_node;
|
||||
cSpeech::cNode new_node;
|
||||
bool undo_me() override;
|
||||
bool redo_me() override;
|
||||
public:
|
||||
aEditTalkNode(size_t town_num, size_t which, cSpeech::cNode old_node, cSpeech::cNode new_node) :
|
||||
cAction("Edit Talk Node"), town_num(town_num), which(which), old_node(old_node), new_node(new_node) {}
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user