Warn when creating a script with the same name as the parent class

This commit is contained in:
Aaron Franke 2020-09-29 01:31:41 -04:00
parent f96392a2b5
commit 5a9037f828
No known key found for this signature in database
GPG key ID: 40A1750B977E56BF
2 changed files with 23 additions and 7 deletions

View file

@ -238,6 +238,14 @@ String ScriptCreateDialog::_validate_path(const String &p_path, bool p_file_must
return ""; return "";
} }
String ScriptCreateDialog::_get_class_name() const {
if (has_named_classes) {
return class_name->get_text();
} else {
return ProjectSettings::get_singleton()->localize_path(file_path->get_text()).get_file().get_basename();
}
}
void ScriptCreateDialog::_class_name_changed(const String &p_name) { void ScriptCreateDialog::_class_name_changed(const String &p_name) {
if (_validate_class(class_name->get_text())) { if (_validate_class(class_name->get_text())) {
is_class_name_valid = true; is_class_name_valid = true;
@ -287,13 +295,7 @@ void ScriptCreateDialog::ok_pressed() {
} }
void ScriptCreateDialog::_create_new() { void ScriptCreateDialog::_create_new() {
String cname_param; String cname_param = _get_class_name();
if (has_named_classes) {
cname_param = class_name->get_text();
} else {
cname_param = ProjectSettings::get_singleton()->localize_path(file_path->get_text()).get_file().get_basename();
}
Ref<Script> scr; Ref<Script> scr;
if (script_template != "") { if (script_template != "") {
@ -687,6 +689,10 @@ void ScriptCreateDialog::_update_dialog() {
builtin_warning_label->set_visible(is_built_in); builtin_warning_label->set_visible(is_built_in);
// Check if the script name is the same as the parent class.
// This warning isn't relevant if the script is built-in.
script_name_warning_label->set_visible(!is_built_in && _get_class_name() == parent_name->get_text());
if (is_built_in) { if (is_built_in) {
get_ok_button()->set_text(TTR("Create")); get_ok_button()->set_text(TTR("Create"));
parent_name->set_editable(true); parent_name->set_editable(true);
@ -768,6 +774,14 @@ ScriptCreateDialog::ScriptCreateDialog() {
builtin_warning_label->set_autowrap(true); builtin_warning_label->set_autowrap(true);
builtin_warning_label->hide(); builtin_warning_label->hide();
script_name_warning_label = memnew(Label);
script_name_warning_label->set_text(
TTR("Warning: Having the script name be the same as a built-in type is usually not desired."));
vb->add_child(script_name_warning_label);
script_name_warning_label->add_theme_color_override("font_color", Color(1, 0.85, 0.4));
script_name_warning_label->set_autowrap(true);
script_name_warning_label->hide();
status_panel = memnew(PanelContainer); status_panel = memnew(PanelContainer);
status_panel->set_h_size_flags(Control::SIZE_FILL); status_panel->set_h_size_flags(Control::SIZE_FILL);
status_panel->add_child(vb); status_panel->add_child(vb);

View file

@ -50,6 +50,7 @@ class ScriptCreateDialog : public ConfirmationDialog {
Label *error_label; Label *error_label;
Label *path_error_label; Label *path_error_label;
Label *builtin_warning_label; Label *builtin_warning_label;
Label *script_name_warning_label;
PanelContainer *status_panel; PanelContainer *status_panel;
LineEdit *parent_name; LineEdit *parent_name;
Button *parent_browse_button; Button *parent_browse_button;
@ -110,6 +111,7 @@ class ScriptCreateDialog : public ConfirmationDialog {
bool _validate_parent(const String &p_string); bool _validate_parent(const String &p_string);
bool _validate_class(const String &p_string); bool _validate_class(const String &p_string);
String _validate_path(const String &p_path, bool p_file_must_exist); String _validate_path(const String &p_path, bool p_file_must_exist);
String _get_class_name() const;
void _class_name_changed(const String &p_name); void _class_name_changed(const String &p_name);
void _parent_name_changed(const String &p_parent); void _parent_name_changed(const String &p_parent);
void _template_changed(int p_template = 0); void _template_changed(int p_template = 0);