You've already forked godot
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:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user