diff --git a/Core/GDCore/Project/BehaviorConfigurationContainer.h b/Core/GDCore/Project/BehaviorConfigurationContainer.h index 8d43dd12fb23..6d0632dbce04 100644 --- a/Core/GDCore/Project/BehaviorConfigurationContainer.h +++ b/Core/GDCore/Project/BehaviorConfigurationContainer.h @@ -106,6 +106,9 @@ class GD_CORE_API BehaviorConfigurationContainer { void RemoveProperty(const gd::String &name) { content.RemoveChild(name); content.RemoveAttribute(name); + auto uncapitalizedName = name.UncapitalizeFirstLetter(); + content.RemoveChild(uncapitalizedName); + content.RemoveAttribute(uncapitalizedName); }; /** @@ -114,7 +117,12 @@ class GD_CORE_API BehaviorConfigurationContainer { * \see gd::InitialInstance */ bool HasPropertyValue(const gd::String name) const { - return content.HasChild(name) || content.HasAttribute(name); + if (content.HasChild(name) || content.HasAttribute(name)) { + return true; + } + auto uncapitalizedName = name.UncapitalizeFirstLetter(); + return content.HasChild(uncapitalizedName) || + content.HasAttribute(uncapitalizedName); } /** diff --git a/Core/GDCore/String.cpp b/Core/GDCore/String.cpp index 8a6110dfde50..aabcb89e3ae5 100644 --- a/Core/GDCore/String.cpp +++ b/Core/GDCore/String.cpp @@ -413,6 +413,11 @@ String String::CapitalizeFirstLetter() const return size() < 1 ? *this : substr(0, 1).UpperCase() + substr(1); } +String String::UncapitalizeFirstLetter() const +{ + return size() < 1 ? *this : substr(0, 1).LowerCase() + substr(1); +} + String String::FindAndReplace(String search, String replacement, bool all) const { gd::String result(*this); diff --git a/Core/GDCore/String.h b/Core/GDCore/String.h index a27fa63019e8..b38c01f1c991 100644 --- a/Core/GDCore/String.h +++ b/Core/GDCore/String.h @@ -530,6 +530,11 @@ class GD_CORE_API String */ String CapitalizeFirstLetter() const; + /** + * \brief Returns the string with the first letter in lower case. + */ + String UncapitalizeFirstLetter() const; + /** * \brief Searches a string for a specified substring and returns a new string where all occurrences of this substring is replaced. * \param search The string that will be replaced by the new string. diff --git a/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/index.js b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/index.js index 8642527ff960..34c7f9838634 100644 --- a/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/index.js +++ b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/index.js @@ -125,7 +125,6 @@ type Props = {| historyHandler?: HistoryHandler, tileMapTileSelection: ?TileMapTileSelection, onSelectTileMapTile: (?TileMapTileSelection) => void, - canOverrideBehaviorProperties: boolean, |}; export const CompactInstancePropertiesEditor = ({ @@ -146,7 +145,6 @@ export const CompactInstancePropertiesEditor = ({ projectScopedContainersAccessor, tileMapTileSelection, onSelectTileMapTile, - canOverrideBehaviorProperties, }: Props): null | React.Node => { const forceUpdate = useForceUpdate(); const instance = instances[0]; @@ -159,6 +157,7 @@ export const CompactInstancePropertiesEditor = ({ * obviously plus instance-wise variables with same name). */ const shouldDisplayVariablesList = instances.length === 1; + const shouldDisplayBehaviorsList = instances.length === 1; const variablesContainer = shouldDisplayVariablesList ? exceptionallyGuardAgainstDeadObject(instance.getVariables()) : null; @@ -385,7 +384,7 @@ export const CompactInstancePropertiesEditor = ({ )} - {object && canOverrideBehaviorProperties ? ( + {object && shouldDisplayBehaviorsList ? ( Behaviors} isFolded={isBehaviorsFolded} diff --git a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor.js b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor.js index e2c8d26b75d3..c567f776abf1 100644 --- a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor.js +++ b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor.js @@ -151,6 +151,7 @@ export const CompactBehaviorPropertiesEditor = ({ layersContainer, visibility: 'All', showcaseNonDefaultValues: true, + hideResourceProperties: true, }); } const behaviorMetadataProperties = behaviorMetadata.getProperties(); diff --git a/newIDE/app/src/PropertiesEditor/PropertiesMapToSchema.js b/newIDE/app/src/PropertiesEditor/PropertiesMapToSchema.js index 4d9ab9262d20..cab0e3fee61e 100644 --- a/newIDE/app/src/PropertiesEditor/PropertiesMapToSchema.js +++ b/newIDE/app/src/PropertiesEditor/PropertiesMapToSchema.js @@ -39,7 +39,8 @@ const createField = ( defaultValue: string | null, layers: gdLayersContainer | null, object: ?gdObject, - showcaseNonDefaultValues: boolean + showcaseNonDefaultValues: boolean, + hideResourceProperties: boolean ): ?Field => { const propertyName = property.getLabel(); const getLabel = (instance: Instance) => { @@ -272,6 +273,9 @@ const createField = ( isHighlighted: isHighlightedForString, }; } else if (valueType === 'resource') { + if (hideResourceProperties) { + return null; + } // Resource is a "string" (with a selector in the UI) const extraInfos = property.getExtraInfo().toJSArray(); // $FlowFixMe[incompatible-type] - assume the passed resource kind is always valid. @@ -522,6 +526,7 @@ type CommonProps = {| visibility?: 'All' | 'Basic' | 'Advanced' | 'Deprecated' | 'Basic-Quick', quickCustomizationVisibilities?: gdQuickCustomizationVisibilitiesContainer, showcaseNonDefaultValues?: boolean, + hideResourceProperties?: boolean, |}; export const effectPropertiesMapToSchema = ({ @@ -529,7 +534,7 @@ export const effectPropertiesMapToSchema = ({ object, visibility = 'All', quickCustomizationVisibilities, - showcaseNonDefaultValues, + hideResourceProperties, }: { ...CommonProps, defaultValueProperties: gdMapStringPropertyDescriptor, @@ -541,7 +546,7 @@ export const effectPropertiesMapToSchema = ({ layersContainer: null, visibility, quickCustomizationVisibilities, - showcaseNonDefaultValues, + hideResourceProperties, getNumberValue: (instance: Instance, propertyName: string): number => instance.hasDoubleParameter(propertyName) ? instance.getDoubleParameter(propertyName) @@ -593,6 +598,7 @@ const propertiesMapToSchema = ({ visibility = 'All', quickCustomizationVisibilities, showcaseNonDefaultValues, + hideResourceProperties, }: { ...CommonProps, getPropertyValue: (instance: Instance, propertyName: string) => string, @@ -612,6 +618,7 @@ const propertiesMapToSchema = ({ visibility, quickCustomizationVisibilities, showcaseNonDefaultValues, + hideResourceProperties, getNumberValue: (instance: Instance, propertyName: string): number => { // Consider a missing value as 0 to avoid propagating NaN. return parseFloat(getPropertyValue(instance, propertyName)) || 0; @@ -642,6 +649,7 @@ const adaptablePropertiesMapToSchema = ({ visibility = 'All', quickCustomizationVisibilities, showcaseNonDefaultValues, + hideResourceProperties, getNumberValue, getStringValue, getBooleanValue, @@ -776,7 +784,8 @@ const adaptablePropertiesMapToSchema = ({ rowPropertyDefaultValue, layersContainer, object, - !!showcaseNonDefaultValues + !!showcaseNonDefaultValues, + !!hideResourceProperties ); if (field) { @@ -815,7 +824,8 @@ const adaptablePropertiesMapToSchema = ({ : null, layersContainer, object, - !!showcaseNonDefaultValues + !!showcaseNonDefaultValues, + !!hideResourceProperties ); } if (field) { diff --git a/newIDE/app/src/SceneEditor/InstanceOrObjectPropertiesEditorContainer.js b/newIDE/app/src/SceneEditor/InstanceOrObjectPropertiesEditorContainer.js index c2f53313fa76..3cefa370e364 100644 --- a/newIDE/app/src/SceneEditor/InstanceOrObjectPropertiesEditorContainer.js +++ b/newIDE/app/src/SceneEditor/InstanceOrObjectPropertiesEditorContainer.js @@ -213,7 +213,6 @@ export const InstanceOrObjectPropertiesEditorContainer: React.ComponentType<{ resourceManagementProps={resourceManagementProps} unsavedChanges={unsavedChanges} i18n={i18n} - canOverrideBehaviorProperties={!!eventsFunctionsExtension} /> ) : !!objects.length && lastSelectionType === 'object' ? ( ( )} tileMapTileSelection={null} onSelectTileMapTile={() => {}} - canOverrideBehaviorProperties={true} resourceManagementProps={fakeResourceManagementProps} /> @@ -74,7 +73,6 @@ export const InstanceCube3d = (): React.Node => ( )} tileMapTileSelection={null} onSelectTileMapTile={() => {}} - canOverrideBehaviorProperties={true} resourceManagementProps={fakeResourceManagementProps} /> @@ -106,7 +104,6 @@ export const InstanceTextInput = (): React.Node => ( )} tileMapTileSelection={null} onSelectTileMapTile={() => {}} - canOverrideBehaviorProperties={true} resourceManagementProps={fakeResourceManagementProps} />