Skip to content

Commit 166a2c3

Browse files
committed
Merge pull request #118898 from stuartcarnie/proposals/11335_filter_project_export_options
Editor: Add Filter to Project Export → Options tab
2 parents c150a4a + 1b53da8 commit 166a2c3

4 files changed

Lines changed: 67 additions & 4 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: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +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-
122+
options_filter->set_right_icon(get_editor_theme_icon(SNAME("Search")));
123123
duplicate_preset->set_button_icon(presets->get_editor_theme_icon(SNAME("Duplicate")));
124124
delete_preset->set_button_icon(presets->get_editor_theme_icon(SNAME("Remove")));
125125
patch_add_btn->set_button_icon(get_editor_theme_icon(SNAME("Add")));
@@ -145,6 +145,18 @@ void ProjectExportDialog::_notification(int p_what) {
145145
}
146146
}
147147

148+
void ProjectExportDialog::shortcut_input(const Ref<InputEvent> &p_event) {
149+
const Ref<InputEventKey> &key = p_event;
150+
151+
if (key.is_valid() && key->is_pressed() && !key->is_echo()) {
152+
if (ED_IS_SHORTCUT("editor/open_search", p_event)) {
153+
options_filter->grab_focus();
154+
options_filter->select_all();
155+
options_filter->accept_event();
156+
}
157+
}
158+
}
159+
148160
void ProjectExportDialog::popup_export() {
149161
add_preset->get_popup()->clear();
150162
for (int i = 0; i < EditorExport::get_singleton()->get_export_platform_count(); i++) {
@@ -291,6 +303,7 @@ void ProjectExportDialog::_edit_preset(int p_index) {
291303
updating = true;
292304

293305
presets->select(p_index);
306+
_options_filter_changed(options_filter->get_text());
294307
duplicate_preset->set_disabled(false);
295308
delete_preset->set_disabled(false);
296309
get_ok_button()->set_disabled(false);
@@ -534,6 +547,26 @@ void ProjectExportDialog::_advanced_options_pressed() {
534547
_update_presets();
535548
}
536549

550+
void ProjectExportDialog::_options_filter_changed(const String &p_filter) {
551+
const bool search_active = !p_filter.is_empty();
552+
advanced_options->set_disabled(search_active);
553+
if (search_active) {
554+
advanced_options->set_pressed_no_signal(true);
555+
advanced_options->set_tooltip_text(TTRC("Advanced settings are always shown when searching."));
556+
} else {
557+
advanced_options->set_pressed_no_signal(EDITOR_GET("_export_preset_advanced_mode"));
558+
advanced_options->set_tooltip_text("");
559+
}
560+
561+
const int current_preset = presets->get_current();
562+
if (current_preset >= 0 && current_preset < EditorExport::get_singleton()->get_export_preset_count()) {
563+
Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(current_preset);
564+
if (current.is_valid()) {
565+
current->set_options_search_active(search_active);
566+
}
567+
}
568+
}
569+
537570
void ProjectExportDialog::_runnable_pressed() {
538571
if (updating) {
539572
return;
@@ -1551,6 +1584,7 @@ ProjectExportDialog::ProjectExportDialog() {
15511584
set_title(TTRC("Export"));
15521585
set_flag(FLAG_MAXIMIZE_DISABLED, false);
15531586
set_clamp_to_embedder(true);
1587+
set_process_shortcut_input(true);
15541588

15551589
VBoxContainer *main_vb = memnew(VBoxContainer);
15561590
add_child(main_vb);
@@ -1662,12 +1696,27 @@ ProjectExportDialog::ProjectExportDialog() {
16621696

16631697
// Main preset parameters.
16641698

1699+
VBoxContainer *parameters_vb = memnew(VBoxContainer);
1700+
parameters_vb->set_name(TTRC("Options"));
1701+
parameters_vb->set_v_size_flags(Control::SIZE_EXPAND_FILL);
1702+
sections->add_child(parameters_vb);
1703+
1704+
options_filter = memnew(LineEdit);
1705+
options_filter->set_placeholder(TTRC("Filter Options"));
1706+
options_filter->set_accessibility_name(TTRC("Filter Options"));
1707+
options_filter->set_clear_button_enabled(true);
1708+
options_filter->set_virtual_keyboard_show_on_focus(false);
1709+
options_filter->set_h_size_flags(Control::SIZE_EXPAND_FILL);
1710+
options_filter->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_options_filter_changed));
1711+
parameters_vb->add_child(options_filter);
1712+
16651713
parameters = memnew(EditorInspector);
1666-
parameters->set_name(TTRC("Options"));
16671714
parameters->set_mark_unsaved(false);
16681715
parameters->set_v_size_flags(Control::SIZE_EXPAND_FILL);
16691716
parameters->set_use_doc_hints(true);
1670-
sections->add_child(parameters);
1717+
parameters->register_text_enter(options_filter);
1718+
parameters->set_use_filter(true);
1719+
parameters_vb->add_child(parameters);
16711720
parameters->connect("property_edited", callable_mp(this, &ProjectExportDialog::_update_parameters));
16721721
EditorExport::get_singleton()->connect("export_presets_updated", callable_mp(this, &ProjectExportDialog::_force_update_current_preset_parameters));
16731722

editor/export/project_export.h

Lines changed: 3 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;
@@ -142,6 +143,7 @@ class ProjectExportDialog : public ConfirmationDialog {
142143
bool exporting = false;
143144

144145
void _advanced_options_pressed();
146+
void _options_filter_changed(const String &p_filter);
145147
void _runnable_pressed();
146148
void _update_parameters(const String &p_edited_property);
147149
void _name_changed(const String &p_string);
@@ -231,6 +233,7 @@ class ProjectExportDialog : public ConfirmationDialog {
231233
protected:
232234
void _notification(int p_what);
233235
static void _bind_methods();
236+
virtual void shortcut_input(const Ref<InputEvent> &p_event) override;
234237

235238
public:
236239
void popup_export();

0 commit comments

Comments
 (0)