Skip to content

Commit

Permalink
Expose get_export_option_visibility to editor plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
m4gr3d committed Sep 13, 2024
1 parent 74de05a commit ecc6396
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 2 deletions.
10 changes: 10 additions & 0 deletions doc/classes/EditorExportPlugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,16 @@
Return a [PackedStringArray] of additional features this preset, for the given [param platform], should have.
</description>
</method>
<method name="_get_export_option_visibility" qualifiers="virtual const">
<return type="bool" />
<param index="0" name="platform" type="EditorExportPlatform" />
<param index="1" name="option" type="String" />
<param index="2" name="advanced_options_enabled" type="bool" />
<description>
[b]Optional.[/b]
Validates [param option] and returns visibility for the specified [param platform]. Default implementation return [code]true[/code] for all options.
</description>
</method>
<method name="_get_export_option_warning" qualifiers="virtual const">
<return type="String" />
<param index="0" name="platform" type="EditorExportPlatform" />
Expand Down
7 changes: 7 additions & 0 deletions editor/export/editor_export_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,12 @@ bool EditorExportPlugin::_should_update_export_options(const Ref<EditorExportPla
return ret;
}

bool EditorExportPlugin::_get_export_option_visibility(const Ref<EditorExportPlatform> &p_export_platform, const String &p_option_name, bool advanced_options_enabled) const {
bool ret = true;
GDVIRTUAL_CALL(_get_export_option_visibility, p_export_platform, p_option_name, advanced_options_enabled, ret);
return ret;
}

String EditorExportPlugin::_get_export_option_warning(const Ref<EditorExportPlatform> &p_export_platform, const String &p_option_name) const {
String ret;
GDVIRTUAL_CALL(_get_export_option_warning, p_export_platform, p_option_name, ret);
Expand Down Expand Up @@ -350,6 +356,7 @@ void EditorExportPlugin::_bind_methods() {
GDVIRTUAL_BIND(_get_export_options, "platform");
GDVIRTUAL_BIND(_get_export_options_overrides, "platform");
GDVIRTUAL_BIND(_should_update_export_options, "platform");
GDVIRTUAL_BIND(_get_export_option_visibility, "platform", "option", "advanced_options_enabled");
GDVIRTUAL_BIND(_get_export_option_warning, "platform", "option");

GDVIRTUAL_BIND(_get_export_features, "platform", "debug");
Expand Down
2 changes: 2 additions & 0 deletions editor/export/editor_export_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ class EditorExportPlugin : public RefCounted {
GDVIRTUAL1RC(TypedArray<Dictionary>, _get_export_options, const Ref<EditorExportPlatform> &);
GDVIRTUAL1RC(Dictionary, _get_export_options_overrides, const Ref<EditorExportPlatform> &);
GDVIRTUAL1RC(bool, _should_update_export_options, const Ref<EditorExportPlatform> &);
GDVIRTUAL3RC(bool, _get_export_option_visibility, const Ref<EditorExportPlatform> &, String, bool);
GDVIRTUAL2RC(String, _get_export_option_warning, const Ref<EditorExportPlatform> &, String);

GDVIRTUAL0RC(String, _get_name)
Expand Down Expand Up @@ -160,6 +161,7 @@ class EditorExportPlugin : public RefCounted {
virtual void _get_export_options(const Ref<EditorExportPlatform> &p_export_platform, List<EditorExportPlatform::ExportOption> *r_options) const;
virtual Dictionary _get_export_options_overrides(const Ref<EditorExportPlatform> &p_export_platform) const;
virtual bool _should_update_export_options(const Ref<EditorExportPlatform> &p_export_platform) const;
virtual bool _get_export_option_visibility(const Ref<EditorExportPlatform> &p_export_platform, const String &p_option_name, bool advanced_options_enabled) const;
virtual String _get_export_option_warning(const Ref<EditorExportPlatform> &p_export_platform, const String &p_option_name) const;

public:
Expand Down
27 changes: 25 additions & 2 deletions editor/export/editor_export_preset.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,9 +134,32 @@ String EditorExportPreset::_get_property_warning(const StringName &p_name) const
}

void EditorExportPreset::_get_property_list(List<PropertyInfo> *p_list) const {
bool advanced_options_enabled = are_advanced_options_enabled();

Check failure on line 137 in editor/export/editor_export_preset.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Editor w/ Mono (target=editor)

declaration of 'advanced_options_enabled' shadows a member of 'EditorExportPreset' [-Werror=shadow]

Check failure on line 137 in editor/export/editor_export_preset.cpp

View workflow job for this annotation

GitHub Actions / 🐧 Linux / Editor with doubles and GCC sanitizers (target=editor, tests=yes, dev_build=yes, scu_build=yes, precision=double, use_asan=yes, use_ubsan=yes, linker=gold)

declaration of 'advanced_options_enabled' shadows a member of 'EditorExportPreset' [-Werror=shadow]

Check failure on line 137 in editor/export/editor_export_preset.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Editor (target=editor, tests=yes)

the following warning is treated as an error

Check warning on line 137 in editor/export/editor_export_preset.cpp

View workflow job for this annotation

GitHub Actions / 🏁 Windows / Editor (target=editor, tests=yes)

declaration of 'advanced_options_enabled' hides class member

for (const KeyValue<StringName, PropertyInfo> &E : properties) {
if (!value_overrides.has(E.key) && platform->get_export_option_visibility(this, E.key)) {
p_list->push_back(E.value);
if (!value_overrides.has(E.key)) {
bool property_visible = platform->get_export_option_visibility(this, E.key);
if (!property_visible) {
continue;
}

// Get option visibility from editor export plugins.
Vector<Ref<EditorExportPlugin>> export_plugins = EditorExport::get_singleton()->get_export_plugins();
for (int i = 0; i < export_plugins.size(); i++) {
if (!export_plugins[i]->supports_platform(platform)) {
continue;
}

export_plugins.write[i]->set_export_preset(Ref<EditorExportPreset>(this));
property_visible = export_plugins[i]->_get_export_option_visibility(platform, E.key, advanced_options_enabled);
if (!property_visible) {
break;
}
}

if (property_visible) {
p_list->push_back(E.value);
}
}
}
}
Expand Down

0 comments on commit ecc6396

Please sign in to comment.