Merge pull request #113026 from YeldhamDev/export_dialog_tidyup

Fully hide preset settings when no preset is found in the export dialog
This commit is contained in:
Rémi Verschelde 2025-12-01 11:48:56 +01:00
commit a5fc5bbff5
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 29 additions and 21 deletions

View file

@ -203,11 +203,15 @@ void ProjectExportDialog::_update_presets() {
}
int current_idx = -1;
int preset_count = EditorExport::get_singleton()->get_export_preset_count();
presets->clear();
for (int i = 0; i < EditorExport::get_singleton()->get_export_preset_count(); i++) {
for (int i = 0; i < preset_count; i++) {
Ref<EditorExportPreset> preset = EditorExport::get_singleton()->get_export_preset(i);
if (preset == current) {
current_idx = i;
} else if (current.is_null()) {
current_idx = i;
_edit_preset(i);
}
String preset_name = preset->get_name();
@ -218,6 +222,9 @@ void ProjectExportDialog::_update_presets() {
presets->add_item(preset_name, preset->get_platform()->get_logo());
}
settings_vb->set_visible(current_idx != -1);
empty_label->set_visible(current_idx == -1);
if (current_idx != -1) {
presets->select(current_idx);
}
@ -249,19 +256,14 @@ void ProjectExportDialog::_update_export_all() {
void ProjectExportDialog::_edit_preset(int p_index) {
if (p_index < 0 || p_index >= presets->get_item_count()) {
name->set_text("");
name->set_editable(false);
export_path->hide();
advanced_options->set_disabled(true);
runnable->set_disabled(true);
parameters->edit(nullptr);
presets->deselect_all();
duplicate_preset->set_disabled(true);
delete_preset->set_disabled(true);
sections->hide();
patches->clear();
export_error->hide();
export_templates_error->hide();
export_texture_format_error->hide();
return;
}
@ -271,10 +273,6 @@ void ProjectExportDialog::_edit_preset(int p_index) {
updating = true;
presets->select(p_index);
sections->show();
name->set_editable(true);
export_path->show();
duplicate_preset->set_disabled(false);
delete_preset->set_disabled(false);
get_ok_button()->set_disabled(false);
@ -289,8 +287,6 @@ void ProjectExportDialog::_edit_preset(int p_index) {
export_path->get_path_edit()->clear();
export_path->setup(extension_vector, false, true, false);
export_path->update_property();
advanced_options->set_disabled(false);
runnable->set_disabled(false);
runnable->set_pressed(current->is_runnable());
if (parameters->get_edited_object() != current.ptr()) {
current->update_value_overrides();
@ -795,7 +791,7 @@ void ProjectExportDialog::_delete_preset() {
void ProjectExportDialog::_delete_preset_confirm() {
int idx = presets->get_current();
_edit_preset(-1);
_edit_preset(idx - 1);
export_button->set_disabled(true);
get_ok_button()->set_disabled(true);
EditorExport::get_singleton()->remove_export_preset(idx);
@ -1597,6 +1593,7 @@ ProjectExportDialog::ProjectExportDialog() {
presets = memnew(ItemList);
presets->set_theme_type_variation("ItemListSecondary");
presets->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED);
presets->set_custom_minimum_size(Size2(0, 200 * EDSCALE));
SET_DRAG_FORWARDING_GCD(presets, ProjectExportDialog);
mc->add_child(presets);
presets->connect(SceneStringName(item_selected), callable_mp(this, &ProjectExportDialog::_edit_preset));
@ -1613,7 +1610,8 @@ ProjectExportDialog::ProjectExportDialog() {
// Preset settings.
VBoxContainer *settings_vb = memnew(VBoxContainer);
settings_vb = memnew(VBoxContainer);
settings_vb->hide();
settings_vb->set_h_size_flags(Control::SIZE_EXPAND_FILL);
hbox->add_child(settings_vb);
@ -1933,16 +1931,23 @@ ProjectExportDialog::ProjectExportDialog() {
sections->connect("tab_changed", callable_mp(this, &ProjectExportDialog::_tab_changed));
// Disable by default.
name->set_editable(false);
export_path->hide();
advanced_options->set_disabled(true);
runnable->set_disabled(true);
duplicate_preset->set_disabled(true);
delete_preset->set_disabled(true);
script_key_error->hide();
sections->hide();
parameters->edit(nullptr);
// Label shown when no presets are present.
empty_label = memnew(Label(TTRC("No presets found.\nCreate one so that its parameters can be edited here.")));
empty_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
empty_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
empty_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
empty_label->set_clip_text(true); // Necessary to avoid overexpanding the dialog vertically.
empty_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
empty_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
empty_label->hide();
hbox->add_child(empty_label);
// Deletion dialog.
delete_confirm = memnew(ConfirmationDialog);
@ -1960,7 +1965,7 @@ ProjectExportDialog::ProjectExportDialog() {
export_button = add_button(TTR("Export Project..."), !DisplayServer::get_singleton()->get_swap_cancel_ok(), "export");
export_button->set_tooltip_text(TTR("Export the project as a playable build (Godot executable and project data) for the selected preset."));
export_button->connect(SceneStringName(pressed), callable_mp(this, &ProjectExportDialog::_export_project));
// Disable initially before we select a valid preset
// Disable initially before we select a valid preset.
export_button->set_disabled(true);
export_all_dialog = memnew(ConfirmationDialog);

View file

@ -79,12 +79,15 @@ class ProjectExportDialog : public ConfirmationDialog {
Button *delete_preset = nullptr;
ItemList *presets = nullptr;
VBoxContainer *settings_vb = nullptr;
LineEdit *name = nullptr;
EditorPropertyPath *export_path = nullptr;
EditorInspector *parameters = nullptr;
CheckButton *runnable = nullptr;
CheckButton *advanced_options = nullptr;
Label *empty_label = nullptr;
Button *button_export = nullptr;
bool updating = false;