Add task rename dialog
This commit is contained in:
parent
5378337064
commit
fe2cf00c6c
|
@ -15,6 +15,7 @@
|
||||||
#include "core/io/resource_saver.h"
|
#include "core/io/resource_saver.h"
|
||||||
#include "core/list.h"
|
#include "core/list.h"
|
||||||
#include "core/math/math_defs.h"
|
#include "core/math/math_defs.h"
|
||||||
|
#include "core/math/vector2.h"
|
||||||
#include "core/object.h"
|
#include "core/object.h"
|
||||||
#include "core/os/dir_access.h"
|
#include "core/os/dir_access.h"
|
||||||
#include "core/os/memory.h"
|
#include "core/os/memory.h"
|
||||||
|
@ -141,6 +142,10 @@ void TaskTree::_on_item_selected() {
|
||||||
emit_signal("task_selected", last_selected);
|
emit_signal("task_selected", last_selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TaskTree::_on_item_double_clicked() {
|
||||||
|
emit_signal("task_double_clicked");
|
||||||
|
}
|
||||||
|
|
||||||
void TaskTree::_on_task_changed() {
|
void TaskTree::_on_task_changed() {
|
||||||
_update_item(tree->get_selected());
|
_update_item(tree->get_selected());
|
||||||
}
|
}
|
||||||
|
@ -231,6 +236,7 @@ void TaskTree::drop_data_fw(const Point2 &p_point, const Variant &p_data, Contro
|
||||||
void TaskTree::_bind_methods() {
|
void TaskTree::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("_on_item_rmb_selected"), &TaskTree::_on_item_rmb_selected);
|
ClassDB::bind_method(D_METHOD("_on_item_rmb_selected"), &TaskTree::_on_item_rmb_selected);
|
||||||
ClassDB::bind_method(D_METHOD("_on_item_selected"), &TaskTree::_on_item_selected);
|
ClassDB::bind_method(D_METHOD("_on_item_selected"), &TaskTree::_on_item_selected);
|
||||||
|
ClassDB::bind_method(D_METHOD("_on_item_double_clicked"), &TaskTree::_on_item_double_clicked);
|
||||||
ClassDB::bind_method(D_METHOD("_on_task_changed"), &TaskTree::_on_task_changed);
|
ClassDB::bind_method(D_METHOD("_on_task_changed"), &TaskTree::_on_task_changed);
|
||||||
ClassDB::bind_method(D_METHOD("load_bt", "p_behavior_tree"), &TaskTree::load_bt);
|
ClassDB::bind_method(D_METHOD("load_bt", "p_behavior_tree"), &TaskTree::load_bt);
|
||||||
ClassDB::bind_method(D_METHOD("get_bt"), &TaskTree::get_bt);
|
ClassDB::bind_method(D_METHOD("get_bt"), &TaskTree::get_bt);
|
||||||
|
@ -245,6 +251,7 @@ void TaskTree::_bind_methods() {
|
||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("rmb_pressed"));
|
ADD_SIGNAL(MethodInfo("rmb_pressed"));
|
||||||
ADD_SIGNAL(MethodInfo("task_selected"));
|
ADD_SIGNAL(MethodInfo("task_selected"));
|
||||||
|
ADD_SIGNAL(MethodInfo("task_double_clicked"));
|
||||||
ADD_SIGNAL(MethodInfo("task_dragged",
|
ADD_SIGNAL(MethodInfo("task_dragged",
|
||||||
PropertyInfo(Variant::OBJECT, "p_task", PROPERTY_HINT_RESOURCE_TYPE, "BTTask"),
|
PropertyInfo(Variant::OBJECT, "p_task", PROPERTY_HINT_RESOURCE_TYPE, "BTTask"),
|
||||||
PropertyInfo(Variant::OBJECT, "p_to_task", PROPERTY_HINT_RESOURCE_TYPE, "BTTask"),
|
PropertyInfo(Variant::OBJECT, "p_to_task", PROPERTY_HINT_RESOURCE_TYPE, "BTTask"),
|
||||||
|
@ -265,6 +272,7 @@ TaskTree::TaskTree() {
|
||||||
tree->set_allow_rmb_select(true);
|
tree->set_allow_rmb_select(true);
|
||||||
tree->connect("item_rmb_selected", this, "_on_item_rmb_selected");
|
tree->connect("item_rmb_selected", this, "_on_item_rmb_selected");
|
||||||
tree->connect("item_selected", this, "_on_item_selected");
|
tree->connect("item_selected", this, "_on_item_selected");
|
||||||
|
tree->connect("item_activated", this, "_on_item_double_clicked");
|
||||||
tree->set_drag_forwarding(this);
|
tree->set_drag_forwarding(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,6 +754,17 @@ void LimboAIEditor::_on_tree_task_selected(const Ref<BTTask> &p_task) const {
|
||||||
editor->edit_resource(p_task);
|
editor->edit_resource(p_task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LimboAIEditor::_on_tree_task_double_clicked() {
|
||||||
|
if (!task_tree->get_selected().is_valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rename_dialog->popup_centered();
|
||||||
|
rename_edit->set_text(task_tree->get_selected()->get_custom_name());
|
||||||
|
rename_edit->select_all();
|
||||||
|
rename_edit->grab_focus();
|
||||||
|
}
|
||||||
|
|
||||||
void LimboAIEditor::_on_panel_task_selected(String p_task) {
|
void LimboAIEditor::_on_panel_task_selected(String p_task) {
|
||||||
if (p_task.begins_with("res:")) {
|
if (p_task.begins_with("res:")) {
|
||||||
Ref<Script> script = ResourceLoader::load(p_task, "Script");
|
Ref<Script> script = ResourceLoader::load(p_task, "Script");
|
||||||
|
@ -894,6 +913,13 @@ void LimboAIEditor::_resave_modified(String _str) {
|
||||||
disk_changed_files.clear();
|
disk_changed_files.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LimboAIEditor::_rename_task(String _str) {
|
||||||
|
ERR_FAIL_COND(!task_tree->get_selected().is_valid());
|
||||||
|
task_tree->get_selected()->set_custom_name(rename_edit->get_text());
|
||||||
|
rename_dialog->hide();
|
||||||
|
editor->edit_resource(task_tree->get_selected());
|
||||||
|
}
|
||||||
|
|
||||||
void LimboAIEditor::apply_changes() {
|
void LimboAIEditor::apply_changes() {
|
||||||
for (int i = 0; i < history.size(); i++) {
|
for (int i = 0; i < history.size(); i++) {
|
||||||
Ref<BehaviorTree> bt = history.get(i);
|
Ref<BehaviorTree> bt = history.get(i);
|
||||||
|
@ -966,6 +992,7 @@ void LimboAIEditor::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("_on_history_back"), &LimboAIEditor::_on_history_back);
|
ClassDB::bind_method(D_METHOD("_on_history_back"), &LimboAIEditor::_on_history_back);
|
||||||
ClassDB::bind_method(D_METHOD("_on_history_forward"), &LimboAIEditor::_on_history_forward);
|
ClassDB::bind_method(D_METHOD("_on_history_forward"), &LimboAIEditor::_on_history_forward);
|
||||||
ClassDB::bind_method(D_METHOD("_on_task_dragged", "p_task", "p_to_task", "p_type"), &LimboAIEditor::_on_task_dragged);
|
ClassDB::bind_method(D_METHOD("_on_task_dragged", "p_task", "p_to_task", "p_type"), &LimboAIEditor::_on_task_dragged);
|
||||||
|
ClassDB::bind_method(D_METHOD("_on_tree_task_double_clicked"), &LimboAIEditor::_on_tree_task_double_clicked);
|
||||||
ClassDB::bind_method(D_METHOD("_new_bt"), &LimboAIEditor::_new_bt);
|
ClassDB::bind_method(D_METHOD("_new_bt"), &LimboAIEditor::_new_bt);
|
||||||
ClassDB::bind_method(D_METHOD("_save_bt", "p_path"), &LimboAIEditor::_save_bt);
|
ClassDB::bind_method(D_METHOD("_save_bt", "p_path"), &LimboAIEditor::_save_bt);
|
||||||
ClassDB::bind_method(D_METHOD("_load_bt", "p_path"), &LimboAIEditor::_load_bt);
|
ClassDB::bind_method(D_METHOD("_load_bt", "p_path"), &LimboAIEditor::_load_bt);
|
||||||
|
@ -973,6 +1000,7 @@ void LimboAIEditor::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("_on_resources_reload"), &LimboAIEditor::_on_resources_reload);
|
ClassDB::bind_method(D_METHOD("_on_resources_reload"), &LimboAIEditor::_on_resources_reload);
|
||||||
ClassDB::bind_method(D_METHOD("_reload_modified"), &LimboAIEditor::_reload_modified);
|
ClassDB::bind_method(D_METHOD("_reload_modified"), &LimboAIEditor::_reload_modified);
|
||||||
ClassDB::bind_method(D_METHOD("_resave_modified"), &LimboAIEditor::_resave_modified);
|
ClassDB::bind_method(D_METHOD("_resave_modified"), &LimboAIEditor::_resave_modified);
|
||||||
|
ClassDB::bind_method(D_METHOD("_rename_task"), &LimboAIEditor::_rename_task, String());
|
||||||
}
|
}
|
||||||
|
|
||||||
LimboAIEditor::LimboAIEditor(EditorNode *p_editor) {
|
LimboAIEditor::LimboAIEditor(EditorNode *p_editor) {
|
||||||
|
@ -1105,6 +1133,7 @@ LimboAIEditor::LimboAIEditor(EditorNode *p_editor) {
|
||||||
task_tree->connect("task_selected", this, "_on_tree_task_selected");
|
task_tree->connect("task_selected", this, "_on_tree_task_selected");
|
||||||
task_tree->connect("visibility_changed", this, "_on_visibility_changed");
|
task_tree->connect("visibility_changed", this, "_on_visibility_changed");
|
||||||
task_tree->connect("task_dragged", this, "_on_task_dragged");
|
task_tree->connect("task_dragged", this, "_on_task_dragged");
|
||||||
|
task_tree->connect("task_double_clicked", this, "_on_tree_task_double_clicked");
|
||||||
task_tree->hide();
|
task_tree->hide();
|
||||||
|
|
||||||
usage_hint = memnew(Panel);
|
usage_hint = memnew(Panel);
|
||||||
|
@ -1130,6 +1159,24 @@ LimboAIEditor::LimboAIEditor(EditorNode *p_editor) {
|
||||||
menu->connect("id_pressed", this, "_on_action_selected");
|
menu->connect("id_pressed", this, "_on_action_selected");
|
||||||
menu->set_hide_on_window_lose_focus(true);
|
menu->set_hide_on_window_lose_focus(true);
|
||||||
|
|
||||||
|
rename_dialog = memnew(ConfirmationDialog);
|
||||||
|
{
|
||||||
|
rename_dialog->set_title("Rename Task");
|
||||||
|
|
||||||
|
VBoxContainer *vbc = memnew(VBoxContainer);
|
||||||
|
rename_dialog->add_child(vbc);
|
||||||
|
|
||||||
|
rename_edit = memnew(LineEdit);
|
||||||
|
vbc->add_child(rename_edit);
|
||||||
|
rename_edit->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||||
|
rename_edit->set_custom_minimum_size(Size2(350.0, 0.0));
|
||||||
|
rename_edit->connect("text_entered", this, "_rename_task");
|
||||||
|
|
||||||
|
rename_dialog->get_ok()->set_text(TTR("Rename"));
|
||||||
|
rename_dialog->connect("confirmed", this, "_rename_task");
|
||||||
|
}
|
||||||
|
add_child(rename_dialog);
|
||||||
|
|
||||||
disk_changed = memnew(ConfirmationDialog);
|
disk_changed = memnew(ConfirmationDialog);
|
||||||
{
|
{
|
||||||
VBoxContainer *vbc = memnew(VBoxContainer);
|
VBoxContainer *vbc = memnew(VBoxContainer);
|
||||||
|
@ -1150,7 +1197,6 @@ LimboAIEditor::LimboAIEditor(EditorNode *p_editor) {
|
||||||
disk_changed->connect("custom_action", this, "_resave_modified");
|
disk_changed->connect("custom_action", this, "_resave_modified");
|
||||||
}
|
}
|
||||||
editor->get_gui_base()->add_child(disk_changed);
|
editor->get_gui_base()->add_child(disk_changed);
|
||||||
// disk_changed->hide();
|
|
||||||
|
|
||||||
GLOBAL_DEF("limbo_ai/behavior_tree/behavior_tree_default_dir", "res://ai/trees");
|
GLOBAL_DEF("limbo_ai/behavior_tree/behavior_tree_default_dir", "res://ai/trees");
|
||||||
ProjectSettings::get_singleton()->set_custom_property_info("limbo_ai/behavior_tree/behavior_tree_default_dir",
|
ProjectSettings::get_singleton()->set_custom_property_info("limbo_ai/behavior_tree/behavior_tree_default_dir",
|
||||||
|
|
|
@ -33,6 +33,7 @@ private:
|
||||||
TreeItem *_find_item(const Ref<BTTask> &p_task) const;
|
TreeItem *_find_item(const Ref<BTTask> &p_task) const;
|
||||||
|
|
||||||
void _on_item_selected();
|
void _on_item_selected();
|
||||||
|
void _on_item_double_clicked();
|
||||||
void _on_item_rmb_selected(const Vector2 &p_pos);
|
void _on_item_rmb_selected(const Vector2 &p_pos);
|
||||||
void _on_task_changed();
|
void _on_task_changed();
|
||||||
|
|
||||||
|
@ -137,6 +138,9 @@ private:
|
||||||
Button *history_forward;
|
Button *history_forward;
|
||||||
TaskPanel *task_panel;
|
TaskPanel *task_panel;
|
||||||
|
|
||||||
|
ConfirmationDialog *rename_dialog;
|
||||||
|
LineEdit *rename_edit;
|
||||||
|
|
||||||
ConfirmationDialog *disk_changed;
|
ConfirmationDialog *disk_changed;
|
||||||
Tree *disk_changed_list;
|
Tree *disk_changed_list;
|
||||||
Set<String> disk_changed_files;
|
Set<String> disk_changed_files;
|
||||||
|
@ -153,9 +157,12 @@ private:
|
||||||
void _reload_modified();
|
void _reload_modified();
|
||||||
void _resave_modified(String _str = "");
|
void _resave_modified(String _str = "");
|
||||||
|
|
||||||
|
void _rename_task(String _str = "");
|
||||||
|
|
||||||
void _on_tree_rmb(const Vector2 &p_menu_pos);
|
void _on_tree_rmb(const Vector2 &p_menu_pos);
|
||||||
void _on_action_selected(int p_id);
|
void _on_action_selected(int p_id);
|
||||||
void _on_tree_task_selected(const Ref<BTTask> &p_task) const;
|
void _on_tree_task_selected(const Ref<BTTask> &p_task) const;
|
||||||
|
void _on_tree_task_double_clicked();
|
||||||
void _on_visibility_changed() const;
|
void _on_visibility_changed() const;
|
||||||
void _on_header_pressed() const;
|
void _on_header_pressed() const;
|
||||||
void _on_save_pressed();
|
void _on_save_pressed();
|
||||||
|
|
Loading…
Reference in New Issue