diff options
Diffstat (limited to 'editor/script_create_dialog.cpp')
-rw-r--r-- | editor/script_create_dialog.cpp | 130 |
1 files changed, 48 insertions, 82 deletions
diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index 0f851c526d..ffa221edaf 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -100,17 +100,25 @@ void ScriptCreateDialog::set_inheritance_base_type(const String &p_base) { base_type = p_base; } -bool ScriptCreateDialog::_validate(const String &p_string) { +bool ScriptCreateDialog::_validate_parent(const String &p_string) { if (p_string.length() == 0) return false; - if (ScriptServer::get_language(language_menu->get_selected())->can_inherit_from_file() && p_string.is_quoted()) { + if (can_inherit_from_file && p_string.is_quoted()) { String p = p_string.substr(1, p_string.length() - 2); if (_validate_path(p, true) == "") return true; } + return ClassDB::class_exists(p_string) || ScriptServer::is_global_class(p_string); +} + +bool ScriptCreateDialog::_validate_class(const String &p_string) { + + if (p_string.length() == 0) + return false; + for (int i = 0; i < p_string.length(); i++) { if (i == 0) { @@ -118,7 +126,7 @@ bool ScriptCreateDialog::_validate(const String &p_string) { return false; // no start with number plz } - bool valid_char = (p_string[i] >= '0' && p_string[i] <= '9') || (p_string[i] >= 'a' && p_string[i] <= 'z') || (p_string[i] >= 'A' && p_string[i] <= 'Z') || p_string[i] == '_' || p_string[i] == '-'; + bool valid_char = (p_string[i] >= '0' && p_string[i] <= '9') || (p_string[i] >= 'a' && p_string[i] <= 'z') || (p_string[i] >= 'A' && p_string[i] <= 'Z') || p_string[i] == '_'; if (!valid_char) return false; @@ -193,7 +201,7 @@ String ScriptCreateDialog::_validate_path(const String &p_path, bool p_file_must void ScriptCreateDialog::_class_name_changed(const String &p_name) { - if (_validate(class_name->get_text())) { + if (_validate_class(class_name->get_text())) { is_class_name_valid = true; } else { is_class_name_valid = false; @@ -203,7 +211,7 @@ void ScriptCreateDialog::_class_name_changed(const String &p_name) { void ScriptCreateDialog::_parent_name_changed(const String &p_parent) { - if (_validate(parent_name->get_text())) { + if (_validate_parent(parent_name->get_text())) { is_parent_name_valid = true; } else { is_parent_name_valid = false; @@ -298,27 +306,13 @@ void ScriptCreateDialog::_load_exist() { void ScriptCreateDialog::_lang_changed(int l) { - l = language_menu->get_selected(); ScriptLanguage *language = ScriptServer::get_language(l); - if (language->has_named_classes()) { - has_named_classes = true; - } else { - has_named_classes = false; - } - - if (language->supports_builtin_mode()) { - supports_built_in = true; - } else { - supports_built_in = false; + has_named_classes = language->has_named_classes(); + can_inherit_from_file = language->can_inherit_from_file(); + supports_built_in = language->supports_builtin_mode(); + if (!supports_built_in) is_built_in = false; - } - - if (ScriptServer::get_language(l)->can_inherit_from_file()) { - can_inherit_from_file = true; - } else { - can_inherit_from_file = false; - } String selected_ext = "." + language->get_extension(); String path = file_path->get_text(); @@ -430,7 +424,7 @@ void ScriptCreateDialog::_file_selected(const String &p_file) { String p = ProjectSettings::get_singleton()->localize_path(p_file); if (is_browsing_parent) { parent_name->set_text("\"" + p + "\""); - _class_name_changed("\"" + p + "\""); + _parent_name_changed(parent_name->get_text()); } else { file_path->set_text(p); _path_changed(p); @@ -445,7 +439,8 @@ void ScriptCreateDialog::_file_selected(const String &p_file) { void ScriptCreateDialog::_create() { - parent_name->set_text(select_class->get_selected_type()); + parent_name->set_text(select_class->get_selected_type().split(" ")[0]); + _parent_name_changed(parent_name->get_text()); } void ScriptCreateDialog::_browse_class_in_tree() { @@ -511,17 +506,15 @@ void ScriptCreateDialog::_update_dialog() { // Is Script Valid (order from top to bottom) get_ok()->set_disabled(true); - if (!is_built_in) { - if (!is_path_valid) { - _msg_script_valid(false, TTR("Invalid path.")); - script_ok = false; - } + if (!is_built_in && !is_path_valid) { + _msg_script_valid(false, TTR("Invalid path.")); + script_ok = false; } if (has_named_classes && (is_new_script_created && !is_class_name_valid)) { _msg_script_valid(false, TTR("Invalid class name.")); script_ok = false; } - if (!is_parent_name_valid) { + if (!is_parent_name_valid && is_new_script_created) { _msg_script_valid(false, TTR("Invalid inherited parent name or path.")); script_ok = false; } @@ -544,14 +537,7 @@ void ScriptCreateDialog::_update_dialog() { class_name->set_editable(false); class_name->set_placeholder(TTR("N/A")); class_name->set_placeholder_alpha(1); - } - - /* Can script inherit from a file */ - - if (can_inherit_from_file) { - parent_browse_button->set_disabled(false); - } else { - parent_browse_button->set_disabled(true); + class_name->set_text(""); } /* Is script Built-in */ @@ -569,23 +555,24 @@ void ScriptCreateDialog::_update_dialog() { } } - if (!_can_be_built_in()) - internal->set_pressed(false); - /* Is Script created or loaded from existing file */ if (is_built_in) { get_ok()->set_text(TTR("Create")); parent_name->set_editable(true); - parent_browse_button->set_disabled(false); - internal->set_disabled(!_can_be_built_in()); + parent_search_button->set_disabled(false); + parent_browse_button->set_disabled(!can_inherit_from_file); + internal->set_visible(_can_be_built_in()); + internal_label->set_visible(_can_be_built_in()); _msg_path_valid(true, TTR("Built-in script (into scene file).")); } else if (is_new_script_created) { // New Script Created get_ok()->set_text(TTR("Create")); parent_name->set_editable(true); - parent_browse_button->set_disabled(false); - internal->set_disabled(!_can_be_built_in()); + parent_search_button->set_disabled(false); + parent_browse_button->set_disabled(!can_inherit_from_file); + internal->set_visible(_can_be_built_in()); + internal_label->set_visible(_can_be_built_in()); if (is_path_valid) { _msg_path_valid(true, TTR("Will create a new script file.")); } @@ -593,6 +580,7 @@ void ScriptCreateDialog::_update_dialog() { // Script Loaded get_ok()->set_text(TTR("Load")); parent_name->set_editable(false); + parent_search_button->set_disabled(true); parent_browse_button->set_disabled(true); internal->set_disabled(!_can_be_built_in()); if (is_path_valid) { @@ -659,32 +647,17 @@ ScriptCreateDialog::ScriptCreateDialog() { status_panel->add_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_stylebox("bg", "Tree")); status_panel->add_child(vb); - /* Margins */ + /* Spacing */ - Control *empty_h = memnew(Control); - empty_h->set_name("empty_h"); //duplicate() doesn't like nodes without a name - empty_h->set_h_size_flags(Control::SIZE_EXPAND_FILL); - empty_h->set_v_size_flags(Control::SIZE_EXPAND_FILL); - empty_h->set_custom_minimum_size(Size2(0, 10 * EDSCALE)); - Control *empty_v = memnew(Control); - empty_v->set_name("empty_v"); - empty_v->set_h_size_flags(Control::SIZE_EXPAND_FILL); - empty_v->set_v_size_flags(Control::SIZE_EXPAND_FILL); - empty_v->set_custom_minimum_size(Size2(10, 0 * EDSCALE)); + Control *spacing = memnew(Control); + spacing->set_custom_minimum_size(Size2(0, 10 * EDSCALE)); vb = memnew(VBoxContainer); - vb->add_child(empty_h->duplicate()); vb->add_child(gc); - vb->add_child(empty_h->duplicate()); + vb->add_child(spacing); vb->add_child(status_panel); - vb->add_child(empty_h->duplicate()); hb = memnew(HBoxContainer); - hb->add_child(empty_v->duplicate()); hb->add_child(vb); - hb->add_child(empty_v->duplicate()); - - memdelete(empty_h); - memdelete(empty_v); add_child(hb); @@ -693,8 +666,7 @@ ScriptCreateDialog::ScriptCreateDialog() { language_menu = memnew(OptionButton); language_menu->set_custom_minimum_size(Size2(250, 0) * EDSCALE); language_menu->set_h_size_flags(SIZE_EXPAND_FILL); - l = memnew(Label); - l->set_text(TTR("Language")); + l = memnew(Label(TTR("Language"))); l->set_align(Label::ALIGN_RIGHT); gc->add_child(l); gc->add_child(language_menu); @@ -743,8 +715,7 @@ ScriptCreateDialog::ScriptCreateDialog() { parent_browse_button->set_flat(true); parent_browse_button->connect("pressed", this, "_browse_path", varray(true, false)); hb->add_child(parent_browse_button); - l = memnew(Label); - l->set_text(TTR("Inherits")); + l = memnew(Label(TTR("Inherits"))); l->set_align(Label::ALIGN_RIGHT); gc->add_child(l); gc->add_child(hb); @@ -755,8 +726,7 @@ ScriptCreateDialog::ScriptCreateDialog() { class_name = memnew(LineEdit); class_name->connect("text_changed", this, "_class_name_changed"); class_name->set_h_size_flags(SIZE_EXPAND_FILL); - l = memnew(Label); - l->set_text(TTR("Class Name")); + l = memnew(Label(TTR("Class Name"))); l->set_align(Label::ALIGN_RIGHT); gc->add_child(l); gc->add_child(class_name); @@ -764,8 +734,7 @@ ScriptCreateDialog::ScriptCreateDialog() { /* Templates */ template_menu = memnew(OptionButton); - l = memnew(Label); - l->set_text(TTR("Template")); + l = memnew(Label(TTR("Template"))); l->set_align(Label::ALIGN_RIGHT); gc->add_child(l); gc->add_child(template_menu); @@ -774,14 +743,12 @@ ScriptCreateDialog::ScriptCreateDialog() { /* Built-in Script */ internal = memnew(CheckButton); + internal->set_h_size_flags(0); internal->connect("pressed", this, "_built_in_pressed"); - hb = memnew(HBoxContainer); - hb->add_child(internal); - l = memnew(Label); - l->set_text(TTR("Built-in Script")); - l->set_align(Label::ALIGN_RIGHT); - gc->add_child(l); - gc->add_child(hb); + internal_label = memnew(Label(TTR("Built-in Script"))); + internal_label->set_align(Label::ALIGN_RIGHT); + gc->add_child(internal_label); + gc->add_child(internal); /* Path */ @@ -796,8 +763,7 @@ ScriptCreateDialog::ScriptCreateDialog() { path_button->set_flat(true); path_button->connect("pressed", this, "_browse_path", varray(false, true)); hb->add_child(path_button); - l = memnew(Label); - l->set_text(TTR("Path")); + l = memnew(Label(TTR("Path"))); l->set_align(Label::ALIGN_RIGHT); gc->add_child(l); gc->add_child(hb); |