void ScriptCreateDialog::_class_name_changed(const String &p_name) { if (_validate(class_name->get_text())) { is_class_name_valid = true; } else { is_class_name_valid = false; } _update_dialog(); }
void ScriptCreateDialog::_built_in_pressed() { if (internal->is_pressed()) { is_built_in = true; } else { is_built_in = false; } _update_dialog(); }
void ScriptCreateDialog::ok_pressed() { if (is_new_script_created) { _create_new(); } else { _load_exist(); } is_new_script_created = true; _update_dialog(); }
void ScriptCreateDialog::_built_in_pressed() { if (internal->is_pressed()) { is_built_in = true; is_new_script_created = true; } else { is_built_in = false; _path_changed(file_path->get_text()); } _update_dialog(); }
void ScriptCreateDialog::_path_changed(const String &p_path) { is_path_valid = false; is_new_script_created = true; String p = p_path; if (p == "") { _msg_path_valid(false, TTR("Path is empty")); _update_dialog(); return; } p = ProjectSettings::get_singleton()->localize_path(p); if (!p.begins_with("res://")) { _msg_path_valid(false, TTR("Path is not local")); _update_dialog(); return; } if (p.find("/") || p.find("\\")) { DirAccess *d = DirAccess::create(DirAccess::ACCESS_RESOURCES); if (d->change_dir(p.get_base_dir()) != OK) { _msg_path_valid(false, TTR("Invalid base path")); memdelete(d); _update_dialog(); return; } memdelete(d); } /* Does file already exist */ DirAccess *f = DirAccess::create(DirAccess::ACCESS_RESOURCES); if (f->dir_exists(p)) { is_new_script_created = false; is_path_valid = false; _msg_path_valid(false, TTR("Directory of the same name exists")); } else if (f->file_exists(p)) { is_new_script_created = false; is_path_valid = true; _msg_path_valid(true, TTR("File exists, will be reused")); } else { path_error_label->set_text(""); } memdelete(f); _update_dialog(); /* Check file extension */ String extension = p.get_extension(); List<String> extensions; // get all possible extensions for script for (int l = 0; l < language_menu->get_item_count(); l++) { ScriptServer::get_language(l)->get_recognized_extensions(&extensions); } bool found = false; bool match = false; int index = 0; for (List<String>::Element *E = extensions.front(); E; E = E->next()) { if (E->get().nocasecmp_to(extension) == 0) { //FIXME (?) - changing language this way doesn't update controls, needs rework //language_menu->select(index); // change Language option by extension found = true; if (E->get() == ScriptServer::get_language(language_menu->get_selected())->get_extension()) { match = true; } break; } index++; } if (!found) { _msg_path_valid(false, TTR("Invalid extension")); _update_dialog(); return; } if (!match) { _msg_path_valid(false, TTR("Wrong extension chosen")); _update_dialog(); return; } /* All checks passed */ is_path_valid = true; _update_dialog(); }
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; 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(); String extension = ""; if (path != "") { if (path.find(".") >= 0) { extension = path.get_extension(); } if (extension.length() == 0) { // add extension if none path += selected_ext; _path_changed(path); } else { // change extension by selected language List<String> extensions; // get all possible extensions for script for (int l = 0; l < language_menu->get_item_count(); l++) { ScriptServer::get_language(l)->get_recognized_extensions(&extensions); } for (List<String>::Element *E = extensions.front(); E; E = E->next()) { if (E->get().nocasecmp_to(extension) == 0) { path = path.get_basename() + selected_ext; _path_changed(path); break; } } } } else { path = "class" + selected_ext; _path_changed(path); } file_path->set_text(path); bool use_templates = language->is_using_templates(); template_menu->set_disabled(!use_templates); template_menu->clear(); if (use_templates) { template_list = EditorSettings::get_singleton()->get_script_templates(language->get_extension()); String last_lang = EditorSettings::get_singleton()->get_project_metadata("script_setup", "last_selected_language", ""); String last_template = EditorSettings::get_singleton()->get_project_metadata("script_setup", "last_selected_template", ""); template_menu->add_item(TTR("Default")); for (int i = 0; i < template_list.size(); i++) { String s = template_list[i].capitalize(); template_menu->add_item(s); if (language_menu->get_item_text(language_menu->get_selected()) == last_lang && last_template == s) { template_menu->select(i + 1); } } } else { template_menu->add_item(TTR("N/A")); script_template = ""; } _template_changed(template_menu->get_selected()); EditorSettings::get_singleton()->set_project_metadata("script_setup", "last_selected_language", language_menu->get_item_text(language_menu->get_selected())); _update_dialog(); }