summaryrefslogtreecommitdiff
path: root/editor/script_create_dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/script_create_dialog.cpp')
-rw-r--r--editor/script_create_dialog.cpp80
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);