1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-15 13:51:40 +00:00

Allow to override editor settings per project

This commit is contained in:
kobewi
2022-11-21 20:07:15 +01:00
parent 64b09905c7
commit b41d6ecf8c
22 changed files with 306 additions and 21 deletions

View File

@@ -74,6 +74,12 @@ void ProjectSettingsEditor::popup_project_settings(bool p_clear_filter) {
_focus_current_search_box();
}
void ProjectSettingsEditor::popup_for_override(const String &p_override) {
popup_project_settings();
tab_container->set_current_tab(0);
general_settings_inspector->set_current_section(ProjectSettings::EDITOR_SETTING_OVERRIDE_PREFIX + p_override.get_slicec('/', 0));
}
void ProjectSettingsEditor::queue_save() {
settings_changed = true;
timer->start();
@@ -84,6 +90,10 @@ void ProjectSettingsEditor::_save() {
if (ps) {
ps->save();
}
if (pending_override_notify) {
pending_override_notify = false;
EditorNode::get_singleton()->notify_settings_overrides_changed();
}
}
void ProjectSettingsEditor::set_plugins_page() {
@@ -104,6 +114,11 @@ void ProjectSettingsEditor::init_autoloads() {
}
void ProjectSettingsEditor::_setting_edited(const String &p_name) {
const String full_name = general_settings_inspector->get_full_item_path(p_name);
if (full_name.begins_with(ProjectSettings::EDITOR_SETTING_OVERRIDE_PREFIX)) {
EditorSettings::get_singleton()->mark_setting_changed(full_name.trim_prefix(ProjectSettings::EDITOR_SETTING_OVERRIDE_PREFIX));
pending_override_notify = true;
}
queue_save();
}
@@ -111,6 +126,21 @@ void ProjectSettingsEditor::_update_advanced(bool p_is_advanced) {
custom_properties->set_visible(p_is_advanced);
}
void ProjectSettingsEditor::_on_category_changed(const String &p_new_category) {
general_settings_inspector->get_inspector()->set_use_deletable_properties(p_new_category.begins_with(ProjectSettings::EDITOR_SETTING_OVERRIDE_PREFIX));
}
void ProjectSettingsEditor::_on_editor_override_deleted(const String &p_setting) {
const String full_name = general_settings_inspector->get_full_item_path(p_setting);
ERR_FAIL_COND(!full_name.begins_with(ProjectSettings::EDITOR_SETTING_OVERRIDE_PREFIX));
ProjectSettings::get_singleton()->set_setting(full_name, Variant());
EditorSettings::get_singleton()->mark_setting_changed(full_name.trim_prefix(ProjectSettings::EDITOR_SETTING_OVERRIDE_PREFIX));
pending_override_notify = true;
_save();
general_settings_inspector->update_category_list();
}
void ProjectSettingsEditor::_advanced_toggled(bool p_button_pressed) {
EditorSettings::get_singleton()->set("_project_settings_advanced_mode", p_button_pressed);
EditorSettings::get_singleton()->save();
@@ -224,7 +254,7 @@ void ProjectSettingsEditor::_update_property_box() {
}
if (ps->has_setting(setting)) {
del_button->set_disabled(ps->is_builtin_setting(setting));
del_button->set_disabled(ps->is_builtin_setting(setting) || setting.begins_with(ProjectSettings::EDITOR_SETTING_OVERRIDE_PREFIX));
_select_type(ps->get_setting(setting).get_type());
} else {
if (ps->has_setting(name)) {
@@ -233,7 +263,7 @@ void ProjectSettingsEditor::_update_property_box() {
type_box->select(0);
}
if (feature_invalid) {
if (feature_invalid || name.begins_with(ProjectSettings::EDITOR_SETTING_OVERRIDE_PREFIX)) {
return;
}
@@ -611,7 +641,17 @@ void ProjectSettingsEditor::_update_theme() {
void ProjectSettingsEditor::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_VISIBILITY_CHANGED: {
if (!is_visible()) {
if (is_visible()) {
HashMap<String, PropertyInfo> editor_settings_info;
List<PropertyInfo> infos;
EditorSettings::get_singleton()->get_property_list(&infos);
for (const PropertyInfo &pi : infos) {
editor_settings_info[pi.name] = pi;
}
ProjectSettings::get_singleton()->editor_settings_info = editor_settings_info;
} else {
EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "project_settings", Rect2(get_position(), get_size()));
if (settings_changed) {
timer->stop();
@@ -712,10 +752,12 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
general_settings_inspector->set_v_size_flags(Control::SIZE_EXPAND_FILL);
general_settings_inspector->register_search_box(search_box);
general_settings_inspector->register_advanced_toggle(advanced);
general_settings_inspector->connect("category_changed", callable_mp(this, &ProjectSettingsEditor::_on_category_changed));
general_settings_inspector->get_inspector()->set_use_filter(true);
general_settings_inspector->get_inspector()->set_mark_unsaved(false);
general_settings_inspector->get_inspector()->connect("property_selected", callable_mp(this, &ProjectSettingsEditor::_setting_selected));
general_settings_inspector->get_inspector()->connect("property_edited", callable_mp(this, &ProjectSettingsEditor::_setting_edited));
general_settings_inspector->get_inspector()->connect("property_deleted", callable_mp(this, &ProjectSettingsEditor::_on_editor_override_deleted));
general_settings_inspector->get_inspector()->connect("restart_requested", callable_mp(this, &ProjectSettingsEditor::_editor_restart_request));
general_editor->add_child(general_settings_inspector);