diff options
author | Haoyu Qiu <timothyqiu32@gmail.com> | 2022-02-14 14:28:42 +0800 |
---|---|---|
committer | Haoyu Qiu <timothyqiu32@gmail.com> | 2022-02-14 14:48:25 +0800 |
commit | 9aaab5b693dc5cf9470fb4e8415e5ac782e806cb (patch) | |
tree | edae2c8d57514000894f6dbffc6617931fed1695 | |
parent | 48ed0400bc2313b9652d7f6cfd6119d784adc956 (diff) |
Make duplicate animation prompt for new name
-rw-r--r-- | editor/plugins/animation_player_editor_plugin.cpp | 108 | ||||
-rw-r--r-- | editor/plugins/animation_player_editor_plugin.h | 2 |
2 files changed, 58 insertions, 52 deletions
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 1d9a2422da..c3f62bcfd8 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -308,7 +308,7 @@ void AnimationPlayerEditor::_animation_selected(int p_which) { } void AnimationPlayerEditor::_animation_new() { - renaming = false; + name_dialog_op = TOOL_NEW_ANIM; name_title->set_text(TTR("New Animation Name:")); int count = 1; @@ -341,7 +341,7 @@ void AnimationPlayerEditor::_animation_rename() { name_title->set_text(TTR("Change Animation Name:")); name->set_text(selected_name); - renaming = true; + name_dialog_op = TOOL_RENAME_ANIM; name_dialog->popup_centered(Size2(300, 90)); name->select_all(); name->grab_focus(); @@ -494,7 +494,7 @@ void AnimationPlayerEditor::_animation_name_edited() { return; } - if (renaming && animation->get_item_count() > 0 && animation->get_item_text(animation->get_selected()) == new_name) { + if (name_dialog_op == TOOL_RENAME_ANIM && animation->get_item_count() > 0 && animation->get_item_text(animation->get_selected()) == new_name) { name_dialog->hide(); return; } @@ -505,37 +505,57 @@ void AnimationPlayerEditor::_animation_name_edited() { return; } - if (renaming) { - String current = animation->get_item_text(animation->get_selected()); - Ref<Animation> anim = player->get_animation(current); + switch (name_dialog_op) { + case TOOL_RENAME_ANIM: { + String current = animation->get_item_text(animation->get_selected()); + Ref<Animation> anim = player->get_animation(current); + + undo_redo->create_action(TTR("Rename Animation")); + undo_redo->add_do_method(player, "rename_animation", current, new_name); + undo_redo->add_do_method(anim.ptr(), "set_name", new_name); + undo_redo->add_undo_method(player, "rename_animation", new_name, current); + undo_redo->add_undo_method(anim.ptr(), "set_name", current); + undo_redo->add_do_method(this, "_animation_player_changed", player); + undo_redo->add_undo_method(this, "_animation_player_changed", player); + undo_redo->commit_action(); + + _select_anim_by_name(new_name); + } break; - undo_redo->create_action(TTR("Rename Animation")); - undo_redo->add_do_method(player, "rename_animation", current, new_name); - undo_redo->add_do_method(anim.ptr(), "set_name", new_name); - undo_redo->add_undo_method(player, "rename_animation", new_name, current); - undo_redo->add_undo_method(anim.ptr(), "set_name", current); - undo_redo->add_do_method(this, "_animation_player_changed", player); - undo_redo->add_undo_method(this, "_animation_player_changed", player); - undo_redo->commit_action(); + case TOOL_NEW_ANIM: { + Ref<Animation> new_anim = Ref<Animation>(memnew(Animation)); + new_anim->set_name(new_name); + + undo_redo->create_action(TTR("Add Animation")); + undo_redo->add_do_method(player, "add_animation", new_name, new_anim); + undo_redo->add_undo_method(player, "remove_animation", new_name); + undo_redo->add_do_method(this, "_animation_player_changed", player); + undo_redo->add_undo_method(this, "_animation_player_changed", player); + if (animation->get_item_count() == 0) { + undo_redo->add_do_method(this, "_start_onion_skinning"); + undo_redo->add_undo_method(this, "_stop_onion_skinning"); + } + undo_redo->commit_action(); - _select_anim_by_name(new_name); + _select_anim_by_name(new_name); + } break; - } else { - Ref<Animation> new_anim = Ref<Animation>(memnew(Animation)); - new_anim->set_name(new_name); + case TOOL_DUPLICATE_ANIM: { + String current = animation->get_item_text(animation->get_selected()); + Ref<Animation> anim = player->get_animation(current); - undo_redo->create_action(TTR("Add Animation")); - undo_redo->add_do_method(player, "add_animation", new_name, new_anim); - undo_redo->add_undo_method(player, "remove_animation", new_name); - undo_redo->add_do_method(this, "_animation_player_changed", player); - undo_redo->add_undo_method(this, "_animation_player_changed", player); - if (animation->get_item_count() == 0) { - undo_redo->add_do_method(this, "_start_onion_skinning"); - undo_redo->add_undo_method(this, "_stop_onion_skinning"); - } - undo_redo->commit_action(); + Ref<Animation> new_anim = _animation_clone(anim); + + undo_redo->create_action(TTR("Duplicate Animation")); + undo_redo->add_do_method(player, "add_animation", new_name, new_anim); + undo_redo->add_undo_method(player, "remove_animation", new_name); + undo_redo->add_do_method(player, "animation_set_next", new_name, player->animation_get_next(current)); + undo_redo->add_do_method(this, "_animation_player_changed", player); + undo_redo->add_undo_method(this, "_animation_player_changed", player); + undo_redo->commit_action(); - _select_anim_by_name(new_name); + _select_anim_by_name(new_name); + } break; } name_dialog->hide(); @@ -968,28 +988,17 @@ void AnimationPlayerEditor::_animation_duplicate() { return; } - Ref<Animation> new_anim = _animation_clone(anim); String new_name = current; while (player->has_animation(new_name)) { new_name = new_name + " (copy)"; } - new_anim->set_name(new_name); - - undo_redo->create_action(TTR("Duplicate Animation")); - undo_redo->add_do_method(player, "add_animation", new_name, new_anim); - undo_redo->add_undo_method(player, "remove_animation", new_name); - undo_redo->add_do_method(player, "animation_set_next", new_name, player->animation_get_next(current)); - undo_redo->add_do_method(this, "_animation_player_changed", player); - undo_redo->add_undo_method(this, "_animation_player_changed", player); - undo_redo->commit_action(); - for (int i = 0; i < animation->get_item_count(); i++) { - if (animation->get_item_text(i) == new_name) { - animation->select(i); - _animation_selected(i); - return; - } - } + name_title->set_text(TTR("New Animation Name:")); + name->set_text(new_name); + name_dialog_op = TOOL_DUPLICATE_ANIM; + name_dialog->popup_centered(Size2(300, 90)); + name->select_all(); + name->grab_focus(); } Ref<Animation> AnimationPlayerEditor::_animation_clone(Ref<Animation> p_anim) { @@ -1139,9 +1148,7 @@ void AnimationPlayerEditor::_animation_tool_menu(int p_option) { } break; case TOOL_DUPLICATE_ANIM: { _animation_duplicate(); - - [[fallthrough]]; // Allow immediate rename after animation is duplicated - } + } break; case TOOL_RENAME_ANIM: { _animation_rename(); } break; @@ -1610,7 +1617,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/paste_animation", TTR("Paste")), TOOL_PASTE_ANIM); tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/paste_animation_as_reference", TTR("Paste As Reference")), TOOL_PASTE_ANIM_REF); tool_anim->get_popup()->add_separator(); - tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/duplicate_animation", TTR("Duplicate")), TOOL_DUPLICATE_ANIM); + tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/duplicate_animation", TTR("Duplicate...")), TOOL_DUPLICATE_ANIM); tool_anim->get_popup()->add_separator(); tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/rename_animation", TTR("Rename...")), TOOL_RENAME_ANIM); tool_anim->get_popup()->add_shortcut(ED_SHORTCUT("animation_player_editor/edit_transitions", TTR("Edit Transitions...")), TOOL_EDIT_TRANSITIONS); @@ -1726,7 +1733,6 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay frame->connect("value_changed", callable_mp(this, &AnimationPlayerEditor::_seek_value_changed), make_binds(true, false)); scale->connect("text_submitted", callable_mp(this, &AnimationPlayerEditor::_scale_changed)); - renaming = false; last_active = false; timeline_position = 0; diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h index cfd18f39fd..cf6ba292fc 100644 --- a/editor/plugins/animation_player_editor_plugin.h +++ b/editor/plugins/animation_player_editor_plugin.h @@ -125,7 +125,7 @@ class AnimationPlayerEditor : public VBoxContainer { ConfirmationDialog *name_dialog; ConfirmationDialog *error_dialog; - bool renaming; + int name_dialog_op = TOOL_NEW_ANIM; bool updating; bool updating_blends; |