From a0cd983927dff634b6f00c7842b662d116878817 Mon Sep 17 00:00:00 2001 From: Serhii Snitsaruk Date: Wed, 29 May 2024 10:53:54 +0200 Subject: [PATCH] Editor: Fix "jump to owner" from subtree and refactor --- editor/limbo_ai_editor_plugin.cpp | 6 +++--- editor/limbo_ai_editor_plugin.h | 2 +- editor/owner_picker.cpp | 18 +++++++++--------- editor/owner_picker.h | 5 +++-- util/limbo_compat.h | 4 ++-- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/editor/limbo_ai_editor_plugin.cpp b/editor/limbo_ai_editor_plugin.cpp index 4ce9ead..c2a1ee4 100644 --- a/editor/limbo_ai_editor_plugin.cpp +++ b/editor/limbo_ai_editor_plugin.cpp @@ -1014,7 +1014,7 @@ void LimboAIEditor::_tab_input(const Ref &p_input) { void LimboAIEditor::_show_tab_context_menu() { tab_menu->clear(); tab_menu->add_item(TTR("Show in FileSystem"), TabMenu::TAB_SHOW_IN_FILESYSTEM); - tab_menu->add_item(TTR("Open Owner Scene"), TabMenu::TAB_OPEN_OWNER); + tab_menu->add_item(TTR("Jump to Owner"), TabMenu::TAB_JUMP_TO_OWNER); tab_menu->add_separator(); tab_menu->add_item(TTR("Close Tab"), TabMenu::TAB_CLOSE); tab_menu->add_item(TTR("Close Other Tabs"), TabMenu::TAB_CLOSE_OTHER); @@ -1035,12 +1035,12 @@ void LimboAIEditor::_tab_menu_option_selected(int p_id) { FS_DOCK_SELECT_FILE(path.get_slice("::", 0)); } } break; - case TAB_OPEN_OWNER: { + case TAB_JUMP_TO_OWNER: { Ref bt = history[idx_history]; ERR_FAIL_NULL(bt); String bt_path = bt->get_path(); if (!bt_path.is_empty()) { - owner_picker->show(bt_path); + owner_picker->pick_and_open_owner_of_resource(bt_path); } } break; case TAB_CLOSE: { diff --git a/editor/limbo_ai_editor_plugin.h b/editor/limbo_ai_editor_plugin.h index e372552..d45a62a 100644 --- a/editor/limbo_ai_editor_plugin.h +++ b/editor/limbo_ai_editor_plugin.h @@ -102,7 +102,7 @@ private: enum TabMenu { TAB_SHOW_IN_FILESYSTEM, - TAB_OPEN_OWNER, + TAB_JUMP_TO_OWNER, TAB_CLOSE, TAB_CLOSE_OTHER, TAB_CLOSE_RIGHT, diff --git a/editor/owner_picker.cpp b/editor/owner_picker.cpp index 04f8d8a..fc63632 100644 --- a/editor/owner_picker.cpp +++ b/editor/owner_picker.cpp @@ -25,7 +25,7 @@ #include #endif -Vector OwnerPicker::find_owners(const String &p_path) const { +Vector OwnerPicker::_find_owners(const String &p_path) const { Vector owners; List dirs; @@ -67,14 +67,14 @@ Vector OwnerPicker::find_owners(const String &p_path) const { return owners; } -void OwnerPicker::show(const String &p_path) { +void OwnerPicker::pick_and_open_owner_of_resource(const String &p_path) { if (p_path.is_empty()) { return; } owners_item_list->clear(); - Vector owners = find_owners(p_path); + Vector owners = _find_owners(p_path); for (int i = 0; i < owners.size(); i++) { owners_item_list->add_item(owners[i]); } @@ -85,12 +85,12 @@ void OwnerPicker::show(const String &p_path) { } if (owners_item_list->get_item_count() == 1) { - // Open scene immediately if there is only one owner scene. + // Open owner immediately if there is only one owner. _selection_confirmed(); } else if (owners_item_list->get_item_count() == 0) { owners_item_list->hide(); set_title(TTR("Alert!")); - set_text(TTR("This behavior tree is not used by any scene.")); + set_text(TTR("Couldn't find owner. Looks like it's not used by any other resource.")); reset_size(); popup_centered(); } else { @@ -111,10 +111,10 @@ void OwnerPicker::_item_activated(int p_item) { void OwnerPicker::_selection_confirmed() { for (int idx : owners_item_list->get_selected_items()) { String owner_path = owners_item_list->get_item_text(idx); - if (RESOURCE_EXISTS(owner_path, "PackedScene")) { + if (RESOURCE_IS_SCENE_FILE(owner_path)) { EditorInterface::get_singleton()->open_scene_from_path(owner_path); } else { - RESOURCE_LOAD(owner_path, ""); + EditorInterface::get_singleton()->edit_resource(RESOURCE_LOAD(owner_path, "")); } } } @@ -133,9 +133,9 @@ void OwnerPicker::_bind_methods() { OwnerPicker::OwnerPicker() { owners_item_list = memnew(ItemList); - // Note: In my tests, editor couldn't process open request for multiple scenes at once. + // Note: In my tests, editor couldn't process open request for multiple packed scenes at once. owners_item_list->set_select_mode(ItemList::SELECT_SINGLE); add_child(owners_item_list); } -#endif // TOOLS_ENABLED \ No newline at end of file +#endif // TOOLS_ENABLED diff --git a/editor/owner_picker.h b/editor/owner_picker.h index 3841d62..9fcb9d8 100644 --- a/editor/owner_picker.h +++ b/editor/owner_picker.h @@ -36,9 +36,10 @@ protected: void _notification(int p_what); + Vector _find_owners(const String &p_path) const; + public: - Vector find_owners(const String &p_path) const; - void show(const String &p_path); + void pick_and_open_owner_of_resource(const String &p_path); OwnerPicker(); }; diff --git a/util/limbo_compat.h b/util/limbo_compat.h index 228cb3e..433e6f2 100644 --- a/util/limbo_compat.h +++ b/util/limbo_compat.h @@ -42,8 +42,8 @@ #define RESOURCE_LOAD_NO_CACHE(m_path, m_hint) ResourceLoader::load(m_path, m_hint, ResourceFormatLoader::CACHE_MODE_IGNORE) #define RESOURCE_SAVE(m_res, m_path, m_flags) ResourceSaver::save(m_res, m_path, m_flags) #define RESOURCE_IS_CACHED(m_path) (ResourceCache::has(m_path)) -#define RESOURCE_GET_TYPE(m_path) (ResourceLoader::get_resource_type(m_path)) #define RESOURCE_EXISTS(m_path, m_type_hint) (ResourceLoader::exists(m_path, m_type_hint)) +#define RESOURCE_IS_SCENE_FILE(m_path) (ResourceLoader::get_resource_type(m_path) == "PackedScene") #define GET_PROJECT_SETTINGS_DIR() EditorPaths::get_singleton()->get_project_settings_dir() #define EDIT_RESOURCE(m_res) EditorNode::get_singleton()->edit_resource(m_res) #define INSPECTOR_GET_EDITED_OBJECT() (InspectorDock::get_inspector_singleton()->get_edited_object()) @@ -127,7 +127,7 @@ using namespace godot; #define RESOURCE_LOAD_NO_CACHE(m_path, m_hint) ResourceLoader::get_singleton()->load(m_path, m_hint, ResourceLoader::CACHE_MODE_IGNORE) #define RESOURCE_SAVE(m_res, m_path, m_flags) ResourceSaver::get_singleton()->save(m_res, m_path, m_flags) #define RESOURCE_IS_CACHED(m_path) (ResourceLoader::get_singleton()->has_cached(res_path)) -#define RESOURCE_GET_TYPE(m_path) (ResourceLoader::get_resource_type(m_path)) +#define RESOURCE_IS_SCENE_FILE(m_path) (ResourceLoader::get_singleton()->get_recognized_extensions_for_type("PackedScene").has(m_path.get_extension())) #define RESOURCE_EXISTS(m_path, m_type_hint) (ResourceLoader::get_singleton()->exists(m_path, m_type_hint)) #define GET_PROJECT_SETTINGS_DIR() EditorInterface::get_singleton()->get_editor_paths()->get_project_settings_dir() #define EDIT_RESOURCE(m_res) EditorInterface::get_singleton()->edit_resource(m_res)