summaryrefslogtreecommitdiff
path: root/editor/plugin_config_dialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/plugin_config_dialog.cpp')
-rw-r--r--editor/plugin_config_dialog.cpp43
1 files changed, 32 insertions, 11 deletions
diff --git a/editor/plugin_config_dialog.cpp b/editor/plugin_config_dialog.cpp
index 8e626e7111..12bf544357 100644
--- a/editor/plugin_config_dialog.cpp
+++ b/editor/plugin_config_dialog.cpp
@@ -5,8 +5,8 @@
/* GODOT ENGINE */
/* https://godotengine.org */
/*************************************************************************/
-/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */
-/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */
+/* Copyright (c) 2007-2019 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2019 Godot Engine contributors (cf. AUTHORS.md) */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
@@ -65,11 +65,16 @@ void PluginConfigDialog::_on_confirmed() {
cf->save(path.plus_file("plugin.cfg"));
if (!_edit_mode) {
- String type = script_option_edit->get_item_text(script_option_edit->get_selected());
+ int lang_idx = script_option_edit->get_selected();
+ String lang_name = ScriptServer::get_language(lang_idx)->get_name();
Ref<Script> script;
- if (type == GDScriptLanguage::get_singleton()->get_name()) {
+ // TODO Use script templates. Right now, this code won't add the 'tool' annotation to other languages.
+ // TODO Better support script languages with named classes (has_named_classes).
+
+ if (lang_name == GDScriptLanguage::get_singleton()->get_name()) {
+ // Hard-coded GDScript template to keep usability until we use script templates.
Ref<GDScript> gdscript = memnew(GDScript);
gdscript->set_source_code(
"tool\n"
@@ -84,8 +89,13 @@ void PluginConfigDialog::_on_confirmed() {
gdscript->set_path(script_path);
ResourceSaver::save(script_path, gdscript);
script = gdscript;
+ } else {
+ String script_path = path.plus_file(script_edit->get_text());
+ String class_name = script_path.get_file().get_basename();
+ script = ScriptServer::get_language(lang_idx)->get_template(class_name, "EditorPlugin");
+ script->set_path(script_path);
+ ResourceSaver::save(script_path, script);
}
- //TODO: other languages
emit_signal("plugin_ready", script.operator->(), active_edit->is_pressed() ? subfolder_edit->get_text() : "");
} else {
@@ -98,8 +108,9 @@ void PluginConfigDialog::_on_cancelled() {
_clear_fields();
}
-void PluginConfigDialog::_on_required_text_changed(const String &p_text) {
- String ext = script_option_edit->get_item_metadata(script_option_edit->get_selected());
+void PluginConfigDialog::_on_required_text_changed(const String &) {
+ int lang_idx = script_option_edit->get_selected();
+ String ext = ScriptServer::get_language(lang_idx)->get_extension();
get_ok()->set_disabled(script_edit->get_text().get_basename().empty() || script_edit->get_text().get_extension() != ext || name_edit->get_text().empty());
}
@@ -109,6 +120,10 @@ void PluginConfigDialog::_notification(int p_what) {
connect("confirmed", this, "_on_confirmed");
get_cancel()->connect("pressed", this, "_on_cancelled");
} break;
+
+ case NOTIFICATION_POST_POPUP: {
+ name_edit->grab_focus();
+ } break;
}
}
@@ -204,10 +219,15 @@ PluginConfigDialog::PluginConfigDialog() {
grid->add_child(script_option_lb);
script_option_edit = memnew(OptionButton);
- script_option_edit->add_item(GDScriptLanguage::get_singleton()->get_name());
- script_option_edit->set_item_metadata(0, GDScriptLanguage::get_singleton()->get_extension());
- script_option_edit->select(0);
- //TODO: add other languages
+ int default_lang = 0;
+ for (int i = 0; i < ScriptServer::get_language_count(); i++) {
+ ScriptLanguage *lang = ScriptServer::get_language(i);
+ script_option_edit->add_item(lang->get_name());
+ if (lang == GDScriptLanguage::get_singleton()) {
+ default_lang = i;
+ }
+ }
+ script_option_edit->select(default_lang);
grid->add_child(script_option_edit);
Label *script_lb = memnew(Label);
@@ -219,6 +239,7 @@ PluginConfigDialog::PluginConfigDialog() {
script_edit->set_placeholder("\"plugin.gd\" -> res://addons/my_plugin/plugin.gd");
grid->add_child(script_edit);
+ // TODO Make this option work better with languages like C#. Right now, it does not work because the C# project must be compiled first.
Label *active_lb = memnew(Label);
active_lb->set_text(TTR("Activate now?"));
grid->add_child(active_lb);