Skip to content

Commit b1a149d

Browse files
Editor: Add Filter to Project Export → Options tab
See godotengine/godot-proposals#11335 Co-authored-by: AThousandShips <96648715+athousandships@users.noreply.github.com>
1 parent 1c8cc9e commit b1a149d

4 files changed

Lines changed: 55 additions & 3 deletions

File tree

editor/export/editor_export_preset.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,16 @@ bool EditorExportPreset::is_runnable() const {
333333
}
334334

335335
bool EditorExportPreset::are_advanced_options_enabled() const {
336-
return EDITOR_GET("_export_preset_advanced_mode");
336+
return options_search_active || EDITOR_GET("_export_preset_advanced_mode");
337+
}
338+
339+
void EditorExportPreset::set_options_search_active(bool p_active) {
340+
if (options_search_active == p_active) {
341+
return;
342+
}
343+
344+
options_search_active = p_active;
345+
notify_property_list_changed();
337346
}
338347

339348
void EditorExportPreset::set_dedicated_server(bool p_enable) {

editor/export/editor_export_preset.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class EditorExportPreset : public RefCounted {
8888
HashMap<StringName, bool> update_visibility;
8989

9090
String name;
91+
bool options_search_active = false;
9192

9293
String custom_features;
9394

@@ -145,6 +146,7 @@ class EditorExportPreset : public RefCounted {
145146
bool is_runnable() const;
146147

147148
bool are_advanced_options_enabled() const;
149+
void set_options_search_active(bool p_active);
148150

149151
void set_dedicated_server(bool p_enable);
150152
bool is_dedicated_server() const;

editor/export/project_export.cpp

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ void ProjectExportDialog::_notification(int p_what) {
119119

120120
case NOTIFICATION_THEME_CHANGED: {
121121
_script_encryption_key_visibility_changed(show_script_key->is_pressed());
122+
options_filter->set_right_icon(get_editor_theme_icon(SNAME("Search")));
122123
duplicate_preset->set_button_icon(presets->get_editor_theme_icon(SNAME("Duplicate")));
123124
delete_preset->set_button_icon(presets->get_editor_theme_icon(SNAME("Remove")));
124125
patch_add_btn->set_button_icon(get_editor_theme_icon(SNAME("Add")));
@@ -128,6 +129,7 @@ void ProjectExportDialog::_notification(int p_what) {
128129
duplicate_preset->set_button_icon(presets->get_editor_theme_icon(SNAME("Duplicate")));
129130
delete_preset->set_button_icon(presets->get_editor_theme_icon(SNAME("Remove")));
130131
patch_add_btn->set_button_icon(get_editor_theme_icon(SNAME("Add")));
132+
options_filter->set_right_icon(get_editor_theme_icon(SNAME("Search")));
131133
connect(SceneStringName(confirmed), callable_mp(this, &ProjectExportDialog::_export_pck_zip));
132134
_update_export_all();
133135
} break;
@@ -279,6 +281,7 @@ void ProjectExportDialog::_edit_preset(int p_index) {
279281
updating = true;
280282

281283
presets->select(p_index);
284+
_options_filter_changed(options_filter->get_text());
282285
duplicate_preset->set_disabled(false);
283286
delete_preset->set_disabled(false);
284287
get_ok_button()->set_disabled(false);
@@ -522,6 +525,27 @@ void ProjectExportDialog::_advanced_options_pressed() {
522525
_update_presets();
523526
}
524527

528+
void ProjectExportDialog::_options_filter_changed(const String &p_filter) {
529+
const bool search_active = !p_filter.is_empty();
530+
if (search_active) {
531+
advanced_options->set_pressed_no_signal(true);
532+
advanced_options->set_disabled(true);
533+
advanced_options->set_tooltip_text(TTRC("Advanced settings are always shown when searching."));
534+
} else {
535+
advanced_options->set_pressed_no_signal(EDITOR_GET("_export_preset_advanced_mode"));
536+
advanced_options->set_disabled(false);
537+
advanced_options->set_tooltip_text(TTR("If checked, the advanced options will be shown."));
538+
}
539+
540+
const int current_preset = presets->get_current();
541+
if (current_preset >= 0 && current_preset < EditorExport::get_singleton()->get_export_preset_count()) {
542+
Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(current_preset);
543+
if (current.is_valid()) {
544+
current->set_options_search_active(search_active);
545+
}
546+
}
547+
}
548+
525549
void ProjectExportDialog::_runnable_pressed() {
526550
if (updating) {
527551
return;
@@ -1650,12 +1674,27 @@ ProjectExportDialog::ProjectExportDialog() {
16501674

16511675
// Main preset parameters.
16521676

1677+
VBoxContainer *parameters_vb = memnew(VBoxContainer);
1678+
parameters_vb->set_name(TTRC("Options"));
1679+
parameters_vb->set_v_size_flags(Control::SIZE_EXPAND_FILL);
1680+
sections->add_child(parameters_vb);
1681+
1682+
options_filter = memnew(LineEdit);
1683+
options_filter->set_placeholder(TTRC("Filter Options"));
1684+
options_filter->set_accessibility_name(TTRC("Filter Options"));
1685+
options_filter->set_clear_button_enabled(true);
1686+
options_filter->set_virtual_keyboard_show_on_focus(false);
1687+
options_filter->set_h_size_flags(Control::SIZE_EXPAND_FILL);
1688+
options_filter->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_options_filter_changed));
1689+
parameters_vb->add_child(options_filter);
1690+
16531691
parameters = memnew(EditorInspector);
1654-
parameters->set_name(TTRC("Options"));
16551692
parameters->set_mark_unsaved(false);
16561693
parameters->set_v_size_flags(Control::SIZE_EXPAND_FILL);
16571694
parameters->set_use_doc_hints(true);
1658-
sections->add_child(parameters);
1695+
parameters->register_text_enter(options_filter);
1696+
parameters->set_use_filter(true);
1697+
parameters_vb->add_child(parameters);
16591698
parameters->connect("property_edited", callable_mp(this, &ProjectExportDialog::_update_parameters));
16601699
EditorExport::get_singleton()->connect("export_presets_updated", callable_mp(this, &ProjectExportDialog::_force_update_current_preset_parameters));
16611700

editor/export/project_export.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ class ProjectExportDialog : public ConfirmationDialog {
8484

8585
VBoxContainer *settings_vb = nullptr;
8686
LineEdit *name = nullptr;
87+
LineEdit *options_filter = nullptr;
8788
EditorPropertyPath *export_path = nullptr;
8889
EditorInspector *parameters = nullptr;
8990
CheckButton *runnable = nullptr;
@@ -141,6 +142,7 @@ class ProjectExportDialog : public ConfirmationDialog {
141142
bool exporting = false;
142143

143144
void _advanced_options_pressed();
145+
void _options_filter_changed(const String &p_filter);
144146
void _runnable_pressed();
145147
void _update_parameters(const String &p_edited_property);
146148
void _name_changed(const String &p_string);

0 commit comments

Comments
 (0)