summaryrefslogtreecommitdiff
path: root/editor/editor_settings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/editor_settings.cpp')
-rw-r--r--editor/editor_settings.cpp1002
1 files changed, 514 insertions, 488 deletions
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index b532bb793a..bf4ef3ae39 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -47,12 +47,11 @@
#include "scene/main/scene_tree.h"
#include "scene/main/viewport.h"
-Ref<EditorSettings> EditorSettings::singleton = NULL;
+// PRIVATE METHODS
-EditorSettings *EditorSettings::get_singleton() {
+Ref<EditorSettings> EditorSettings::singleton = NULL;
- return singleton.ptr();
-}
+// Properties
bool EditorSettings::_set(const StringName &p_name, const Variant &p_value, bool p_emit_signal) {
@@ -136,6 +135,7 @@ bool EditorSettings::_get(const StringName &p_name, Variant &r_ret) const {
void EditorSettings::_initial_set(const StringName &p_name, const Variant &p_value) {
set(p_name, p_value);
props[p_name].initial = p_value;
+ props[p_name].initial_set = true;
}
struct _EVCSort {
@@ -195,51 +195,394 @@ void EditorSettings::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::ARRAY, "shortcuts", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR)); //do not edit
}
-void EditorSettings::set_setting(const String &p_setting, const Variant &p_value) {
- _THREAD_SAFE_METHOD_
- set(p_setting, p_value);
-}
+void EditorSettings::_add_property_info_bind(const Dictionary &p_info) {
-Variant EditorSettings::get_setting(const String &p_setting) const {
- _THREAD_SAFE_METHOD_
- return get(p_setting);
-}
+ ERR_FAIL_COND(!p_info.has("name"));
+ ERR_FAIL_COND(!p_info.has("type"));
-bool EditorSettings::has_setting(String p_var) const {
+ PropertyInfo pinfo;
+ pinfo.name = p_info["name"];
+ ERR_FAIL_COND(!props.has(pinfo.name));
+ pinfo.type = Variant::Type(p_info["type"].operator int());
+ ERR_FAIL_INDEX(pinfo.type, Variant::VARIANT_MAX);
- _THREAD_SAFE_METHOD_
+ if (p_info.has("hint"))
+ pinfo.hint = PropertyHint(p_info["hint"].operator int());
+ if (p_info.has("hint_string"))
+ pinfo.hint_string = p_info["hint_string"];
- return props.has(p_var);
+ add_property_hint(pinfo);
}
-void EditorSettings::erase(String p_var) {
+// Default configs
+bool EditorSettings::has_default_value(const String &p_setting) const {
_THREAD_SAFE_METHOD_
- props.erase(p_var);
+ if (!props.has(p_setting))
+ return false;
+ return props[p_setting].initial_set;
}
-void EditorSettings::raise_order(const String &p_name) {
+void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
+
_THREAD_SAFE_METHOD_
- ERR_FAIL_COND(!props.has(p_name));
- props[p_name].order = ++last_order;
-}
+ {
+ String lang_hint = "en";
+ String host_lang = OS::get_singleton()->get_locale();
+ host_lang = TranslationServer::standardize_locale(host_lang);
-Variant _EDITOR_DEF(const String &p_var, const Variant &p_default) {
+ String best;
- if (EditorSettings::get_singleton()->has_setting(p_var))
- return EditorSettings::get_singleton()->get(p_var);
- EditorSettings::get_singleton()->set(p_var, p_default);
- EditorSettings::get_singleton()->set_initial_value(p_var, p_default);
+ for (int i = 0; i < translations.size(); i++) {
+ String locale = translations[i]->get_locale();
+ lang_hint += ",";
+ lang_hint += locale;
- return p_default;
+ if (host_lang == locale) {
+ best = locale;
+ }
+
+ if (best == String() && host_lang.begins_with(locale)) {
+ best = locale;
+ }
+ }
+
+ if (best == String()) {
+ best = "en";
+ }
+
+ _initial_set("interface/editor/editor_language", best);
+ hints["interface/editor/editor_language"] = PropertyInfo(Variant::STRING, "interface/editor/editor_language", PROPERTY_HINT_ENUM, lang_hint, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ }
+
+ _initial_set("interface/editor/hidpi_mode", 0);
+ hints["interface/editor/hidpi_mode"] = PropertyInfo(Variant::INT, "interface/editor/hidpi_mode", PROPERTY_HINT_ENUM, "Auto,VeryLoDPI,LoDPI,MidDPI,HiDPI", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/editor/show_script_in_scene_tabs", false);
+ _initial_set("interface/editor/font_size", 14);
+ hints["interface/editor/font_size"] = PropertyInfo(Variant::INT, "interface/editor/font_size", PROPERTY_HINT_RANGE, "10,40,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/editor/source_font_size", 14);
+ hints["interface/editor/source_font_size"] = PropertyInfo(Variant::INT, "interface/editor/source_font_size", PROPERTY_HINT_RANGE, "8,96,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/editor/custom_font", "");
+ hints["interface/editor/custom_font"] = PropertyInfo(Variant::STRING, "interface/editor/custom_font", PROPERTY_HINT_GLOBAL_FILE, "*.font,*.tres,*.res", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/editor/dim_editor_on_dialog_popup", true);
+ _initial_set("interface/editor/dim_amount", 0.6f);
+ hints["interface/editor/dim_amount"] = PropertyInfo(Variant::REAL, "interface/editor/dim_amount", PROPERTY_HINT_RANGE, "0,1,0.01", PROPERTY_USAGE_DEFAULT);
+ _initial_set("interface/editor/dim_transition_time", 0.08f);
+ hints["interface/editor/dim_transition_time"] = PropertyInfo(Variant::REAL, "interface/editor/dim_transition_time", PROPERTY_HINT_RANGE, "0,1,0.001", PROPERTY_USAGE_DEFAULT);
+
+ _initial_set("interface/editor/separate_distraction_mode", false);
+
+ _initial_set("interface/editor/save_each_scene_on_quit", true); // Regression
+ _initial_set("interface/editor/quit_confirmation", true);
+
+ _initial_set("interface/theme/preset", 0);
+ hints["interface/theme/preset"] = PropertyInfo(Variant::INT, "interface/theme/preset", PROPERTY_HINT_ENUM, "Default,Grey,Godot 2,Arc,Light,Alien,Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/theme/icon_and_font_color", 0);
+ hints["interface/theme/icon_and_font_color"] = PropertyInfo(Variant::INT, "interface/theme/icon_and_font_color", PROPERTY_HINT_ENUM, "Auto,Dark,Light", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/theme/base_color", Color::html("#323b4f"));
+ hints["interface/theme/accent_color"] = PropertyInfo(Variant::COLOR, "interface/theme/accent_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/theme/accent_color", Color::html("#699ce8"));
+ hints["interface/theme/base_color"] = PropertyInfo(Variant::COLOR, "interface/theme/base_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/theme/contrast", 0.25);
+ hints["interface/theme/contrast"] = PropertyInfo(Variant::REAL, "interface/theme/contrast", PROPERTY_HINT_RANGE, "0.01, 1, 0.01");
+ _initial_set("interface/theme/highlight_tabs", false);
+ _initial_set("interface/theme/border_size", 1);
+ _initial_set("interface/theme/use_graph_node_headers", false);
+ hints["interface/theme/border_size"] = PropertyInfo(Variant::INT, "interface/theme/border_size", PROPERTY_HINT_RANGE, "0,2,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/theme/additional_spacing", 0);
+ hints["interface/theme/additional_spacing"] = PropertyInfo(Variant::REAL, "interface/theme/additional_spacing", PROPERTY_HINT_RANGE, "0,5,0.1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ _initial_set("interface/theme/custom_theme", "");
+ hints["interface/theme/custom_theme"] = PropertyInfo(Variant::STRING, "interface/theme/custom_theme", PROPERTY_HINT_GLOBAL_FILE, "*.res,*.tres,*.theme", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+
+ _initial_set("interface/scene_tabs/show_extension", false);
+ _initial_set("interface/scene_tabs/show_thumbnail_on_hover", true);
+ _initial_set("interface/scene_tabs/resize_if_many_tabs", true);
+ _initial_set("interface/scene_tabs/minimum_width", 50);
+ hints["interface/scene_tabs/minimum_width"] = PropertyInfo(Variant::INT, "interface/scene_tabs/minimum_width", PROPERTY_HINT_RANGE, "50,500,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+
+ _initial_set("filesystem/directories/autoscan_project_path", "");
+ hints["filesystem/directories/autoscan_project_path"] = PropertyInfo(Variant::STRING, "filesystem/directories/autoscan_project_path", PROPERTY_HINT_GLOBAL_DIR);
+ _initial_set("filesystem/directories/default_project_path", OS::get_singleton()->has_environment("HOME") ? OS::get_singleton()->get_environment("HOME") : OS::get_singleton()->get_system_dir(OS::SYSTEM_DIR_DOCUMENTS));
+ hints["filesystem/directories/default_project_path"] = PropertyInfo(Variant::STRING, "filesystem/directories/default_project_path", PROPERTY_HINT_GLOBAL_DIR);
+ _initial_set("filesystem/directories/default_project_export_path", "");
+ hints["global/default_project_export_path"] = PropertyInfo(Variant::STRING, "global/default_project_export_path", PROPERTY_HINT_GLOBAL_DIR);
+ _initial_set("interface/editor/show_script_in_scene_tabs", false);
+
+ _initial_set("text_editor/theme/color_theme", "Adaptive");
+ hints["text_editor/theme/color_theme"] = PropertyInfo(Variant::STRING, "text_editor/theme/color_theme", PROPERTY_HINT_ENUM, "Adaptive,Default");
+
+ _initial_set("text_editor/theme/line_spacing", 4);
+
+ _load_default_text_editor_theme();
+
+ _initial_set("text_editor/highlighting/syntax_highlighting", true);
+
+ _initial_set("text_editor/highlighting/highlight_all_occurrences", true);
+ _initial_set("text_editor/highlighting/highlight_current_line", true);
+ _initial_set("text_editor/cursor/scroll_past_end_of_file", false);
+
+ _initial_set("text_editor/indent/type", 0);
+ hints["text_editor/indent/type"] = PropertyInfo(Variant::INT, "text_editor/indent/type", PROPERTY_HINT_ENUM, "Tabs,Spaces");
+ _initial_set("text_editor/indent/size", 4);
+ hints["text_editor/indent/size"] = PropertyInfo(Variant::INT, "text_editor/indent/size", PROPERTY_HINT_RANGE, "1, 64, 1"); // size of 0 crashes.
+ _initial_set("text_editor/indent/auto_indent", true);
+ _initial_set("text_editor/indent/convert_indent_on_save", false);
+ _initial_set("text_editor/indent/draw_tabs", true);
+
+ _initial_set("text_editor/line_numbers/show_line_numbers", true);
+ _initial_set("text_editor/line_numbers/line_numbers_zero_padded", false);
+ _initial_set("text_editor/line_numbers/show_breakpoint_gutter", true);
+ _initial_set("text_editor/line_numbers/show_line_length_guideline", false);
+ _initial_set("text_editor/line_numbers/line_length_guideline_column", 80);
+ hints["text_editor/line_numbers/line_length_guideline_column"] = PropertyInfo(Variant::INT, "text_editor/line_numbers/line_length_guideline_column", PROPERTY_HINT_RANGE, "20, 160, 10");
+
+ _initial_set("text_editor/open_scripts/smooth_scrolling", true);
+ _initial_set("text_editor/open_scripts/v_scroll_speed", 80);
+ _initial_set("text_editor/open_scripts/show_members_overview", true);
+
+ _initial_set("text_editor/files/trim_trailing_whitespace_on_save", false);
+ _initial_set("text_editor/completion/idle_parse_delay", 2);
+ _initial_set("text_editor/tools/create_signal_callbacks", true);
+ _initial_set("text_editor/files/autosave_interval_secs", 0);
+
+ _initial_set("text_editor/cursor/block_caret", false);
+ _initial_set("text_editor/cursor/caret_blink", false);
+ _initial_set("text_editor/cursor/caret_blink_speed", 0.65);
+ hints["text_editor/cursor/caret_blink_speed"] = PropertyInfo(Variant::REAL, "text_editor/cursor/caret_blink_speed", PROPERTY_HINT_RANGE, "0.1, 10, 0.1");
+
+ _initial_set("text_editor/theme/font", "");
+ hints["text_editor/theme/font"] = PropertyInfo(Variant::STRING, "text_editor/theme/font", PROPERTY_HINT_GLOBAL_FILE, "*.font,*.tres,*.res");
+ _initial_set("text_editor/completion/auto_brace_complete", false);
+ _initial_set("text_editor/files/restore_scripts_on_load", true);
+ _initial_set("text_editor/completion/complete_file_paths", true);
+ _initial_set("text_editor/files/maximum_recent_files", 20);
+ hints["text_editor/files/maximum_recent_files"] = PropertyInfo(Variant::INT, "text_editor/files/maximum_recent_files", PROPERTY_HINT_RANGE, "1, 200, 0");
+
+ _initial_set("docks/scene_tree/start_create_dialog_fully_expanded", false);
+ _initial_set("docks/scene_tree/draw_relationship_lines", false);
+ _initial_set("docks/scene_tree/relationship_line_color", Color::html("464646"));
+
+ _initial_set("editors/grid_map/pick_distance", 5000.0);
+
+ _initial_set("editors/3d/grid_color", Color::html("808080"));
+ hints["editors/3d/grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/grid_color", PROPERTY_HINT_COLOR_NO_ALPHA, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+
+ _initial_set("editors/3d/default_fov", 55.0);
+ _initial_set("editors/3d/default_z_near", 0.1);
+ _initial_set("editors/3d/default_z_far", 500.0);
+
+ // navigation
+ _initial_set("editors/3d/navigation/navigation_scheme", 0);
+ hints["editors/3d/navigation/navigation_scheme"] = PropertyInfo(Variant::INT, "editors/3d/navigation/navigation_scheme", PROPERTY_HINT_ENUM, "Godot,Maya,Modo");
+ _initial_set("editors/3d/navigation/zoom_style", 0);
+ hints["editors/3d/navigation/zoom_style"] = PropertyInfo(Variant::INT, "editors/3d/navigation/zoom_style", PROPERTY_HINT_ENUM, "Vertical, Horizontal");
+
+ _initial_set("editors/3d/navigation/emulate_3_button_mouse", false);
+ _initial_set("editors/3d/navigation/orbit_modifier", 0);
+ hints["editors/3d/navigation/orbit_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/orbit_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl");
+ _initial_set("editors/3d/navigation/pan_modifier", 1);
+ hints["editors/3d/navigation/pan_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/pan_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl");
+ _initial_set("editors/3d/navigation/zoom_modifier", 4);
+ hints["editors/3d/navigation/zoom_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/zoom_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl");
+
+ // _initial_set("editors/3d/navigation/emulate_numpad", false); not used at the moment
+ _initial_set("editors/3d/navigation/warped_mouse_panning", true);
+
+ // navigation feel
+ _initial_set("editors/3d/navigation_feel/orbit_sensitivity", 0.4);
+ hints["editors/3d/navigation_feel/orbit_sensitivity"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/orbit_sensitivity", PROPERTY_HINT_RANGE, "0.0, 2, 0.01");
+
+ _initial_set("editors/3d/navigation_feel/orbit_inertia", 0.05);
+ hints["editors/3d/navigation_feel/orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
+ _initial_set("editors/3d/navigation_feel/translation_inertia", 0.15);
+ hints["editors/3d/navigation_feel/translation_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
+ _initial_set("editors/3d/navigation_feel/zoom_inertia", 0.075);
+ hints["editors/3d/navigation_feel/zoom_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/zoom_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
+ _initial_set("editors/3d/navigation_feel/manipulation_orbit_inertia", 0.075);
+ hints["editors/3d/navigation_feel/manipulation_orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/manipulation_orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
+ _initial_set("editors/3d/navigation_feel/manipulation_translation_inertia", 0.075);
+ hints["editors/3d/navigation_feel/manipulation_translation_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/manipulation_translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
+
+ // freelook
+ _initial_set("editors/3d/freelook/freelook_inertia", 0.1);
+ hints["editors/3d/freelook/freelook_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
+ _initial_set("editors/3d/freelook/freelook_base_speed", 5.0);
+ hints["editors/3d/freelook/freelook_base_speed"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_base_speed", PROPERTY_HINT_RANGE, "0.0, 10, 0.01");
+ _initial_set("editors/3d/freelook/freelook_activation_modifier", 0);
+ hints["editors/3d/freelook/freelook_activation_modifier"] = PropertyInfo(Variant::INT, "editors/3d/freelook/freelook_activation_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl");
+ _initial_set("editors/3d/freelook/freelook_modifier_speed_factor", 3.0);
+ hints["editors/3d/freelook/freelook_modifier_speed_factor"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_modifier_speed_factor", PROPERTY_HINT_RANGE, "0.0, 10.0, 0.1");
+ _initial_set("editors/3d/freelook/freelook_speed_zoom_link", false);
+
+ _initial_set("editors/2d/bone_width", 5);
+ _initial_set("editors/2d/bone_color1", Color(1.0, 1.0, 1.0, 0.9));
+ _initial_set("editors/2d/bone_color2", Color(0.75, 0.75, 0.75, 0.9));
+ _initial_set("editors/2d/bone_selected_color", Color(0.9, 0.45, 0.45, 0.9));
+ _initial_set("editors/2d/bone_ik_color", Color(0.9, 0.9, 0.45, 0.9));
+ _initial_set("editors/2d/keep_margins_when_changing_anchors", false);
+ _initial_set("editors/2d/warped_mouse_panning", true);
+ _initial_set("editors/2d/scroll_to_pan", false);
+ _initial_set("editors/2d/pan_speed", 20);
+
+ _initial_set("editors/poly_editor/point_grab_radius", 8);
+ _initial_set("editors/poly_editor/show_previous_outline", true);
+
+ _initial_set("run/window_placement/rect", 1);
+ hints["run/window_placement/rect"] = PropertyInfo(Variant::INT, "run/window_placement/rect", PROPERTY_HINT_ENUM, "Top Left,Centered,Custom Position,Force Maximized,Force Fullscreen");
+ String screen_hints = TTR("Default (Same as Editor)");
+ for (int i = 0; i < OS::get_singleton()->get_screen_count(); i++) {
+ screen_hints += ",Monitor " + itos(i + 1);
+ }
+ _initial_set("run/window_placement/rect_custom_position", Vector2());
+ _initial_set("run/window_placement/screen", 0);
+ hints["run/window_placement/screen"] = PropertyInfo(Variant::INT, "run/window_placement/screen", PROPERTY_HINT_ENUM, screen_hints);
+
+ _initial_set("filesystem/on_save/compress_binary_resources", true);
+ _initial_set("filesystem/on_save/save_modified_external_resources", true);
+
+ _initial_set("text_editor/tools/create_signal_callbacks", true);
+
+ _initial_set("filesystem/file_dialog/show_hidden_files", false);
+ _initial_set("filesystem/file_dialog/display_mode", 0);
+ hints["filesystem/file_dialog/display_mode"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List");
+ _initial_set("filesystem/file_dialog/thumbnail_size", 64);
+ hints["filesystem/file_dialog/thumbnail_size"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16");
+
+ _initial_set("docks/filesystem/display_mode", 0);
+ hints["docks/filesystem/display_mode"] = PropertyInfo(Variant::INT, "docks/filesystem/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List");
+ _initial_set("docks/filesystem/thumbnail_size", 64);
+ hints["docks/filesystem/thumbnail_size"] = PropertyInfo(Variant::INT, "docks/filesystem/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16");
+ _initial_set("docks/filesystem/display_mode", 0);
+ hints["docks/filesystem/display_mode"] = PropertyInfo(Variant::INT, "docks/filesystem/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List");
+ _initial_set("docks/filesystem/always_show_folders", true);
+
+ _initial_set("editors/animation/autorename_animation_tracks", true);
+ _initial_set("editors/animation/confirm_insert_track", true);
+
+ _initial_set("docks/property_editor/texture_preview_width", 48);
+ _initial_set("docks/property_editor/auto_refresh_interval", 0.3);
+ _initial_set("text_editor/help/doc_path", "");
+ _initial_set("text_editor/help/show_help_index", true);
+
+ _initial_set("filesystem/import/ask_save_before_reimport", false);
+
+ _initial_set("filesystem/import/pvrtc_texture_tool", "");
+#ifdef WINDOWS_ENABLED
+ hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "*.exe");
+#else
+ hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "");
+#endif
+ _initial_set("filesystem/import/pvrtc_fast_conversion", false);
+
+ _initial_set("run/auto_save/save_before_running", true);
+ _initial_set("run/output/always_clear_output_on_play", true);
+ _initial_set("run/output/always_open_output_on_play", true);
+ _initial_set("run/output/always_close_output_on_stop", false);
+ _initial_set("filesystem/resources/save_compressed_resources", true);
+ _initial_set("filesystem/resources/auto_reload_modified_images", true);
+
+ _initial_set("filesystem/import/automatic_reimport_on_sources_changed", true);
+
+ if (p_extra_config.is_valid()) {
+
+ if (p_extra_config->has_section("init_projects") && p_extra_config->has_section_key("init_projects", "list")) {
+
+ Vector<String> list = p_extra_config->get_value("init_projects", "list");
+ for (int i = 0; i < list.size(); i++) {
+
+ String name = list[i].replace("/", "::");
+ set("projects/" + name, list[i]);
+ };
+ };
+
+ if (p_extra_config->has_section("presets")) {
+
+ List<String> keys;
+ p_extra_config->get_section_keys("presets", &keys);
+
+ for (List<String>::Element *E = keys.front(); E; E = E->next()) {
+
+ String key = E->get();
+ Variant val = p_extra_config->get_value("presets", key);
+ set(key, val);
+ };
+ };
+ };
}
-Variant _EDITOR_GET(const String &p_var) {
+void EditorSettings::_load_default_text_editor_theme() {
+ _initial_set("text_editor/highlighting/background_color", Color::html("3b000000"));
+ _initial_set("text_editor/highlighting/completion_background_color", Color::html("2C2A32"));
+ _initial_set("text_editor/highlighting/completion_selected_color", Color::html("434244"));
+ _initial_set("text_editor/highlighting/completion_existing_color", Color::html("21dfdfdf"));
+ _initial_set("text_editor/highlighting/completion_scroll_color", Color::html("ffffff"));
+ _initial_set("text_editor/highlighting/completion_font_color", Color::html("aaaaaa"));
+ _initial_set("text_editor/highlighting/caret_color", Color::html("aaaaaa"));
+ _initial_set("text_editor/highlighting/caret_background_color", Color::html("000000"));
+ _initial_set("text_editor/highlighting/line_number_color", Color::html("66aaaaaa"));
+ _initial_set("text_editor/highlighting/text_color", Color::html("aaaaaa"));
+ _initial_set("text_editor/highlighting/text_selected_color", Color::html("000000"));
+ _initial_set("text_editor/highlighting/keyword_color", Color::html("ffffb3"));
+ _initial_set("text_editor/highlighting/base_type_color", Color::html("a4ffd4"));
+ _initial_set("text_editor/highlighting/engine_type_color", Color::html("83d3ff"));
+ _initial_set("text_editor/highlighting/function_color", Color::html("66a2ce"));
+ _initial_set("text_editor/highlighting/member_variable_color", Color::html("e64e59"));
+ _initial_set("text_editor/highlighting/comment_color", Color::html("676767"));
+ _initial_set("text_editor/highlighting/string_color", Color::html("ef6ebe"));
+ _initial_set("text_editor/highlighting/number_color", Color::html("EB9532"));
+ _initial_set("text_editor/highlighting/symbol_color", Color::html("badfff"));
+ _initial_set("text_editor/highlighting/selection_color", Color::html("6ca9c2"));
+ _initial_set("text_editor/highlighting/brace_mismatch_color", Color(1, 0.2, 0.2));
+ _initial_set("text_editor/highlighting/current_line_color", Color(0.3, 0.5, 0.8, 0.15));
+ _initial_set("text_editor/highlighting/line_length_guideline_color", Color(0.3, 0.5, 0.8, 0.1));
+ _initial_set("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4));
+ _initial_set("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2));
+ _initial_set("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15));
+ _initial_set("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1));
+ _initial_set("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1));
+}
+
+bool EditorSettings::_save_text_editor_theme(String p_file) {
+ String theme_section = "color_theme";
+ Ref<ConfigFile> cf = memnew(ConfigFile); // hex is better?
+ cf->set_value(theme_section, "background_color", ((Color)get("text_editor/highlighting/background_color")).to_html());
+ cf->set_value(theme_section, "completion_background_color", ((Color)get("text_editor/highlighting/completion_background_color")).to_html());
+ cf->set_value(theme_section, "completion_selected_color", ((Color)get("text_editor/highlighting/completion_selected_color")).to_html());
+ cf->set_value(theme_section, "completion_existing_color", ((Color)get("text_editor/highlighting/completion_existing_color")).to_html());
+ cf->set_value(theme_section, "completion_scroll_color", ((Color)get("text_editor/highlighting/completion_scroll_color")).to_html());
+ cf->set_value(theme_section, "completion_font_color", ((Color)get("text_editor/highlighting/completion_font_color")).to_html());
+ cf->set_value(theme_section, "caret_color", ((Color)get("text_editor/highlighting/caret_color")).to_html());
+ cf->set_value(theme_section, "caret_background_color", ((Color)get("text_editor/highlighting/caret_background_color")).to_html());
+ cf->set_value(theme_section, "line_number_color", ((Color)get("text_editor/highlighting/line_number_color")).to_html());
+ cf->set_value(theme_section, "text_color", ((Color)get("text_editor/highlighting/text_color")).to_html());
+ cf->set_value(theme_section, "text_selected_color", ((Color)get("text_editor/highlighting/text_selected_color")).to_html());
+ cf->set_value(theme_section, "keyword_color", ((Color)get("text_editor/highlighting/keyword_color")).to_html());
+ cf->set_value(theme_section, "base_type_color", ((Color)get("text_editor/highlighting/base_type_color")).to_html());
+ cf->set_value(theme_section, "engine_type_color", ((Color)get("text_editor/highlighting/engine_type_color")).to_html());
+ cf->set_value(theme_section, "function_color", ((Color)get("text_editor/highlighting/function_color")).to_html());
+ cf->set_value(theme_section, "member_variable_color", ((Color)get("text_editor/highlighting/member_variable_color")).to_html());
+ cf->set_value(theme_section, "comment_color", ((Color)get("text_editor/highlighting/comment_color")).to_html());
+ cf->set_value(theme_section, "string_color", ((Color)get("text_editor/highlighting/string_color")).to_html());
+ cf->set_value(theme_section, "number_color", ((Color)get("text_editor/highlighting/number_color")).to_html());
+ cf->set_value(theme_section, "symbol_color", ((Color)get("text_editor/highlighting/symbol_color")).to_html());
+ cf->set_value(theme_section, "selection_color", ((Color)get("text_editor/highlighting/selection_color")).to_html());
+ cf->set_value(theme_section, "brace_mismatch_color", ((Color)get("text_editor/highlighting/brace_mismatch_color")).to_html());
+ cf->set_value(theme_section, "current_line_color", ((Color)get("text_editor/highlighting/current_line_color")).to_html());
+ cf->set_value(theme_section, "line_length_guideline_color", ((Color)get("text_editor/highlighting/line_length_guideline_color")).to_html());
+ cf->set_value(theme_section, "mark_color", ((Color)get("text_editor/highlighting/mark_color")).to_html());
+ cf->set_value(theme_section, "breakpoint_color", ((Color)get("text_editor/highlighting/breakpoint_color")).to_html());
+ cf->set_value(theme_section, "word_highlighted_color", ((Color)get("text_editor/highlighting/word_highlighted_color")).to_html());
+ cf->set_value(theme_section, "search_result_color", ((Color)get("text_editor/highlighting/search_result_color")).to_html());
+ cf->set_value(theme_section, "search_result_border_color", ((Color)get("text_editor/highlighting/search_result_border_color")).to_html());
+
+ Error err = cf->save(p_file);
- ERR_FAIL_COND_V(!EditorSettings::get_singleton()->has_setting(p_var), Variant())
- return EditorSettings::get_singleton()->get(p_var);
+ if (err == OK) {
+ return true;
+ }
+ return false;
}
static Dictionary _get_builtin_script_templates() {
@@ -283,6 +626,13 @@ static void _create_script_templates(const String &p_path) {
memdelete(file);
}
+// PUBLIC METHODS
+
+EditorSettings *EditorSettings::get_singleton() {
+
+ return singleton.ptr();
+}
+
void EditorSettings::create() {
if (singleton.ptr())
@@ -456,11 +806,6 @@ fail:
singleton->list_text_editor_themes();
}
-String EditorSettings::get_settings_path() const {
-
- return settings_path;
-}
-
void EditorSettings::setup_language() {
String lang = get("interface/editor/editor_language");
@@ -498,10 +843,10 @@ void EditorSettings::setup_network() {
hint += ip;
}
- set("network/debug/remote_host", lip);
+ _initial_set("network/debug/remote_host", lip);
add_property_hint(PropertyInfo(Variant::STRING, "network/debug/remote_host", PROPERTY_HINT_ENUM, hint));
- set("network/debug/remote_port", port);
+ _initial_set("network/debug/remote_port", port);
add_property_hint(PropertyInfo(Variant::INT, "network/debug/remote_port", PROPERTY_HINT_RANGE, "1,65535,1"));
}
@@ -537,365 +882,121 @@ void EditorSettings::destroy() {
singleton = Ref<EditorSettings>();
}
-void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
-
- _THREAD_SAFE_METHOD_
-
- {
- String lang_hint = "en";
- String host_lang = OS::get_singleton()->get_locale();
-
- String best;
-
- for (int i = 0; i < translations.size(); i++) {
- String locale = translations[i]->get_locale();
- lang_hint += ",";
- lang_hint += locale;
-
- if (host_lang == locale) {
- best = locale;
- }
-
- if (best == String() && host_lang.begins_with(locale)) {
- best = locale;
- }
- }
-
- if (best == String()) {
- best = "en";
- }
-
- _initial_set("interface/editor/editor_language", best);
- hints["interface/editor/editor_language"] = PropertyInfo(Variant::STRING, "interface/editor/editor_language", PROPERTY_HINT_ENUM, lang_hint, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- }
-
- _initial_set("interface/editor/hidpi_mode", 0);
- hints["interface/editor/hidpi_mode"] = PropertyInfo(Variant::INT, "interface/editor/hidpi_mode", PROPERTY_HINT_ENUM, "Auto,VeryLoDPI,LoDPI,MidDPI,HiDPI", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/editor/show_script_in_scene_tabs", false);
- _initial_set("interface/editor/font_size", 14);
- hints["interface/editor/font_size"] = PropertyInfo(Variant::INT, "interface/editor/font_size", PROPERTY_HINT_RANGE, "10,40,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/editor/source_font_size", 14);
- hints["interface/editor/source_font_size"] = PropertyInfo(Variant::INT, "interface/editor/source_font_size", PROPERTY_HINT_RANGE, "8,96,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/editor/custom_font", "");
- hints["interface/editor/custom_font"] = PropertyInfo(Variant::STRING, "interface/editor/custom_font", PROPERTY_HINT_GLOBAL_FILE, "*.font,*.tres,*.res", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/editor/dim_editor_on_dialog_popup", true);
- _initial_set("interface/editor/dim_amount", 0.6f);
- hints["interface/editor/dim_amount"] = PropertyInfo(Variant::REAL, "interface/editor/dim_amount", PROPERTY_HINT_RANGE, "0,1,0.01", PROPERTY_USAGE_DEFAULT);
- _initial_set("interface/editor/dim_transition_time", 0.08f);
- hints["interface/editor/dim_transition_time"] = PropertyInfo(Variant::REAL, "interface/editor/dim_transition_time", PROPERTY_HINT_RANGE, "0,1,0.001", PROPERTY_USAGE_DEFAULT);
-
- _initial_set("interface/editor/separate_distraction_mode", false);
-
- _initial_set("interface/editor/save_each_scene_on_quit", true); // Regression
- _initial_set("interface/editor/quit_confirmation", true);
-
- _initial_set("interface/theme/preset", 0);
- hints["interface/theme/preset"] = PropertyInfo(Variant::INT, "interface/theme/preset", PROPERTY_HINT_ENUM, "Default,Grey,Godot 2,Arc,Light,Alien,Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/theme/icon_and_font_color", 0);
- hints["interface/theme/icon_and_font_color"] = PropertyInfo(Variant::INT, "interface/theme/icon_and_font_color", PROPERTY_HINT_ENUM, "Auto,Dark,Light", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/theme/base_color", Color::html("#323b4f"));
- hints["interface/theme/accent_color"] = PropertyInfo(Variant::COLOR, "interface/theme/accent_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/theme/accent_color", Color::html("#699ce8"));
- hints["interface/theme/base_color"] = PropertyInfo(Variant::COLOR, "interface/theme/base_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/theme/contrast", 0.25);
- hints["interface/theme/contrast"] = PropertyInfo(Variant::REAL, "interface/theme/contrast", PROPERTY_HINT_RANGE, "0.01, 1, 0.01");
- _initial_set("interface/theme/highlight_tabs", false);
- _initial_set("interface/theme/border_size", 1);
- _initial_set("interface/theme/use_graph_node_headers", false);
- hints["interface/theme/border_size"] = PropertyInfo(Variant::INT, "interface/theme/border_size", PROPERTY_HINT_RANGE, "0,2,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/theme/additional_spacing", 0);
- hints["interface/theme/additional_spacing"] = PropertyInfo(Variant::REAL, "interface/theme/additional_spacing", PROPERTY_HINT_RANGE, "0,5,0.1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
- _initial_set("interface/theme/custom_theme", "");
- hints["interface/theme/custom_theme"] = PropertyInfo(Variant::STRING, "interface/theme/custom_theme", PROPERTY_HINT_GLOBAL_FILE, "*.res,*.tres,*.theme", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
-
- _initial_set("interface/scene_tabs/show_extension", false);
- _initial_set("interface/scene_tabs/show_thumbnail_on_hover", true);
- _initial_set("interface/scene_tabs/resize_if_many_tabs", true);
- _initial_set("interface/scene_tabs/minimum_width", 50);
- hints["interface/scene_tabs/minimum_width"] = PropertyInfo(Variant::INT, "interface/scene_tabs/minimum_width", PROPERTY_HINT_RANGE, "50,500,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
-
- _initial_set("filesystem/directories/autoscan_project_path", "");
- hints["filesystem/directories/autoscan_project_path"] = PropertyInfo(Variant::STRING, "filesystem/directories/autoscan_project_path", PROPERTY_HINT_GLOBAL_DIR);
- _initial_set("filesystem/directories/default_project_path", OS::get_singleton()->has_environment("HOME") ? OS::get_singleton()->get_environment("HOME") : OS::get_singleton()->get_system_dir(OS::SYSTEM_DIR_DOCUMENTS));
- hints["filesystem/directories/default_project_path"] = PropertyInfo(Variant::STRING, "filesystem/directories/default_project_path", PROPERTY_HINT_GLOBAL_DIR);
- _initial_set("filesystem/directories/default_project_export_path", "");
- hints["global/default_project_export_path"] = PropertyInfo(Variant::STRING, "global/default_project_export_path", PROPERTY_HINT_GLOBAL_DIR);
- _initial_set("interface/editor/show_script_in_scene_tabs", false);
-
- _initial_set("text_editor/theme/color_theme", "Adaptive");
- hints["text_editor/theme/color_theme"] = PropertyInfo(Variant::STRING, "text_editor/theme/color_theme", PROPERTY_HINT_ENUM, "Adaptive,Default");
-
- _initial_set("text_editor/theme/line_spacing", 4);
-
- _load_default_text_editor_theme();
-
- _initial_set("text_editor/highlighting/syntax_highlighting", true);
-
- _initial_set("text_editor/highlighting/highlight_all_occurrences", true);
- _initial_set("text_editor/cursor/scroll_past_end_of_file", false);
-
- _initial_set("text_editor/indent/type", 0);
- hints["text_editor/indent/type"] = PropertyInfo(Variant::INT, "text_editor/indent/type", PROPERTY_HINT_ENUM, "Tabs,Spaces");
- _initial_set("text_editor/indent/size", 4);
- hints["text_editor/indent/size"] = PropertyInfo(Variant::INT, "text_editor/indent/size", PROPERTY_HINT_RANGE, "1, 64, 1"); // size of 0 crashes.
- _initial_set("text_editor/indent/auto_indent", true);
- _initial_set("text_editor/indent/convert_indent_on_save", false);
- _initial_set("text_editor/indent/draw_tabs", true);
-
- _initial_set("text_editor/line_numbers/show_line_numbers", true);
- _initial_set("text_editor/line_numbers/line_numbers_zero_padded", false);
- _initial_set("text_editor/line_numbers/show_breakpoint_gutter", true);
- _initial_set("text_editor/line_numbers/show_line_length_guideline", false);
- _initial_set("text_editor/line_numbers/line_length_guideline_column", 80);
- hints["text_editor/line_numbers/line_length_guideline_column"] = PropertyInfo(Variant::INT, "text_editor/line_numbers/line_length_guideline_column", PROPERTY_HINT_RANGE, "20, 160, 10");
+void EditorSettings::set_optimize_save(bool p_optimize) {
- _initial_set("text_editor/open_scripts/smooth_scrolling", true);
- _initial_set("text_editor/open_scripts/v_scroll_speed", 80);
- _initial_set("text_editor/open_scripts/show_members_overview", true);
+ optimize_save = p_optimize;
+}
- _initial_set("text_editor/files/trim_trailing_whitespace_on_save", false);
- _initial_set("text_editor/completion/idle_parse_delay", 2);
- _initial_set("text_editor/tools/create_signal_callbacks", true);
- _initial_set("text_editor/files/autosave_interval_secs", 0);
+// Properties
- _initial_set("text_editor/cursor/block_caret", false);
- _initial_set("text_editor/cursor/caret_blink", false);
- _initial_set("text_editor/cursor/caret_blink_speed", 0.65);
- hints["text_editor/cursor/caret_blink_speed"] = PropertyInfo(Variant::REAL, "text_editor/cursor/caret_blink_speed", PROPERTY_HINT_RANGE, "0.1, 10, 0.1");
+void EditorSettings::set_setting(const String &p_setting, const Variant &p_value) {
+ _THREAD_SAFE_METHOD_
+ set(p_setting, p_value);
+}
- _initial_set("text_editor/theme/font", "");
- hints["text_editor/theme/font"] = PropertyInfo(Variant::STRING, "text_editor/theme/font", PROPERTY_HINT_GLOBAL_FILE, "*.font,*.tres,*.res");
- _initial_set("text_editor/completion/auto_brace_complete", false);
- _initial_set("text_editor/files/restore_scripts_on_load", true);
- _initial_set("text_editor/completion/complete_file_paths", true);
- _initial_set("text_editor/files/maximum_recent_files", 20);
- hints["text_editor/files/maximum_recent_files"] = PropertyInfo(Variant::INT, "text_editor/files/maximum_recent_files", PROPERTY_HINT_RANGE, "1, 200, 0");
+Variant EditorSettings::get_setting(const String &p_setting) const {
+ _THREAD_SAFE_METHOD_
+ return get(p_setting);
+}
- _initial_set("docks/scene_tree/start_create_dialog_fully_expanded", false);
- _initial_set("docks/scene_tree/draw_relationship_lines", false);
- _initial_set("docks/scene_tree/relationship_line_color", Color::html("464646"));
+bool EditorSettings::has_setting(const String &p_setting) const {
- _initial_set("editors/grid_map/pick_distance", 5000.0);
+ _THREAD_SAFE_METHOD_
- _initial_set("editors/3d/grid_color", Color::html("808080"));
- hints["editors/3d/grid_color"] = PropertyInfo(Variant::COLOR, "editors/3d/grid_color", PROPERTY_HINT_COLOR_NO_ALPHA, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED);
+ return props.has(p_setting);
+}
- _initial_set("editors/3d/default_fov", 55.0);
- _initial_set("editors/3d/default_z_near", 0.1);
- _initial_set("editors/3d/default_z_far", 500.0);
+void EditorSettings::erase(const String &p_setting) {
- // navigation
- _initial_set("editors/3d/navigation/navigation_scheme", 0);
- hints["editors/3d/navigation/navigation_scheme"] = PropertyInfo(Variant::INT, "editors/3d/navigation/navigation_scheme", PROPERTY_HINT_ENUM, "Godot,Maya,Modo");
- _initial_set("editors/3d/navigation/zoom_style", 0);
- hints["editors/3d/navigation/zoom_style"] = PropertyInfo(Variant::INT, "editors/3d/navigation/zoom_style", PROPERTY_HINT_ENUM, "Vertical, Horizontal");
+ _THREAD_SAFE_METHOD_
- _initial_set("editors/3d/navigation/emulate_3_button_mouse", false);
- _initial_set("editors/3d/navigation/orbit_modifier", 0);
- hints["editors/3d/navigation/orbit_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/orbit_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl");
- _initial_set("editors/3d/navigation/pan_modifier", 1);
- hints["editors/3d/navigation/pan_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/pan_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl");
- _initial_set("editors/3d/navigation/zoom_modifier", 4);
- hints["editors/3d/navigation/zoom_modifier"] = PropertyInfo(Variant::INT, "editors/3d/navigation/zoom_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl");
+ props.erase(p_setting);
+}
- // _initial_set("editors/3d/navigation/emulate_numpad", false); not used at the moment
- _initial_set("editors/3d/navigation/warped_mouse_panning", true);
+void EditorSettings::raise_order(const String &p_setting) {
+ _THREAD_SAFE_METHOD_
- // navigation feel
- _initial_set("editors/3d/navigation_feel/orbit_sensitivity", 0.4);
- hints["editors/3d/navigation_feel/orbit_sensitivity"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/orbit_sensitivity", PROPERTY_HINT_RANGE, "0.0, 2, 0.01");
+ ERR_FAIL_COND(!props.has(p_setting));
+ props[p_setting].order = ++last_order;
+}
- _initial_set("editors/3d/navigation_feel/orbit_inertia", 0.15);
- hints["editors/3d/navigation_feel/orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
- _initial_set("editors/3d/navigation_feel/translation_inertia", 0.15);
- hints["editors/3d/navigation_feel/translation_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
- _initial_set("editors/3d/navigation_feel/zoom_inertia", 0.075);
- hints["editors/3d/navigation_feel/zoom_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/zoom_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
- _initial_set("editors/3d/navigation_feel/manipulation_orbit_inertia", 0.075);
- hints["editors/3d/navigation_feel/manipulation_orbit_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/manipulation_orbit_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
- _initial_set("editors/3d/navigation_feel/manipulation_translation_inertia", 0.075);
- hints["editors/3d/navigation_feel/manipulation_translation_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/navigation_feel/manipulation_translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
+void EditorSettings::set_initial_value(const StringName &p_setting, const Variant &p_value) {
- // freelook
- _initial_set("editors/3d/freelook/freelook_inertia", 0.1);
- hints["editors/3d/freelook/freelook_inertia"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
- _initial_set("editors/3d/freelook/freelook_base_speed", 0.1);
- hints["editors/3d/freelook/freelook_base_speed"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_base_speed", PROPERTY_HINT_RANGE, "0.0, 10, 0.01");
- _initial_set("editors/3d/freelook/freelook_activation_modifier", 0);
- hints["editors/3d/freelook/freelook_activation_modifier"] = PropertyInfo(Variant::INT, "editors/3d/freelook/freelook_activation_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl");
- _initial_set("editors/3d/freelook/freelook_modifier_speed_factor", 3.0);
- hints["editors/3d/freelook/freelook_modifier_speed_factor"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_modifier_speed_factor", PROPERTY_HINT_RANGE, "0.0, 10.0, 0.1");
+ ERR_FAIL_COND(!props.has(p_setting));
+ props[p_setting].initial = p_value;
+ props[p_setting].initial_set = true;
+}
- _initial_set("editors/2d/bone_width", 5);
- _initial_set("editors/2d/bone_color1", Color(1.0, 1.0, 1.0, 0.9));
- _initial_set("editors/2d/bone_color2", Color(0.75, 0.75, 0.75, 0.9));
- _initial_set("editors/2d/bone_selected_color", Color(0.9, 0.45, 0.45, 0.9));
- _initial_set("editors/2d/bone_ik_color", Color(0.9, 0.9, 0.45, 0.9));
- _initial_set("editors/2d/keep_margins_when_changing_anchors", false);
- _initial_set("editors/2d/warped_mouse_panning", true);
- _initial_set("editors/2d/scroll_to_pan", false);
- _initial_set("editors/2d/pan_speed", 20);
+Variant _EDITOR_DEF(const String &p_setting, const Variant &p_default) {
- _initial_set("editors/poly_editor/point_grab_radius", 8);
- _initial_set("editors/poly_editor/show_previous_outline", true);
-
- _initial_set("run/window_placement/rect", 1);
- hints["run/window_placement/rect"] = PropertyInfo(Variant::INT, "run/window_placement/rect", PROPERTY_HINT_ENUM, "Top Left,Centered,Custom Position,Force Maximized,Force Fullscreen");
- String screen_hints = TTR("Default (Same as Editor)");
- for (int i = 0; i < OS::get_singleton()->get_screen_count(); i++) {
- screen_hints += ",Monitor " + itos(i + 1);
+ Variant ret = p_default;
+ if (EditorSettings::get_singleton()->has_setting(p_setting))
+ ret = EditorSettings::get_singleton()->get(p_setting);
+ if (!EditorSettings::get_singleton()->has_default_value(p_setting)) {
+ EditorSettings::get_singleton()->set_initial_value(p_setting, p_default);
+ EditorSettings::get_singleton()->set(p_setting, p_default);
}
- _initial_set("run/window_placement/rect_custom_position", Vector2());
- _initial_set("run/window_placement/screen", 0);
- hints["run/window_placement/screen"] = PropertyInfo(Variant::INT, "run/window_placement/screen", PROPERTY_HINT_ENUM, screen_hints);
-
- _initial_set("filesystem/on_save/compress_binary_resources", true);
- _initial_set("filesystem/on_save/save_modified_external_resources", true);
-
- _initial_set("text_editor/tools/create_signal_callbacks", true);
-
- _initial_set("filesystem/file_dialog/show_hidden_files", false);
- _initial_set("filesystem/file_dialog/display_mode", 0);
- hints["filesystem/file_dialog/display_mode"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List");
- _initial_set("filesystem/file_dialog/thumbnail_size", 64);
- hints["filesystem/file_dialog/thumbnail_size"] = PropertyInfo(Variant::INT, "filesystem/file_dialog/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16");
-
- _initial_set("docks/filesystem/display_mode", 0);
- hints["docks/filesystem/display_mode"] = PropertyInfo(Variant::INT, "docks/filesystem/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List");
- _initial_set("docks/filesystem/thumbnail_size", 64);
- hints["docks/filesystem/thumbnail_size"] = PropertyInfo(Variant::INT, "docks/filesystem/thumbnail_size", PROPERTY_HINT_RANGE, "32,128,16");
- _initial_set("docks/filesystem/display_mode", 0);
- hints["docks/filesystem/display_mode"] = PropertyInfo(Variant::INT, "docks/filesystem/display_mode", PROPERTY_HINT_ENUM, "Thumbnails,List");
- _initial_set("docks/filesystem/always_show_folders", true);
-
- _initial_set("editors/animation/autorename_animation_tracks", true);
- _initial_set("editors/animation/confirm_insert_track", true);
-
- _initial_set("docks/property_editor/texture_preview_width", 48);
- _initial_set("docks/property_editor/auto_refresh_interval", 0.3);
- _initial_set("text_editor/help/doc_path", "");
- _initial_set("text_editor/help/show_help_index", true);
-
- _initial_set("filesystem/import/ask_save_before_reimport", false);
-
- _initial_set("filesystem/import/pvrtc_texture_tool", "");
-#ifdef WINDOWS_ENABLED
- hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "*.exe");
-#else
- hints["filesystem/import/pvrtc_texture_tool"] = PropertyInfo(Variant::STRING, "filesystem/import/pvrtc_texture_tool", PROPERTY_HINT_GLOBAL_FILE, "");
-#endif
- _initial_set("filesystem/import/pvrtc_fast_conversion", false);
- _initial_set("run/auto_save/save_before_running", true);
- _initial_set("run/output/always_clear_output_on_play", true);
- _initial_set("run/output/always_open_output_on_play", true);
- _initial_set("run/output/always_close_output_on_stop", false);
- _initial_set("filesystem/resources/save_compressed_resources", true);
- _initial_set("filesystem/resources/auto_reload_modified_images", true);
-
- _initial_set("filesystem/import/automatic_reimport_on_sources_changed", true);
+ return ret;
+}
- if (p_extra_config.is_valid()) {
+Variant _EDITOR_GET(const String &p_setting) {
- if (p_extra_config->has_section("init_projects") && p_extra_config->has_section_key("init_projects", "list")) {
+ ERR_FAIL_COND_V(!EditorSettings::get_singleton()->has_setting(p_setting), Variant())
+ return EditorSettings::get_singleton()->get(p_setting);
+}
- Vector<String> list = p_extra_config->get_value("init_projects", "list");
- for (int i = 0; i < list.size(); i++) {
+bool EditorSettings::property_can_revert(const String &p_setting) {
- String name = list[i].replace("/", "::");
- set("projects/" + name, list[i]);
- };
- };
+ if (!props.has(p_setting))
+ return false;
- if (p_extra_config->has_section("presets")) {
+ return props[p_setting].initial != props[p_setting].variant;
+}
- List<String> keys;
- p_extra_config->get_section_keys("presets", &keys);
+Variant EditorSettings::property_get_revert(const String &p_setting) {
- for (List<String>::Element *E = keys.front(); E; E = E->next()) {
+ if (!props.has(p_setting))
+ return Variant();
- String key = E->get();
- Variant val = p_extra_config->get_value("presets", key);
- set(key, val);
- };
- };
- };
+ return props[p_setting].initial;
}
-void EditorSettings::_load_default_text_editor_theme() {
- _initial_set("text_editor/highlighting/background_color", Color::html("3b000000"));
- _initial_set("text_editor/highlighting/completion_background_color", Color::html("2C2A32"));
- _initial_set("text_editor/highlighting/completion_selected_color", Color::html("434244"));
- _initial_set("text_editor/highlighting/completion_existing_color", Color::html("21dfdfdf"));
- _initial_set("text_editor/highlighting/completion_scroll_color", Color::html("ffffff"));
- _initial_set("text_editor/highlighting/completion_font_color", Color::html("aaaaaa"));
- _initial_set("text_editor/highlighting/caret_color", Color::html("aaaaaa"));
- _initial_set("text_editor/highlighting/caret_background_color", Color::html("000000"));
- _initial_set("text_editor/highlighting/line_number_color", Color::html("66aaaaaa"));
- _initial_set("text_editor/highlighting/text_color", Color::html("aaaaaa"));
- _initial_set("text_editor/highlighting/text_selected_color", Color::html("000000"));
- _initial_set("text_editor/highlighting/keyword_color", Color::html("ffffb3"));
- _initial_set("text_editor/highlighting/base_type_color", Color::html("a4ffd4"));
- _initial_set("text_editor/highlighting/engine_type_color", Color::html("83d3ff"));
- _initial_set("text_editor/highlighting/function_color", Color::html("66a2ce"));
- _initial_set("text_editor/highlighting/member_variable_color", Color::html("e64e59"));
- _initial_set("text_editor/highlighting/comment_color", Color::html("676767"));
- _initial_set("text_editor/highlighting/string_color", Color::html("ef6ebe"));
- _initial_set("text_editor/highlighting/number_color", Color::html("EB9532"));
- _initial_set("text_editor/highlighting/symbol_color", Color::html("badfff"));
- _initial_set("text_editor/highlighting/selection_color", Color::html("6ca9c2"));
- _initial_set("text_editor/highlighting/brace_mismatch_color", Color(1, 0.2, 0.2));
- _initial_set("text_editor/highlighting/current_line_color", Color(0.3, 0.5, 0.8, 0.15));
- _initial_set("text_editor/highlighting/line_length_guideline_color", Color(0.3, 0.5, 0.8, 0.1));
- _initial_set("text_editor/highlighting/mark_color", Color(1.0, 0.4, 0.4, 0.4));
- _initial_set("text_editor/highlighting/breakpoint_color", Color(0.8, 0.8, 0.4, 0.2));
- _initial_set("text_editor/highlighting/word_highlighted_color", Color(0.8, 0.9, 0.9, 0.15));
- _initial_set("text_editor/highlighting/search_result_color", Color(0.05, 0.25, 0.05, 1));
- _initial_set("text_editor/highlighting/search_result_border_color", Color(0.1, 0.45, 0.1, 1));
-}
-
-void EditorSettings::notify_changes() {
+void EditorSettings::add_property_hint(const PropertyInfo &p_hint) {
_THREAD_SAFE_METHOD_
- SceneTree *sml = Object::cast_to<SceneTree>(OS::get_singleton()->get_main_loop());
-
- if (!sml) {
- return;
- }
-
- Node *root = sml->get_root()->get_child(0);
-
- if (!root) {
- return;
- }
- root->propagate_notification(NOTIFICATION_EDITOR_SETTINGS_CHANGED);
+ hints[p_hint.name] = p_hint;
}
-void EditorSettings::_add_property_info_bind(const Dictionary &p_info) {
+// Settings paths and saved metadata
- ERR_FAIL_COND(!p_info.has("name"));
- ERR_FAIL_COND(!p_info.has("type"));
+String EditorSettings::get_settings_path() const {
- PropertyInfo pinfo;
- pinfo.name = p_info["name"];
- ERR_FAIL_COND(!props.has(pinfo.name));
- pinfo.type = Variant::Type(p_info["type"].operator int());
- ERR_FAIL_INDEX(pinfo.type, Variant::VARIANT_MAX);
+ return settings_path;
+}
- if (p_info.has("hint"))
- pinfo.hint = PropertyHint(p_info["hint"].operator int());
- if (p_info.has("hint_string"))
- pinfo.hint_string = p_info["hint_string"];
+String EditorSettings::get_project_settings_path() const {
- add_property_hint(pinfo);
+ return get_settings_path().plus_file("config").plus_file(project_config_path);
}
-void EditorSettings::add_property_hint(const PropertyInfo &p_hint) {
-
- _THREAD_SAFE_METHOD_
+void EditorSettings::set_project_metadata(const String &p_section, const String &p_key, Variant p_data) {
+ Ref<ConfigFile> cf = memnew(ConfigFile);
+ String path = get_project_settings_path().plus_file("project_metadata.cfg");
+ cf->load(path);
+ cf->set_value(p_section, p_key, p_data);
+ cf->save(path);
+}
- hints[p_hint.name] = p_hint;
+Variant EditorSettings::get_project_metadata(const String &p_section, const String &p_key, Variant p_default) {
+ Ref<ConfigFile> cf = memnew(ConfigFile);
+ String path = get_project_settings_path().plus_file("project_metadata.cfg");
+ Error err = cf->load(path);
+ if (err != OK) {
+ return p_default;
+ }
+ return cf->get_value(p_section, p_key, p_default);
}
void EditorSettings::set_favorite_dirs(const Vector<String> &p_favorites_dirs) {
@@ -930,11 +1031,6 @@ Vector<String> EditorSettings::get_recent_dirs() const {
return recent_dirs;
}
-String EditorSettings::get_project_settings_path() const {
-
- return get_settings_path().plus_file("config").plus_file(project_config_path);
-}
-
void EditorSettings::load_favorites() {
FileAccess *f = FileAccess::open(get_project_settings_path().plus_file("favorite_dirs"), FileAccess::READ);
@@ -960,7 +1056,7 @@ void EditorSettings::load_favorites() {
void EditorSettings::list_text_editor_themes() {
String themes = "Adaptive,Default";
- DirAccess *d = DirAccess::open(settings_path + "/text_editor_themes");
+ DirAccess *d = DirAccess::open(get_settings_path().plus_file("text_editor_themes"));
if (d) {
d->list_dir_begin();
String file = d->get_next();
@@ -982,7 +1078,7 @@ void EditorSettings::load_text_editor_theme() {
return;
}
- String theme_path = get_settings_path() + "/text_editor_themes/" + get("text_editor/theme/color_theme") + ".tet";
+ String theme_path = get_settings_path().plus_file("text_editor_themes").plus_file((String)get("text_editor/theme/color_theme") + ".tet");
Ref<ConfigFile> cf = memnew(ConfigFile);
Error err = cf->load(theme_path);
@@ -1020,9 +1116,9 @@ bool EditorSettings::import_text_editor_theme(String p_file) {
return false;
}
- DirAccess *d = DirAccess::open(settings_path + "/text_editor_themes");
+ DirAccess *d = DirAccess::open(get_settings_path().plus_file("text_editor_themes"));
if (d) {
- d->copy(p_file, settings_path + "/text_editor_themes/" + p_file.get_file());
+ d->copy(p_file, get_settings_path().plus_file("text_editor_themes").plus_file(p_file.get_file()));
memdelete(d);
return true;
}
@@ -1037,7 +1133,7 @@ bool EditorSettings::save_text_editor_theme() {
if (p_file.get_file().to_lower() == "default" || p_file.get_file().to_lower() == "adaptive") {
return false;
}
- String theme_path = get_settings_path() + "/text_editor_themes/" + p_file + ".tet";
+ String theme_path = get_settings_path().plus_file("text_editor_themes").plus_file(p_file + ".tet");
return _save_text_editor_theme(theme_path);
}
@@ -1055,7 +1151,7 @@ bool EditorSettings::save_text_editor_theme_as(String p_file) {
list_text_editor_themes();
String theme_name = p_file.substr(0, p_file.length() - 4).get_file();
- if (p_file.get_base_dir() == get_settings_path() + "/text_editor_themes") {
+ if (p_file.get_base_dir() == get_settings_path().plus_file("text_editor_themes")) {
_initial_set("text_editor/theme/color_theme", theme_name);
load_text_editor_theme();
}
@@ -1067,7 +1163,7 @@ bool EditorSettings::save_text_editor_theme_as(String p_file) {
Vector<String> EditorSettings::get_script_templates(const String &p_extension) {
Vector<String> templates;
- DirAccess *d = DirAccess::open(settings_path + "/script_templates");
+ DirAccess *d = DirAccess::open(get_settings_path().plus_file("script_templates"));
if (d) {
d->list_dir_begin();
String file = d->get_next();
@@ -1083,46 +1179,7 @@ Vector<String> EditorSettings::get_script_templates(const String &p_extension) {
return templates;
}
-bool EditorSettings::_save_text_editor_theme(String p_file) {
- String theme_section = "color_theme";
- Ref<ConfigFile> cf = memnew(ConfigFile); // hex is better?
- cf->set_value(theme_section, "background_color", ((Color)get("text_editor/highlighting/background_color")).to_html());
- cf->set_value(theme_section, "completion_background_color", ((Color)get("text_editor/highlighting/completion_background_color")).to_html());
- cf->set_value(theme_section, "completion_selected_color", ((Color)get("text_editor/highlighting/completion_selected_color")).to_html());
- cf->set_value(theme_section, "completion_existing_color", ((Color)get("text_editor/highlighting/completion_existing_color")).to_html());
- cf->set_value(theme_section, "completion_scroll_color", ((Color)get("text_editor/highlighting/completion_scroll_color")).to_html());
- cf->set_value(theme_section, "completion_font_color", ((Color)get("text_editor/highlighting/completion_font_color")).to_html());
- cf->set_value(theme_section, "caret_color", ((Color)get("text_editor/highlighting/caret_color")).to_html());
- cf->set_value(theme_section, "caret_background_color", ((Color)get("text_editor/highlighting/caret_background_color")).to_html());
- cf->set_value(theme_section, "line_number_color", ((Color)get("text_editor/highlighting/line_number_color")).to_html());
- cf->set_value(theme_section, "text_color", ((Color)get("text_editor/highlighting/text_color")).to_html());
- cf->set_value(theme_section, "text_selected_color", ((Color)get("text_editor/highlighting/text_selected_color")).to_html());
- cf->set_value(theme_section, "keyword_color", ((Color)get("text_editor/highlighting/keyword_color")).to_html());
- cf->set_value(theme_section, "base_type_color", ((Color)get("text_editor/highlighting/base_type_color")).to_html());
- cf->set_value(theme_section, "engine_type_color", ((Color)get("text_editor/highlighting/engine_type_color")).to_html());
- cf->set_value(theme_section, "function_color", ((Color)get("text_editor/highlighting/function_color")).to_html());
- cf->set_value(theme_section, "member_variable_color", ((Color)get("text_editor/highlighting/member_variable_color")).to_html());
- cf->set_value(theme_section, "comment_color", ((Color)get("text_editor/highlighting/comment_color")).to_html());
- cf->set_value(theme_section, "string_color", ((Color)get("text_editor/highlighting/string_color")).to_html());
- cf->set_value(theme_section, "number_color", ((Color)get("text_editor/highlighting/number_color")).to_html());
- cf->set_value(theme_section, "symbol_color", ((Color)get("text_editor/highlighting/symbol_color")).to_html());
- cf->set_value(theme_section, "selection_color", ((Color)get("text_editor/highlighting/selection_color")).to_html());
- cf->set_value(theme_section, "brace_mismatch_color", ((Color)get("text_editor/highlighting/brace_mismatch_color")).to_html());
- cf->set_value(theme_section, "current_line_color", ((Color)get("text_editor/highlighting/current_line_color")).to_html());
- cf->set_value(theme_section, "line_length_guideline_color", ((Color)get("text_editor/highlighting/line_length_guideline_color")).to_html());
- cf->set_value(theme_section, "mark_color", ((Color)get("text_editor/highlighting/mark_color")).to_html());
- cf->set_value(theme_section, "breakpoint_color", ((Color)get("text_editor/highlighting/breakpoint_color")).to_html());
- cf->set_value(theme_section, "word_highlighted_color", ((Color)get("text_editor/highlighting/word_highlighted_color")).to_html());
- cf->set_value(theme_section, "search_result_color", ((Color)get("text_editor/highlighting/search_result_color")).to_html());
- cf->set_value(theme_section, "search_result_border_color", ((Color)get("text_editor/highlighting/search_result_border_color")).to_html());
-
- Error err = cf->save(p_file);
-
- if (err == OK) {
- return true;
- }
- return false;
-}
+// Shortcuts
void EditorSettings::add_shortcut(const String &p_name, Ref<ShortCut> &p_shortcut) {
@@ -1157,49 +1214,64 @@ void EditorSettings::get_shortcut_list(List<String> *r_shortcuts) {
}
}
-void EditorSettings::set_optimize_save(bool p_optimize) {
+Ref<ShortCut> ED_GET_SHORTCUT(const String &p_path) {
- optimize_save = p_optimize;
+ Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(p_path);
+ if (!sc.is_valid()) {
+ ERR_EXPLAIN("Used ED_GET_SHORTCUT with invalid shortcut: " + p_path);
+ ERR_FAIL_COND_V(!sc.is_valid(), sc);
+ }
+
+ return sc;
}
-Variant EditorSettings::get_project_metadata(const String &p_section, const String &p_key, Variant p_default) {
- Ref<ConfigFile> cf = memnew(ConfigFile);
- String path = get_project_settings_path().plus_file("project_metadata.cfg");
- Error err = cf->load(path);
- if (err != OK) {
- return p_default;
+Ref<ShortCut> ED_SHORTCUT(const String &p_path, const String &p_name, uint32_t p_keycode) {
+
+ Ref<InputEventKey> ie;
+ if (p_keycode) {
+ ie.instance();
+
+ ie->set_unicode(p_keycode & KEY_CODE_MASK);
+ ie->set_scancode(p_keycode & KEY_CODE_MASK);
+ ie->set_shift(bool(p_keycode & KEY_MASK_SHIFT));
+ ie->set_alt(bool(p_keycode & KEY_MASK_ALT));
+ ie->set_control(bool(p_keycode & KEY_MASK_CTRL));
+ ie->set_metakey(bool(p_keycode & KEY_MASK_META));
}
- return cf->get_value(p_section, p_key, p_default);
-}
-void EditorSettings::set_project_metadata(const String &p_section, const String &p_key, Variant p_data) {
- Ref<ConfigFile> cf = memnew(ConfigFile);
- String path = get_project_settings_path().plus_file("project_metadata.cfg");
- cf->load(path);
- cf->set_value(p_section, p_key, p_data);
- cf->save(path);
-}
+ Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(p_path);
+ if (sc.is_valid()) {
-bool EditorSettings::property_can_revert(const String &p_name) {
+ sc->set_name(p_name); //keep name (the ones that come from disk have no name)
+ sc->set_meta("original", ie); //to compare against changes
+ return sc;
+ }
- if (!props.has(p_name))
- return false;
+ sc.instance();
+ sc->set_name(p_name);
+ sc->set_shortcut(ie);
+ sc->set_meta("original", ie); //to compare against changes
+ EditorSettings::get_singleton()->add_shortcut(p_path, sc);
- return props[p_name].initial != props[p_name].variant;
+ return sc;
}
-Variant EditorSettings::property_get_revert(const String &p_name) {
+void EditorSettings::notify_changes() {
- if (!props.has(p_name))
- return Variant();
+ _THREAD_SAFE_METHOD_
- return props[p_name].initial;
-}
+ SceneTree *sml = Object::cast_to<SceneTree>(OS::get_singleton()->get_main_loop());
+
+ if (!sml) {
+ return;
+ }
-void EditorSettings::set_initial_value(const StringName &p_name, const Variant &p_value) {
+ Node *root = sml->get_root()->get_child(0);
- ERR_FAIL_COND(!props.has(p_name));
- props[p_name].initial = p_value;
+ if (!root) {
+ return;
+ }
+ root->propagate_notification(NOTIFICATION_EDITOR_SETTINGS_CHANGED);
}
void EditorSettings::_bind_methods() {
@@ -1207,24 +1279,20 @@ void EditorSettings::_bind_methods() {
ClassDB::bind_method(D_METHOD("has_setting", "name"), &EditorSettings::has_setting);
ClassDB::bind_method(D_METHOD("set_setting", "name", "value"), &EditorSettings::set_setting);
ClassDB::bind_method(D_METHOD("get_setting", "name"), &EditorSettings::get_setting);
-
ClassDB::bind_method(D_METHOD("erase", "property"), &EditorSettings::erase);
+ ClassDB::bind_method(D_METHOD("set_initial_value", "name", "value"), &EditorSettings::set_initial_value);
+ ClassDB::bind_method(D_METHOD("property_can_revert", "name"), &EditorSettings::property_can_revert);
+ ClassDB::bind_method(D_METHOD("property_get_revert", "name"), &EditorSettings::property_get_revert);
+ ClassDB::bind_method(D_METHOD("add_property_info", "info"), &EditorSettings::_add_property_info_bind);
+
ClassDB::bind_method(D_METHOD("get_settings_path"), &EditorSettings::get_settings_path);
ClassDB::bind_method(D_METHOD("get_project_settings_path"), &EditorSettings::get_project_settings_path);
- ClassDB::bind_method(D_METHOD("add_property_info", "info"), &EditorSettings::_add_property_info_bind);
-
ClassDB::bind_method(D_METHOD("set_favorite_dirs", "dirs"), &EditorSettings::set_favorite_dirs);
ClassDB::bind_method(D_METHOD("get_favorite_dirs"), &EditorSettings::get_favorite_dirs);
-
ClassDB::bind_method(D_METHOD("set_recent_dirs", "dirs"), &EditorSettings::set_recent_dirs);
ClassDB::bind_method(D_METHOD("get_recent_dirs"), &EditorSettings::get_recent_dirs);
- ClassDB::bind_method(D_METHOD("property_can_revert", "name"), &EditorSettings::property_can_revert);
- ClassDB::bind_method(D_METHOD("property_get_revert", "name"), &EditorSettings::property_get_revert);
-
- ClassDB::bind_method(D_METHOD("set_initial_value", "name", "value"), &EditorSettings::set_initial_value);
-
ADD_SIGNAL(MethodInfo("settings_changed"));
}
@@ -1260,45 +1328,3 @@ EditorSettings::EditorSettings() {
EditorSettings::~EditorSettings() {
}
-
-Ref<ShortCut> ED_GET_SHORTCUT(const String &p_path) {
-
- Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(p_path);
- if (!sc.is_valid()) {
- ERR_EXPLAIN("Used ED_GET_SHORTCUT with invalid shortcut: " + p_path);
- ERR_FAIL_COND_V(!sc.is_valid(), sc);
- }
-
- return sc;
-}
-
-Ref<ShortCut> ED_SHORTCUT(const String &p_path, const String &p_name, uint32_t p_keycode) {
-
- Ref<InputEventKey> ie;
- if (p_keycode) {
- ie.instance();
-
- ie->set_unicode(p_keycode & KEY_CODE_MASK);
- ie->set_scancode(p_keycode & KEY_CODE_MASK);
- ie->set_shift(bool(p_keycode & KEY_MASK_SHIFT));
- ie->set_alt(bool(p_keycode & KEY_MASK_ALT));
- ie->set_control(bool(p_keycode & KEY_MASK_CTRL));
- ie->set_metakey(bool(p_keycode & KEY_MASK_META));
- }
-
- Ref<ShortCut> sc = EditorSettings::get_singleton()->get_shortcut(p_path);
- if (sc.is_valid()) {
-
- sc->set_name(p_name); //keep name (the ones that come from disk have no name)
- sc->set_meta("original", ie); //to compare against changes
- return sc;
- }
-
- sc.instance();
- sc->set_name(p_name);
- sc->set_shortcut(ie);
- sc->set_meta("original", ie); //to compare against changes
- EditorSettings::get_singleton()->add_shortcut(p_path, sc);
-
- return sc;
-}