diff options
Diffstat (limited to 'editor/create_dialog.cpp')
-rw-r--r-- | editor/create_dialog.cpp | 141 |
1 files changed, 67 insertions, 74 deletions
diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index 6210b580ba..75fff03297 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -41,7 +41,6 @@ #include "scene/gui/box_container.h" void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode, const String &p_select_type) { - type_list.clear(); ClassDB::get_class_list(&type_list); ScriptServer::get_global_class_list(&type_list); @@ -52,7 +51,6 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode, const St FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("create_recent." + base_type), FileAccess::READ); if (f) { - TreeItem *root = recent->create_item(); while (!f->eof_reached()) { @@ -75,7 +73,6 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode, const St favorite_list.clear(); if (f) { - while (!f->eof_reached()) { String l = f->get_line().strip_edges(); @@ -120,49 +117,50 @@ void CreateDialog::popup_create(bool p_dont_clear, bool p_replace_mode, const St } void CreateDialog::_text_changed(const String &p_newtext) { - _update_search(); } void CreateDialog::_sbox_input(const Ref<InputEvent> &p_ie) { - Ref<InputEventKey> k = p_ie; if (k.is_valid() && (k->get_keycode() == KEY_UP || k->get_keycode() == KEY_DOWN || k->get_keycode() == KEY_PAGEUP || k->get_keycode() == KEY_PAGEDOWN)) { - search_options->call("_gui_input", k); search_box->accept_event(); } } void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p_types, TreeItem *p_root, TreeItem **to_select) { - - if (p_types.has(p_type)) + if (p_types.has(p_type)) { return; + } bool cpp_type = ClassDB::class_exists(p_type); EditorData &ed = EditorNode::get_editor_data(); - if (p_type == base_type) + if (p_type == base_type) { return; + } if (cpp_type) { - if (!ClassDB::is_parent_class(p_type, base_type)) + if (!ClassDB::is_parent_class(p_type, base_type)) { return; + } } else { if (!search_loaded_scripts.has(p_type)) { search_loaded_scripts[p_type] = ed.script_class_load_script(p_type); } - if (!ScriptServer::is_global_class(p_type) || !ed.script_class_is_parent(p_type, base_type)) + if (!ScriptServer::is_global_class(p_type) || !ed.script_class_is_parent(p_type, base_type)) { return; + } String script_path = ScriptServer::get_global_class_path(p_type); if (script_path.find("res://addons/", 0) != -1) { - if (!EditorNode::get_singleton()->is_addon_plugin_enabled(script_path.get_slicec('/', 3))) + if (!EditorNode::get_singleton()->is_addon_plugin_enabled(script_path.get_slicec('/', 3))) { return; + } } } @@ -171,16 +169,15 @@ void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p TreeItem *parent = p_root; if (inherits.length()) { - if (!p_types.has(inherits)) { - add_type(inherits, p_types, p_root, to_select); } - if (p_types.has(inherits)) + if (p_types.has(inherits)) { parent = p_types[inherits]; - else if (ScriptServer::is_global_class(inherits)) + } else if (ScriptServer::is_global_class(inherits)) { return; + } } bool can_instance = (cpp_type && ClassDB::can_instance(p_type)) || ScriptServer::is_global_class(p_type); @@ -267,7 +264,6 @@ bool CreateDialog::_is_type_prefered(const String &type) { } bool CreateDialog::_is_class_disabled_by_feature_profile(const StringName &p_class) { - Ref<EditorFeatureProfile> profile = EditorFeatureProfileManager::get_singleton()->get_current_profile(); if (profile.is_null()) { return false; @@ -277,7 +273,6 @@ bool CreateDialog::_is_class_disabled_by_feature_profile(const StringName &p_cla } void CreateDialog::select_type(const String &p_type) { - TreeItem *to_select; if (search_options_types.has(p_type)) { to_select = search_options_types[p_type]; @@ -314,10 +309,9 @@ void CreateDialog::_update_search() { root->set_icon(0, search_options->get_theme_icon(base_type, "EditorIcons")); } - TreeItem *to_select = search_box->get_text() == base_type ? root : NULL; + TreeItem *to_select = search_box->get_text() == base_type ? root : nullptr; for (List<StringName>::Element *I = type_list.front(); I; I = I->next()) { - String type = I->get(); if (_is_class_disabled_by_feature_profile(type)) { @@ -325,27 +319,30 @@ void CreateDialog::_update_search() { } bool cpp_type = ClassDB::class_exists(type); - if (base_type == "Node" && type.begins_with("Editor")) + if (base_type == "Node" && type.begins_with("Editor")) { continue; // do not show editor nodes + } - if (cpp_type && !ClassDB::can_instance(type)) + if (cpp_type && !ClassDB::can_instance(type)) { continue; // can't create what can't be instanced + } if (cpp_type) { bool skip = false; for (Set<StringName>::Element *E = type_blacklist.front(); E && !skip; E = E->next()) { - if (ClassDB::is_parent_class(type, E->get())) + if (ClassDB::is_parent_class(type, E->get())) { skip = true; + } } - if (skip) + if (skip) { continue; + } } if (search_box->get_text() == "") { add_type(type, search_options_types, root, &to_select); } else { - bool found = false; String type2 = type; @@ -355,7 +352,6 @@ void CreateDialog::_update_search() { while (type2 != "" && (cpp_type ? ClassDB::is_parent_class(type2, base_type) : ed.script_class_is_parent(type2, base_type)) && type2 != base_type) { if (search_box->get_text().is_subsequence_ofi(type2)) { - found = true; break; } @@ -377,20 +373,22 @@ void CreateDialog::_update_search() { const Vector<EditorData::CustomType> &ct = EditorNode::get_editor_data().get_custom_types()[type]; for (int i = 0; i < ct.size(); i++) { - bool show = search_box->get_text().is_subsequence_ofi(ct[i].name); - if (!show) + if (!show) { continue; + } - if (!search_options_types.has(type)) + if (!search_options_types.has(type)) { add_type(type, search_options_types, root, &to_select); + } TreeItem *ti; - if (search_options_types.has(type)) + if (search_options_types.has(type)) { ti = search_options_types[type]; - else + } else { ti = search_options->get_root(); + } TreeItem *item = search_options->create_item(ti); item->set_metadata(0, type); @@ -417,26 +415,26 @@ void CreateDialog::_update_search() { favorite->set_pressed(favorite_list.find(to_select->get_text(0)) != -1); } - get_ok()->set_disabled(root->get_children() == NULL); + get_ok()->set_disabled(root->get_children() == nullptr); } void CreateDialog::_confirmed() { - TreeItem *ti = search_options->get_selected(); - if (!ti) + if (!ti) { return; + } FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("create_recent." + base_type), FileAccess::WRITE); if (f) { f->store_line(get_selected_type()); TreeItem *t = recent->get_root(); - if (t) + if (t) { t = t->get_children(); + } int count = 0; while (t) { if (t->get_text(0) != get_selected_type()) { - f->store_line(t->get_text(0)); } @@ -456,7 +454,6 @@ void CreateDialog::_confirmed() { } void CreateDialog::_notification(int p_what) { - switch (p_what) { case NOTIFICATION_ENTER_TREE: { connect("confirmed", callable_mp(this, &CreateDialog::_confirmed)); @@ -480,18 +477,17 @@ void CreateDialog::_notification(int p_what) { } void CreateDialog::set_base_type(const String &p_base) { - base_type = p_base; - if (is_replace_mode) + if (is_replace_mode) { set_title(vformat(TTR("Change %s Type"), p_base)); - else + } else { set_title(vformat(TTR("Create New %s"), p_base)); + } _update_search(); } String CreateDialog::get_base_type() const { - return base_type; } @@ -500,36 +496,36 @@ void CreateDialog::set_preferred_search_result_type(const String &p_preferred_ty } String CreateDialog::get_preferred_search_result_type() { - return preferred_search_result_type; } -String CreateDialog::get_selected_type() { +String CreateDialog::get_selected_type() { TreeItem *selected = search_options->get_selected(); - if (selected) + if (selected) { return selected->get_text(0); - else + } else { return String(); + } } Object *CreateDialog::instance_selected() { - TreeItem *selected = search_options->get_selected(); if (selected) { - Variant md = selected->get_metadata(0); String custom; - if (md.get_type() != Variant::NIL) + if (md.get_type() != Variant::NIL) { custom = md; + } if (custom != String()) { if (ScriptServer::is_global_class(custom)) { Object *obj = EditorNode::get_editor_data().script_class_instance(custom); Node *n = Object::cast_to<Node>(obj); - if (n) + if (n) { n->set_name(custom); + } return obj; } return EditorNode::get_editor_data().instance_custom_type(selected->get_text(0), custom); @@ -538,22 +534,23 @@ Object *CreateDialog::instance_selected() { } } - return NULL; + return nullptr; } void CreateDialog::_item_selected() { - TreeItem *item = search_options->get_selected(); - if (!item) + if (!item) { return; + } String name = item->get_text(0); favorite->set_disabled(false); favorite->set_pressed(favorite_list.find(name) != -1); - if (!EditorHelp::get_doc_data()->class_list.has(name)) + if (!EditorHelp::get_doc_data()->class_list.has(name)) { return; + } help_bit->set_text(DTR(EditorHelp::get_doc_data()->class_list[name].brief_description)); @@ -565,10 +562,10 @@ void CreateDialog::_hide_requested() { } void CreateDialog::_favorite_toggled() { - TreeItem *item = search_options->get_selected(); - if (!item) + if (!item) { return; + } String name = item->get_text(0); @@ -584,16 +581,15 @@ void CreateDialog::_favorite_toggled() { } void CreateDialog::_save_favorite_list() { - FileAccess *f = FileAccess::open(EditorSettings::get_singleton()->get_project_settings_dir().plus_file("favorites." + base_type), FileAccess::WRITE); if (f) { - for (int i = 0; i < favorite_list.size(); i++) { String l = favorite_list[i]; String name = l.split(" ")[0]; - if (!(ClassDB::class_exists(name) || ScriptServer::is_global_class(name))) + if (!(ClassDB::class_exists(name) || ScriptServer::is_global_class(name))) { continue; + } f->store_line(l); } memdelete(f); @@ -601,14 +597,14 @@ void CreateDialog::_save_favorite_list() { } void CreateDialog::_update_favorite_list() { - favorites->clear(); TreeItem *root = favorites->create_item(); for (int i = 0; i < favorite_list.size(); i++) { String l = favorite_list[i]; String name = l.split(" ")[0]; - if (!((ClassDB::class_exists(name) || ScriptServer::is_global_class(name)) && !_is_class_disabled_by_feature_profile(name))) + if (!((ClassDB::class_exists(name) || ScriptServer::is_global_class(name)) && !_is_class_disabled_by_feature_profile(name))) { continue; + } TreeItem *ti = favorites->create_item(root); ti->set_text(0, l); ti->set_icon(0, EditorNode::get_singleton()->get_class_icon(l, base_type)); @@ -617,10 +613,10 @@ void CreateDialog::_update_favorite_list() { } void CreateDialog::_history_selected() { - TreeItem *item = recent->get_selected(); - if (!item) + if (!item) { return; + } search_box->set_text(item->get_text(0).get_slicec(' ', 0)); favorites->deselect_all(); @@ -628,10 +624,10 @@ void CreateDialog::_history_selected() { } void CreateDialog::_favorite_selected() { - TreeItem *item = favorites->get_selected(); - if (!item) + if (!item) { return; + } search_box->set_text(item->get_text(0).get_slicec(' ', 0)); recent->deselect_all(); @@ -639,19 +635,16 @@ void CreateDialog::_favorite_selected() { } void CreateDialog::_history_activated() { - _history_selected(); _confirmed(); } void CreateDialog::_favorite_activated() { - _favorite_selected(); _confirmed(); } Variant CreateDialog::get_drag_data_fw(const Point2 &p_point, Control *p_from) { - TreeItem *ti = favorites->get_item_at_position(p_point); if (ti) { Dictionary d; @@ -670,7 +663,6 @@ Variant CreateDialog::get_drag_data_fw(const Point2 &p_point, Control *p_from) { } bool CreateDialog::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const { - Dictionary d = p_data; if (d.has("type") && String(d["type"]) == "create_favorite_drag") { favorites->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN); @@ -679,26 +671,29 @@ bool CreateDialog::can_drop_data_fw(const Point2 &p_point, const Variant &p_data return false; } -void CreateDialog::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { +void CreateDialog::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { Dictionary d = p_data; TreeItem *ti = favorites->get_item_at_position(p_point); - if (!ti) + if (!ti) { return; + } String drop_at = ti->get_text(0); int ds = favorites->get_drop_section_at_position(p_point); int drop_idx = favorite_list.find(drop_at); - if (drop_idx < 0) + if (drop_idx < 0) { return; + } String type = d["class"]; int from_idx = favorite_list.find(type); - if (from_idx < 0) + if (from_idx < 0) { return; + } if (drop_idx == from_idx) { ds = -1; //cause it will be gone @@ -727,7 +722,6 @@ void CreateDialog::_save_and_update_favorite_list() { } void CreateDialog::_bind_methods() { - ClassDB::bind_method(D_METHOD("_save_and_update_favorite_list"), &CreateDialog::_save_and_update_favorite_list); ClassDB::bind_method("get_drag_data_fw", &CreateDialog::get_drag_data_fw); @@ -739,7 +733,6 @@ void CreateDialog::_bind_methods() { } CreateDialog::CreateDialog() { - is_replace_mode = false; HSplitContainer *hsc = memnew(HSplitContainer); |