Merge pull request #11706 from toger5/create_node_preferred_logic
added smart searching with preferrence to root node
This commit is contained in:
commit
359704bccf
3 changed files with 34 additions and 7 deletions
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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: {
|
||||
|
|
Loading…
Reference in a new issue