mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	Re-add attach button and context menu from 1880238c3e
				
					
				
			This commit is contained in:
		
							parent
							
								
									1307ff7eb1
								
							
						
					
					
						commit
						d90809151f
					
				
					 4 changed files with 100 additions and 87 deletions
				
			
		|  | @ -94,6 +94,19 @@ void ScriptCreateDialog::_class_name_changed(const String &p_name) { | |||
| 
 | ||||
| void ScriptCreateDialog::ok_pressed() { | ||||
| 
 | ||||
| 	if (create_new){ | ||||
| 		_create_new(); | ||||
| 	} else { | ||||
| 		_load_exist(); | ||||
| 	} | ||||
| 
 | ||||
| 	create_new = true; | ||||
| 	_update_controls(); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void ScriptCreateDialog::_create_new() { | ||||
| 
 | ||||
| 	if (class_name->is_editable() && !_validate(class_name->get_text())) { | ||||
| 
 | ||||
| 		alert->set_text(TTR("Class name is invalid!")); | ||||
|  | @ -103,7 +116,6 @@ void ScriptCreateDialog::ok_pressed() { | |||
| 	if (!_validate(parent_name->get_text())) { | ||||
| 		alert->set_text(TTR("Parent class name is invalid!")); | ||||
| 		alert->popup_centered_minsize(); | ||||
| 
 | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
|  | @ -136,14 +148,27 @@ void ScriptCreateDialog::ok_pressed() { | |||
| 			alert->popup_centered_minsize(); | ||||
| 			return; | ||||
| 		} | ||||
| 		scr->set_path(lpath); | ||||
| 		//EditorFileSystem::get_singleton()->update_file(lpath,scr->get_type());
 | ||||
| 	} | ||||
| 
 | ||||
| 	hide(); | ||||
| 	emit_signal("script_created", scr); | ||||
| } | ||||
| 
 | ||||
| void ScriptCreateDialog::_load_exist() { | ||||
| 
 | ||||
| 	String path = file_path->get_text(); | ||||
| 	RES p_script = ResourceLoader::load(path, "Script"); | ||||
| 	if (p_script.is_null()) { | ||||
| 		alert->get_ok()->set_text(TTR("Ugh")); | ||||
| 		alert->set_text(vformat(TTR("Error loading script from %s"), path)); | ||||
| 		alert->popup_centered_minsize(); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	hide(); | ||||
| 	emit_signal("script_created", p_script.get_ref_ptr()); | ||||
| } | ||||
| 
 | ||||
| void ScriptCreateDialog::_lang_changed(int l) { | ||||
| 
 | ||||
| 	l = language_menu->get_selected(); | ||||
|  | @ -152,10 +177,35 @@ void ScriptCreateDialog::_lang_changed(int l) { | |||
| 	} else { | ||||
| 		class_name->set_editable(false); | ||||
| 	} | ||||
| 	if (file_path->get_text().basename() == initial_bp) { | ||||
| 		file_path->set_text(initial_bp + "." + ScriptServer::get_language(l)->get_extension()); | ||||
| 		_path_changed(file_path->get_text()); | ||||
| 
 | ||||
| 	String selected_ext = "."+ScriptServer::get_language(l)->get_extension(); | ||||
| 	String path = file_path->get_text(); | ||||
| 	String extension = ""; | ||||
| 	if (path.find(".") >= 0) { | ||||
| 		extension = path.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.basename()+selected_ext; | ||||
| 				_path_changed(path); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	file_path->set_text(path); | ||||
| 	_class_name_changed(class_name->get_text()); | ||||
| } | ||||
| 
 | ||||
|  | @ -175,8 +225,10 @@ void ScriptCreateDialog::_browse_path() { | |||
| 	file_browse->clear_filters(); | ||||
| 	List<String> extensions; | ||||
| 
 | ||||
| 	int l = language_menu->get_selected(); | ||||
| 	ScriptServer::get_language(l)->get_recognized_extensions(&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()) { | ||||
| 		file_browse->add_filter("*." + E->get()); | ||||
|  | @ -228,43 +280,54 @@ void ScriptCreateDialog::_path_changed(const String &p_path) { | |||
| 
 | ||||
| 	FileAccess *f = FileAccess::create(FileAccess::ACCESS_RESOURCES); | ||||
| 
 | ||||
| 	if (f->file_exists(p)) { | ||||
| 
 | ||||
| 		path_error_label->set_text(TTR("File exists")); | ||||
| 		path_error_label->add_color_override("font_color", Color(1, 0.4, 0.0, 0.8)); | ||||
| 		memdelete(f); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	create_new = !f->file_exists(p); | ||||
| 	memdelete(f); | ||||
| 
 | ||||
| 	String extension = p.extension(); | ||||
| 	List<String> extensions; | ||||
| 
 | ||||
| 	int l = language_menu->get_selected(); | ||||
| 	ScriptServer::get_language(l)->get_recognized_extensions(&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; | ||||
| 	int index = 0; | ||||
| 	for (List<String>::Element *E = extensions.front(); E; E = E->next()) { | ||||
| 		if (E->get().nocasecmp_to(extension) == 0) { | ||||
| 			language_menu->select(index); // change Language option by extension
 | ||||
| 			found = true; | ||||
| 			break; | ||||
| 		} | ||||
| 		index++; | ||||
| 	} | ||||
| 
 | ||||
| 	if (!found) { | ||||
| 
 | ||||
| 		path_error_label->set_text(TTR("Invalid extension")); | ||||
| 		path_error_label->add_color_override("font_color", Color(1, 0.4, 0.0, 0.8)); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	path_error_label->set_text(TTR("Valid path")); | ||||
| 	_update_controls(); | ||||
| 
 | ||||
| 	path_error_label->add_color_override("font_color", Color(0, 1.0, 0.8, 0.8)); | ||||
| 
 | ||||
| 	path_valid = true; | ||||
| } | ||||
| 
 | ||||
| void ScriptCreateDialog::_update_controls() { | ||||
| 
 | ||||
| 	if (create_new) { | ||||
| 		path_error_label->set_text(TTR("Create new script")); | ||||
| 		get_ok()->set_text(TTR("Create")); | ||||
| 	} else { | ||||
| 		path_error_label->set_text(TTR("Load existing script")); | ||||
| 		get_ok()->set_text(TTR("Load")); | ||||
| 	} | ||||
| 	parent_name->set_editable(create_new); | ||||
| 	internal->set_disabled(!create_new); | ||||
| } | ||||
| 
 | ||||
| void ScriptCreateDialog::_bind_methods() { | ||||
| 
 | ||||
| 	ObjectTypeDB::bind_method("_class_name_changed", &ScriptCreateDialog::_class_name_changed); | ||||
|  | @ -339,7 +402,7 @@ ScriptCreateDialog::ScriptCreateDialog() { | |||
| 
 | ||||
| 	set_size(Size2(200, 150)); | ||||
| 	set_hide_on_ok(false); | ||||
| 	set_title(TTR("Create Node Script")); | ||||
| 	set_title(TTR("Attach Node Script")); | ||||
| 
 | ||||
| 	file_browse = memnew(EditorFileDialog); | ||||
| 	file_browse->connect("file_selected", this, "_file_selected"); | ||||
|  | @ -348,4 +411,6 @@ ScriptCreateDialog::ScriptCreateDialog() { | |||
| 	alert = memnew(AcceptDialog); | ||||
| 	add_child(alert); | ||||
| 	_lang_changed(0); | ||||
| 
 | ||||
| 	create_new = true; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 William Tumeo
						William Tumeo