diff options
author | Andreas Haas <Hinsbart@users.noreply.github.com> | 2017-10-02 22:49:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-02 22:49:28 +0200 |
commit | 359704bccf6b68c17f4c405685a01b5ed975bea1 (patch) | |
tree | d41ab6acb09d75abec7cbf6cbe8e7b67f7917d4f | |
parent | 2fbffb7cde4c29f56dcfeeb04a7ec2be23e3ab96 (diff) | |
parent | 3f423342f4d28b8cd4a8ef1b783ffc76425ce1e0 (diff) |
Merge pull request #11706 from toger5/create_node_preferred_logic
added smart searching with preferrence to root node
-rw-r--r-- | editor/create_dialog.cpp | 24 | ||||
-rw-r--r-- | editor/create_dialog.h | 5 | ||||
-rw-r--r-- | editor/scene_tree_dock.cpp | 12 |
3 files changed, 34 insertions, 7 deletions
diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 0305013776..ca68d84abd 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -168,8 +168,11 @@ void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p item->set_custom_color(0, get_color("disabled_font_color", "Editor")); item->set_selectable(0, false); } else { + bool is_search_subsequence = search_box->get_text().is_subsequence_ofi(p_type); + String to_select_type = *to_select ? (*to_select)->get_text(0) : ""; + bool current_item_is_preffered = ClassDB::is_parent_class(p_type, preferred_search_result_type) && !ClassDB::is_parent_class(to_select_type, preferred_search_result_type); - if ((!*to_select && (search_box->get_text().is_subsequence_ofi(p_type))) || search_box->get_text() == p_type) { + if (((!*to_select || current_item_is_preffered) && is_search_subsequence) || search_box->get_text() == p_type) { *to_select = item; } } @@ -361,6 +364,19 @@ void CreateDialog::set_base_type(const String &p_base) { _update_search(); } +String CreateDialog::get_base_type() const { + + return base_type; +} + +void CreateDialog::set_preferred_search_result_type(const String &p_preferred_type) { + preferred_search_result_type = p_preferred_type; +} + +String CreateDialog::get_preferred_search_result_type() { + + return preferred_search_result_type; +} String CreateDialog::get_selected_type() { TreeItem *selected = search_options->get_selected(); @@ -411,11 +427,6 @@ Object *CreateDialog::instance_selected() { return NULL; } -String CreateDialog::get_base_type() const { - - return base_type; -} - void CreateDialog::_item_selected() { TreeItem *item = search_options->get_selected(); @@ -654,6 +665,7 @@ CreateDialog::CreateDialog() { search_options->connect("cell_selected", this, "_item_selected"); //search_options->set_hide_root(true); base_type = "Object"; + preferred_search_result_type = ""; help_bit = memnew(EditorHelpBit); vbc->add_margin_child(TTR("Description:"), help_bit); diff --git a/editor/create_dialog.h b/editor/create_dialog.h index a523539ba0..2e4ce9b277 100644 --- a/editor/create_dialog.h +++ b/editor/create_dialog.h @@ -53,7 +53,7 @@ class CreateDialog : public ConfirmationDialog { LineEdit *search_box; Tree *search_options; String base_type; - + String preferred_search_result_type; EditorHelpBit *help_bit; void _item_selected(); @@ -93,6 +93,9 @@ public: void set_base_type(const String &p_base); String get_base_type() const; + void set_preferred_search_result_type(const String &p_preferred_type); + String get_preferred_search_result_type(); + void popup_create(bool p_dontclear); CreateDialog(); diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 2fcba7e3c0..f3e59932c4 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -270,6 +270,18 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { switch (p_tool) { case TOOL_NEW: { + + String preferred = ""; + Node *current_edited_scene_root = EditorNode::get_singleton()->get_edited_scene(); + + if (current_edited_scene_root) { + + if (ClassDB::is_parent_class(current_edited_scene_root->get_class_name(), "Node2D")) + preferred = "Node2D"; + else if (ClassDB::is_parent_class(current_edited_scene_root->get_class_name(), "Spatial")) + preferred = "Spatial"; + } + create_dialog->set_preferred_search_result_type(preferred); create_dialog->popup_create(true); } break; case TOOL_INSTANCE: { |