diff options
Diffstat (limited to 'editor/script_create_dialog.cpp')
-rw-r--r-- | editor/script_create_dialog.cpp | 80 |
1 files changed, 64 insertions, 16 deletions
diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index 5ab0efaee3..292cb8ddc3 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -34,6 +34,7 @@ #include "core/os/file_access.h" #include "core/project_settings.h" #include "core/script_language.h" +#include "editor/create_dialog.h" #include "editor/editor_node.h" #include "editor/editor_scale.h" #include "editor_file_system.h" @@ -45,11 +46,28 @@ void ScriptCreateDialog::_notification(int p_what) { case NOTIFICATION_ENTER_TREE: { path_button->set_icon(get_icon("Folder", "EditorIcons")); parent_browse_button->set_icon(get_icon("Folder", "EditorIcons")); + parent_search_button->set_icon(get_icon("ClassList", "EditorIcons")); status_panel->add_style_override("panel", get_stylebox("bg", "Tree")); } break; } } +void ScriptCreateDialog::_path_hbox_sorted() { + if (is_visible()) { + int filename_start_pos = initial_bp.find_last("/") + 1; + int filename_end_pos = initial_bp.length(); + + file_path->select(filename_start_pos, filename_end_pos); + + // First set cursor to the end of line to scroll LineEdit view + // to the right and then set the actual cursor position. + file_path->set_cursor_position(file_path->get_text().length()); + file_path->set_cursor_position(filename_start_pos); + + file_path->grab_focus(); + } +} + bool ScriptCreateDialog::_can_be_built_in() { return (supports_built_in && built_in_enabled); } @@ -77,6 +95,11 @@ void ScriptCreateDialog::config(const String &p_base_name, const String &p_base_ _path_changed(file_path->get_text()); } +void ScriptCreateDialog::set_inheritance_base_type(const String &p_base) { + + base_type = p_base; +} + bool ScriptCreateDialog::_validate(const String &p_string) { if (p_string.length() == 0) @@ -322,7 +345,7 @@ void ScriptCreateDialog::_browse_path(bool browse_parent, bool p_save) { if (p_save) { file_browse->set_mode(EditorFileDialog::MODE_SAVE_FILE); - file_browse->set_title(TTR("Open Script/Choose Location")); + file_browse->set_title(TTR("Open Script / Choose Location")); file_browse->get_ok()->set_text(TTR("Open")); } else { file_browse->set_mode(EditorFileDialog::MODE_OPEN_FILE); @@ -362,6 +385,17 @@ void ScriptCreateDialog::_file_selected(const String &p_file) { } } +void ScriptCreateDialog::_create() { + + parent_name->set_text(select_class->get_selected_type()); +} + +void ScriptCreateDialog::_browse_class_in_tree() { + + select_class->set_base_type(base_type); + select_class->popup_create(true); +} + void ScriptCreateDialog::_path_changed(const String &p_path) { is_path_valid = false; @@ -369,27 +403,27 @@ void ScriptCreateDialog::_path_changed(const String &p_path) { String p = p_path.strip_edges(); if (p == "") { - _msg_path_valid(false, TTR("Path is empty")); + _msg_path_valid(false, TTR("Path is empty.")); _update_dialog(); return; } if (p.get_file().get_basename() == "") { - _msg_path_valid(false, TTR("Filename is empty")); + _msg_path_valid(false, TTR("Filename 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")); + _msg_path_valid(false, TTR("Path is not local.")); _update_dialog(); return; } DirAccess *d = DirAccess::create(DirAccess::ACCESS_RESOURCES); if (d->change_dir(p.get_base_dir()) != OK) { - _msg_path_valid(false, TTR("Invalid base path")); + _msg_path_valid(false, TTR("Invalid base path.")); memdelete(d); _update_dialog(); return; @@ -402,11 +436,11 @@ void ScriptCreateDialog::_path_changed(const String &p_path) { 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")); + _msg_path_valid(false, TTR("A directory with 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")); + _msg_path_valid(true, TTR("File exists, it will be reused.")); } memdelete(f); _update_dialog(); @@ -438,13 +472,13 @@ void ScriptCreateDialog::_path_changed(const String &p_path) { } if (!found) { - _msg_path_valid(false, TTR("Invalid extension")); + _msg_path_valid(false, TTR("Invalid extension.")); _update_dialog(); return; } if (!match) { - _msg_path_valid(false, TTR("Wrong extension chosen")); + _msg_path_valid(false, TTR("Wrong extension chosen.")); _update_dialog(); return; } @@ -496,20 +530,20 @@ void ScriptCreateDialog::_update_dialog() { get_ok()->set_disabled(true); if (!is_built_in) { if (!is_path_valid) { - _msg_script_valid(false, TTR("Invalid Path")); + _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")); + _msg_script_valid(false, TTR("Invalid class name.")); script_ok = false; } if (!is_parent_name_valid) { - _msg_script_valid(false, TTR("Invalid inherited parent name or path")); + _msg_script_valid(false, TTR("Invalid inherited parent name or path.")); script_ok = false; } if (script_ok) { - _msg_script_valid(true, TTR("Script valid")); + _msg_script_valid(true, TTR("Script is valid.")); get_ok()->set_disabled(false); } @@ -562,7 +596,7 @@ void ScriptCreateDialog::_update_dialog() { parent_name->set_editable(true); parent_browse_button->set_disabled(false); internal->set_disabled(!_can_be_built_in()); - _msg_path_valid(true, TTR("Built-in script (into scene file)")); + _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")); @@ -570,7 +604,7 @@ void ScriptCreateDialog::_update_dialog() { parent_browse_button->set_disabled(false); internal->set_disabled(!_can_be_built_in()); if (is_path_valid) { - _msg_path_valid(true, TTR("Create new script file")); + _msg_path_valid(true, TTR("Will create a new script file.")); } } else { // Script Loaded @@ -579,13 +613,14 @@ void ScriptCreateDialog::_update_dialog() { parent_browse_button->set_disabled(true); internal->set_disabled(!_can_be_built_in()); if (is_path_valid) { - _msg_path_valid(true, TTR("Load existing script file")); + _msg_path_valid(true, TTR("Will load an existing script file.")); } } } void ScriptCreateDialog::_bind_methods() { + ClassDB::bind_method("_path_hbox_sorted", &ScriptCreateDialog::_path_hbox_sorted); ClassDB::bind_method("_class_name_changed", &ScriptCreateDialog::_class_name_changed); ClassDB::bind_method("_parent_name_changed", &ScriptCreateDialog::_parent_name_changed); ClassDB::bind_method("_lang_changed", &ScriptCreateDialog::_lang_changed); @@ -595,6 +630,8 @@ void ScriptCreateDialog::_bind_methods() { ClassDB::bind_method("_path_changed", &ScriptCreateDialog::_path_changed); ClassDB::bind_method("_path_entered", &ScriptCreateDialog::_path_entered); ClassDB::bind_method("_template_changed", &ScriptCreateDialog::_template_changed); + ClassDB::bind_method("_create", &ScriptCreateDialog::_create); + ClassDB::bind_method("_browse_class_in_tree", &ScriptCreateDialog::_browse_class_in_tree); ClassDB::bind_method(D_METHOD("config", "inherits", "path", "built_in_enabled"), &ScriptCreateDialog::config, DEFVAL(true)); @@ -707,12 +744,18 @@ ScriptCreateDialog::ScriptCreateDialog() { /* Inherits */ + base_type = "Object"; + hb = memnew(HBoxContainer); hb->set_h_size_flags(SIZE_EXPAND_FILL); parent_name = memnew(LineEdit); parent_name->connect("text_changed", this, "_parent_name_changed"); parent_name->set_h_size_flags(SIZE_EXPAND_FILL); hb->add_child(parent_name); + parent_search_button = memnew(Button); + parent_search_button->set_flat(true); + parent_search_button->connect("pressed", this, "_browse_class_in_tree"); + hb->add_child(parent_search_button); parent_browse_button = memnew(Button); parent_browse_button->set_flat(true); parent_browse_button->connect("pressed", this, "_browse_path", varray(true, false)); @@ -760,6 +803,7 @@ ScriptCreateDialog::ScriptCreateDialog() { /* Path */ hb = memnew(HBoxContainer); + hb->connect("sort_children", this, "_path_hbox_sorted"); file_path = memnew(LineEdit); file_path->connect("text_changed", this, "_path_changed"); file_path->connect("text_entered", this, "_path_entered"); @@ -777,6 +821,10 @@ ScriptCreateDialog::ScriptCreateDialog() { /* Dialog Setup */ + select_class = memnew(CreateDialog); + select_class->connect("create", this, "_create"); + add_child(select_class); + file_browse = memnew(EditorFileDialog); file_browse->connect("file_selected", this, "_file_selected"); file_browse->set_mode(EditorFileDialog::MODE_OPEN_FILE); |