diff --git a/newIDE/app/src/BehaviorsEditor/Editors/AnchorBehaviorEditor.js b/newIDE/app/src/BehaviorsEditor/Editors/AnchorBehaviorEditor.js
index e59b16b08156..57f25d152047 100644
--- a/newIDE/app/src/BehaviorsEditor/Editors/AnchorBehaviorEditor.js
+++ b/newIDE/app/src/BehaviorsEditor/Editors/AnchorBehaviorEditor.js
@@ -19,10 +19,6 @@ import useForceUpdate from '../../Utils/UseForceUpdate';
import { ColumnStackLayout } from '../../UI/Layout';
import { Line } from '../../UI/Grid';
import Text from '../../UI/Text';
-import {
- getPropertyValue,
- updateProperty,
-} from '../../ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor';
import CompactToggleButtons, {
type CompactToggleButton,
} from '../../UI/CompactToggleButtons';
@@ -307,16 +303,20 @@ const AnchorBehaviorEditor = ({
const behavior = behaviors[0];
const forceUpdate = useForceUpdate();
const _getPropertyValue = React.useCallback(
- (propertyName: string) => getPropertyValue(behavior, propertyName, null),
+ (propertyName: string) =>
+ behavior
+ .getProperties()
+ .get(propertyName)
+ .getValue(),
[behavior]
);
const _updateProperty = React.useCallback(
(propertyName: string, value: string) => {
- updateProperty(project, behavior, propertyName, value, null);
+ behavior.updateProperty(propertyName, value);
forceUpdate();
onBehaviorUpdated();
},
- [behavior, forceUpdate, onBehaviorUpdated, project]
+ [behavior, forceUpdate, onBehaviorUpdated]
);
const _onBehaviorUpdated = React.useCallback(
() => {
diff --git a/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactAnchorInstanceBehaviorEditor.js b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactAnchorInstanceBehaviorEditor.js
new file mode 100644
index 000000000000..8a129bbfb2b8
--- /dev/null
+++ b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactAnchorInstanceBehaviorEditor.js
@@ -0,0 +1,89 @@
+// @flow
+import * as React from 'react';
+import { type CompactInstanceBehaviorPropertiesEditorProps } from './CompactInstanceBehaviorPropertiesEditorProps.flow';
+import {
+ CompactInstanceBehaviorPropertiesEditor,
+ getPropertyValue,
+ updateProperty,
+} from './CompactInstanceBehaviorPropertiesEditor';
+import useForceUpdate from '../../Utils/UseForceUpdate';
+import { ColumnStackLayout } from '../../UI/Layout';
+import {
+ HorizontalAnchorButtonGroup,
+ VerticalAnchorButtonGroup,
+ getBasicHorizontalAnchor,
+ getBasicVerticalAnchor,
+} from '../../BehaviorsEditor/Editors/AnchorBehaviorEditor';
+
+const CompactInstanceAnchorBehaviorEditor = ({
+ project,
+ object,
+ layersContainer,
+ behaviorMetadata,
+ instancesAndBehaviors,
+ onBehaviorUpdated,
+ resourceManagementProps,
+}: CompactInstanceBehaviorPropertiesEditorProps): React.Node => {
+ const forceUpdate = useForceUpdate();
+ const _getPropertyValue = (propertyName: string) => {
+ let commonValue = null;
+ for (const { initialInstance, behavior } of instancesAndBehaviors) {
+ const value = getPropertyValue(behavior, propertyName, initialInstance);
+ if (commonValue === null) {
+ commonValue = value;
+ }
+ if (value !== commonValue) {
+ return null;
+ }
+ }
+ return commonValue;
+ };
+ const _updateProperty = (propertyName: string, value: string) => {
+ for (const { initialInstance, behavior } of instancesAndBehaviors) {
+ updateProperty(project, behavior, propertyName, value, initialInstance);
+ }
+ forceUpdate();
+ onBehaviorUpdated();
+ };
+ const _onBehaviorUpdated = React.useCallback(
+ () => {
+ forceUpdate();
+ onBehaviorUpdated();
+ },
+ [forceUpdate, onBehaviorUpdated]
+ );
+
+ const horizontalBasicAnchor = getBasicHorizontalAnchor(_getPropertyValue);
+ const verticalBasicAnchor = getBasicVerticalAnchor(_getPropertyValue);
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default CompactInstanceAnchorBehaviorEditor;
diff --git a/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorPropertiesEditor.js b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorPropertiesEditor.js
new file mode 100644
index 000000000000..faf0dfa0bc85
--- /dev/null
+++ b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorPropertiesEditor.js
@@ -0,0 +1,188 @@
+// @flow
+import * as React from 'react';
+import { ColumnStackLayout } from '../../UI/Layout';
+import { Trans } from '@lingui/macro';
+import {
+ type Schema,
+ type ActionButton,
+} from '../../PropertiesEditor/PropertiesEditorSchema';
+import ShareExternal from '../../UI/CustomSvgIcons/ShareExternal';
+import { CompactPropertiesEditorByVisibility } from '../../CompactPropertiesEditor/CompactPropertiesEditorByVisibility';
+import propertiesMapToSchema from '../../PropertiesEditor/PropertiesMapToSchema';
+import { useForceRecompute } from '../../Utils/UseForceUpdate';
+import { type CompactInstanceBehaviorPropertiesEditorProps } from './CompactInstanceBehaviorPropertiesEditorProps.flow';
+
+export const styles = {
+ icon: {
+ fontSize: 18,
+ },
+};
+
+export const getSchemaWithOpenFullEditorButton = ({
+ schema,
+ fullEditorLabel,
+ behavior,
+ onOpenFullEditor,
+}: {|
+ schema: Schema,
+ fullEditorLabel: ?string,
+ behavior: gdBehavior,
+ onOpenFullEditor: () => void,
+|}): Schema => {
+ if (!fullEditorLabel) return schema;
+
+ const actionButton: ActionButton = {
+ label: fullEditorLabel,
+ disabled: 'onValuesDifferent',
+ nonFieldType: 'button',
+ showRightIcon: true,
+ getIcon: style => ,
+ getValue: behavior => behavior.getName(),
+ onClick: behavior => onOpenFullEditor(),
+ };
+
+ let added = false;
+ schema.forEach(field => {
+ if (field.children && field.name === '') {
+ field.children.push(actionButton);
+ added = true;
+ }
+ });
+
+ if (!added) schema.push(actionButton);
+
+ return schema;
+};
+
+export const getPropertyValue = (
+ behavior: gdBehavior,
+ propertyName: string,
+ initialInstance: gdInitialInstance
+): string => {
+ const behaviorName = behavior.getName();
+ if (
+ initialInstance.hasBehaviorOverridingNamed(behaviorName) &&
+ initialInstance
+ .getBehaviorOverriding(behaviorName)
+ .hasPropertyValue(propertyName)
+ ) {
+ const behaviorOverriding = initialInstance.getBehaviorOverriding(
+ behaviorName
+ );
+ return behaviorOverriding
+ .getProperties()
+ .get(propertyName)
+ .getValue();
+ }
+ return behavior
+ .getProperties()
+ .get(propertyName)
+ .getValue();
+};
+
+export const updateProperty = (
+ project: gdProject,
+ behavior: gdBehavior,
+ propertyName: string,
+ value: string,
+ initialInstance: gdInitialInstance
+): void => {
+ const behaviorName = behavior.getName();
+ const behaviorOverriding = initialInstance.hasBehaviorOverridingNamed(
+ behaviorName
+ )
+ ? initialInstance.getBehaviorOverriding(behaviorName)
+ : initialInstance.addNewBehaviorOverriding(
+ project,
+ behavior.getTypeName(),
+ behaviorName
+ );
+ const behaviorProperties = behavior.getProperties();
+ const inheritedValue = behaviorProperties.has(propertyName)
+ ? behaviorProperties.get(propertyName).getValue()
+ : null;
+ if (inheritedValue === value) {
+ behaviorOverriding.removeProperty(propertyName);
+ } else {
+ behaviorOverriding.updateProperty(propertyName, value);
+ }
+};
+
+export const CompactInstanceBehaviorPropertiesEditor = ({
+ project,
+ behaviorMetadata,
+ object,
+ layersContainer,
+ instancesAndBehaviors,
+ onBehaviorUpdated,
+ resourceManagementProps,
+}: CompactInstanceBehaviorPropertiesEditorProps): React.Node => {
+ const [schemaRecomputeTrigger, forceRecomputeSchema] = useForceRecompute();
+
+ const propertiesSchema: Schema = React.useMemo(
+ () => {
+ if (schemaRecomputeTrigger) {
+ // schemaRecomputeTrigger allows to invalidate the schema when required.
+ }
+ if (instancesAndBehaviors.length === 0) {
+ return [];
+ }
+ const behaviorProperties = instancesAndBehaviors[0].behavior.getProperties();
+ return propertiesMapToSchema({
+ properties: behaviorProperties,
+ defaultValueProperties: behaviorProperties,
+ getPropertyValue: (
+ {
+ behavior,
+ initialInstance,
+ }: { behavior: gdBehavior, initialInstance: gdInitialInstance },
+ propertyName
+ ) => getPropertyValue(behavior, propertyName, initialInstance),
+ onUpdateProperty: (
+ {
+ behavior,
+ initialInstance,
+ }: { behavior: gdBehavior, initialInstance: gdInitialInstance },
+ propertyName,
+ value
+ ) =>
+ updateProperty(
+ project,
+ behavior,
+ propertyName,
+ value,
+ initialInstance
+ ),
+ object,
+ layersContainer,
+ visibility: 'All',
+ showcaseNonDefaultValues: true,
+ hideResourceProperties: true,
+ shouldDisabledFieldsWithMixedValues: false,
+ });
+ },
+ [
+ schemaRecomputeTrigger,
+ instancesAndBehaviors,
+ object,
+ layersContainer,
+ project,
+ ]
+ );
+
+ return (
+
+ Nothing to configure for this behavior.}
+ customizeBasicSchema={null}
+ onRefreshAllFields={forceRecomputeSchema}
+ />
+
+ );
+};
diff --git a/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorPropertiesEditorProps.flow.js b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorPropertiesEditorProps.flow.js
new file mode 100644
index 000000000000..556a62de0434
--- /dev/null
+++ b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorPropertiesEditorProps.flow.js
@@ -0,0 +1,19 @@
+// @flow
+import { type ResourceManagementProps } from '../../ResourcesList/ResourceSource';
+
+/**
+ * The props given to any behavior editor
+ */
+export type CompactInstanceBehaviorPropertiesEditorProps = {|
+ project: gdProject,
+ behaviorMetadata: gdBehaviorMetadata,
+ object: gdObject | null,
+ layersContainer: gdLayersContainer,
+ instancesAndBehaviors: Array<{
+ initialInstance: gdInitialInstance,
+ behavior: gdBehavior,
+ }>,
+ onBehaviorUpdated: () => void,
+ resourceManagementProps: ResourceManagementProps,
+ isAdvancedSectionInitiallyUncollapsed?: boolean,
+|};
diff --git a/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorsEditorService.js b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorsEditorService.js
new file mode 100644
index 000000000000..26641d1091bc
--- /dev/null
+++ b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/CompactInstanceBehaviorsEditorService.js
@@ -0,0 +1,27 @@
+// @flow
+import { CompactInstanceBehaviorPropertiesEditor } from './CompactInstanceBehaviorPropertiesEditor';
+import { type CompactInstanceBehaviorPropertiesEditorProps } from './CompactInstanceBehaviorPropertiesEditorProps.flow';
+import CompactInstanceAnchorBehaviorEditor from './CompactAnchorInstanceBehaviorEditor';
+
+/**
+ * A service returning editor components for each behavior type.
+ */
+const CompactBehaviorsEditorService = {
+ getEditor(
+ behaviorType: string
+ ): React.ComponentType {
+ // $FlowFixMe[object-this-reference]
+ if (!this.components[behaviorType]) {
+ return CompactInstanceBehaviorPropertiesEditor; // Default properties editor
+ }
+ // $FlowFixMe[object-this-reference]
+ return this.components[behaviorType].component; // Custom behavior editor
+ },
+ components: {
+ 'AnchorBehavior::AnchorBehavior': {
+ component: CompactInstanceAnchorBehaviorEditor,
+ },
+ },
+};
+
+export default CompactBehaviorsEditorService;
diff --git a/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/index.js b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/index.js
index 5a46e66b05a9..c30d8139fbd8 100644
--- a/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/index.js
+++ b/newIDE/app/src/InstancesEditor/CompactInstancePropertiesEditor/index.js
@@ -42,8 +42,9 @@ import Window from '../../Utils/Window';
import { type ResourceManagementProps } from '../../ResourcesList/ResourceSource';
import { usePersistedScrollPosition } from '../../Utils/UsePersistedScrollPosition';
import EmptyMessage from '../../UI/EmptyMessage';
-import CompactBehaviorsEditorService from '../../ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorsEditorService';
+import CompactInstanceBehaviorsEditorService from './CompactInstanceBehaviorsEditorService';
import { exceptionallyGuardAgainstDeadObject } from '../../Utils/IsNullPtr';
+import { getAllVisibleBehaviorNames } from '../../Utils/Behavior';
const gd: libGDevelop = global.gd;
@@ -157,7 +158,6 @@ 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;
@@ -200,41 +200,45 @@ export const CompactInstancePropertiesEditor = ({
const { object, instanceSchema, allVisibleBehaviors } = React.useMemo<{|
object?: gdObject,
instanceSchema?: Schema,
- allVisibleBehaviors: Array,
+ allVisibleBehaviors: Array | null,
|}>(
() => {
if (!instance)
return {
object: undefined,
instanceSchema: undefined,
- allVisibleBehaviors: [],
+ allVisibleBehaviors: null,
};
- const associatedObjectName = instance.getObjectName();
- const object = getObjectByName(
- globalObjectsContainer,
- objectsContainer,
- associatedObjectName
- );
- const properties = instance.getCustomProperties(
- globalObjectsContainer || objectsContainer,
- objectsContainer
- );
- if (!object)
+ const objectsMap = new Map();
+ for (const instance of instances) {
+ const associatedObjectName = instance.getObjectName();
+ if (objectsMap.has(associatedObjectName)) {
+ continue;
+ }
+ const object = getObjectByName(
+ globalObjectsContainer,
+ objectsContainer,
+ associatedObjectName
+ );
+ if (object) {
+ objectsMap.set(associatedObjectName, object);
+ }
+ }
+ const objects = [...objectsMap.values()];
+ const object = objects[0];
+ if (!object) {
return {
object: undefined,
instanceSchema: undefined,
- allVisibleBehaviors: [],
+ allVisibleBehaviors: null,
};
+ }
- const allVisibleBehaviors = object
- .getAllBehaviorNames()
- .toJSArray()
- .map(behaviorName => object.getBehavior(behaviorName))
- .filter(behavior => !behavior.isDefaultBehavior())
- // We don't keep the behaviors directly because they may be destroyed
- // if the object is rebuilt from a serialization.
- .map(behavior => behavior.getName());
+ const properties = instance.getCustomProperties(
+ globalObjectsContainer || objectsContainer,
+ objectsContainer
+ );
const objectMetadata = gd.MetadataProvider.getObjectMetadata(
project.getCurrentPlatform(),
@@ -291,7 +295,7 @@ export const CompactInstancePropertiesEditor = ({
return {
object,
instanceSchema,
- allVisibleBehaviors,
+ allVisibleBehaviors: getAllVisibleBehaviorNames(objects),
};
},
[
@@ -299,16 +303,19 @@ export const CompactInstancePropertiesEditor = ({
globalObjectsContainer,
objectsContainer,
project,
- i18n,
- forceUpdate,
layersContainer,
+ i18n,
onGetInstanceSize,
editObjectInPropertiesPanel,
+ forceUpdate,
+ instances,
]
);
const [isBehaviorsFolded, setIsBehaviorsFolded] = React.useState(
- object ? !instance.hasAnyOverriddenProperty(object) : true
+ object
+ ? instances.every(instance => !instance.hasAnyOverriddenProperty(object))
+ : true
);
const shouldDisplayTileSetVisualizer =
@@ -384,7 +391,7 @@ export const CompactInstancePropertiesEditor = ({
>
)}
- {object && shouldDisplayBehaviorsList ? (
+ {allVisibleBehaviors ? (
Behaviors}
isFolded={isBehaviorsFolded}
@@ -411,28 +418,41 @@ export const CompactInstancePropertiesEditor = ({
if (!object.hasBehaviorNamed(behaviorName)) {
return null;
}
- const behavior = object.getBehavior(behaviorName);
- const behaviorTypeName = behavior.getTypeName();
+ const behaviorTypeName = object
+ .getBehavior(behaviorName)
+ .getTypeName();
const behaviorMetadata = gd.MetadataProvider.getBehaviorMetadata(
gd.JsPlatform.get(),
behaviorTypeName
);
- const behaviorOverriding = instance.hasBehaviorOverridingNamed(
- behaviorName
- )
- ? instance.getBehaviorOverriding(behaviorName)
- : null;
const iconUrl = behaviorMetadata.getIconFilename();
- const CompactBehaviorComponent = CompactBehaviorsEditorService.getEditor(
+ const CompactInstanceBehaviorComponent = CompactInstanceBehaviorsEditorService.getEditor(
behaviorTypeName
);
+ const instancesAndBehaviors = instances
+ .map(initialInstance => {
+ const object = getObjectByName(
+ globalObjectsContainer,
+ objectsContainer,
+ initialInstance.getObjectName()
+ );
+ if (!object || !object.hasBehaviorNamed(behaviorName)) {
+ return null;
+ }
+ return {
+ initialInstance,
+ behavior: object.getBehavior(behaviorName),
+ };
+ })
+ .filter(Boolean);
+ if (instancesAndBehaviors.length === 0) {
+ return null;
+ }
return (
(
@@ -443,29 +463,32 @@ export const CompactInstancePropertiesEditor = ({
)
: () => (
- {
- if (
- instance.hasBehaviorOverridingNamed(
- behaviorName
- ) &&
- !instance.hasAnyOverriddenPropertyForBehavior(
- behavior
- )
- ) {
- instance.removeBehaviorOverriding(
- behaviorName
- );
- // Update the view to stop using
- // the removed behavior overriding.
- forceUpdate();
+ for (const {
+ initialInstance,
+ behavior,
+ } of instancesAndBehaviors) {
+ if (
+ initialInstance.hasBehaviorOverridingNamed(
+ behaviorName
+ ) &&
+ !initialInstance.hasAnyOverriddenPropertyForBehavior(
+ behavior
+ )
+ ) {
+ initialInstance.removeBehaviorOverriding(
+ behaviorName
+ );
+ // Update the view to stop using
+ // the removed behavior overriding.
+ forceUpdate();
+ }
}
}}
resourceManagementProps={
@@ -474,11 +497,12 @@ export const CompactInstancePropertiesEditor = ({
/>
)
}
- isInitiallyFolded={
- !instance.hasAnyOverriddenPropertyForBehavior(
- behavior
- )
- }
+ isInitiallyFolded={instancesAndBehaviors.every(
+ ({ initialInstance, behavior }) =>
+ !initialInstance.hasAnyOverriddenPropertyForBehavior(
+ behavior
+ )
+ )}
titleIcon={
iconUrl ? (
) : null
}
- title={behavior.getName()}
+ title={behaviorName}
/>
);
})}
diff --git a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactAnchorBehaviorEditor.js b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactAnchorBehaviorEditor.js
index 8256f0da7d81..02defd63d14f 100644
--- a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactAnchorBehaviorEditor.js
+++ b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactAnchorBehaviorEditor.js
@@ -1,11 +1,7 @@
// @flow
import * as React from 'react';
import { type CompactBehaviorPropertiesEditorProps } from './CompactBehaviorPropertiesEditorProps.flow';
-import {
- CompactBehaviorPropertiesEditor,
- getPropertyValue,
- updateProperty,
-} from './CompactBehaviorPropertiesEditor';
+import { CompactBehaviorPropertiesEditor } from './CompactBehaviorPropertiesEditor';
import useForceUpdate from '../../Utils/UseForceUpdate';
import { ColumnStackLayout } from '../../UI/Layout';
import {
@@ -21,8 +17,6 @@ const CompactAnchorBehaviorEditor = ({
object,
layersContainer,
behaviorMetadata,
- behaviorOverriding,
- initialInstance,
onOpenFullEditor,
onBehaviorUpdated,
resourceManagementProps,
@@ -31,7 +25,10 @@ const CompactAnchorBehaviorEditor = ({
const _getPropertyValue = (propertyName: string) => {
let commonValue = null;
for (const behavior of behaviors) {
- const value = getPropertyValue(behavior, propertyName, initialInstance);
+ const value = behavior
+ .getProperties()
+ .get(propertyName)
+ .getValue();
if (commonValue === null) {
commonValue = value;
}
@@ -43,7 +40,7 @@ const CompactAnchorBehaviorEditor = ({
};
const _updateProperty = (propertyName: string, value: string) => {
for (const behavior of behaviors) {
- updateProperty(project, behavior, propertyName, value, initialInstance);
+ behavior.updateProperty(propertyName, value);
}
forceUpdate();
onBehaviorUpdated();
@@ -77,8 +74,6 @@ const CompactAnchorBehaviorEditor = ({
layersContainer={layersContainer}
behaviors={behaviors}
behaviorMetadata={behaviorMetadata}
- behaviorOverriding={behaviorOverriding}
- initialInstance={initialInstance}
onOpenFullEditor={onOpenFullEditor}
onBehaviorUpdated={_onBehaviorUpdated}
resourceManagementProps={resourceManagementProps}
diff --git a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor.js b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor.js
index 85edea6bcd0a..3a2294fdff0e 100644
--- a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor.js
+++ b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditor.js
@@ -54,73 +54,12 @@ export const getSchemaWithOpenFullEditorButton = ({
return schema;
};
-export const getPropertyValue = (
- behavior: gdBehavior,
- propertyName: string,
- initialInstance: gdInitialInstance | null
-): string => {
- const behaviorName = behavior.getName();
- if (
- initialInstance &&
- initialInstance.hasBehaviorOverridingNamed(behaviorName) &&
- initialInstance
- .getBehaviorOverriding(behaviorName)
- .hasPropertyValue(propertyName)
- ) {
- const behaviorOverriding = initialInstance.getBehaviorOverriding(
- behaviorName
- );
- return behaviorOverriding
- .getProperties()
- .get(propertyName)
- .getValue();
- }
- return behavior
- .getProperties()
- .get(propertyName)
- .getValue();
-};
-
-export const updateProperty = (
- project: gdProject,
- behavior: gdBehavior,
- propertyName: string,
- value: string,
- initialInstance: gdInitialInstance | null
-): void => {
- if (initialInstance) {
- const behaviorName = behavior.getName();
- const behaviorOverriding = initialInstance.hasBehaviorOverridingNamed(
- behaviorName
- )
- ? initialInstance.getBehaviorOverriding(behaviorName)
- : initialInstance.addNewBehaviorOverriding(
- project,
- behavior.getTypeName(),
- behaviorName
- );
- const behaviorProperties = behavior.getProperties();
- const inheritedValue = behaviorProperties.has(propertyName)
- ? behaviorProperties.get(propertyName).getValue()
- : null;
- if (inheritedValue === value) {
- behaviorOverriding.removeProperty(propertyName);
- } else {
- behaviorOverriding.updateProperty(propertyName, value);
- }
- } else {
- behavior.updateProperty(propertyName, value);
- }
-};
-
export const CompactBehaviorPropertiesEditor = ({
project,
behaviorMetadata,
behaviors,
object,
layersContainer,
- behaviorOverriding,
- initialInstance,
onOpenFullEditor,
onBehaviorUpdated,
resourceManagementProps,
@@ -132,30 +71,6 @@ export const CompactBehaviorPropertiesEditor = ({
if (schemaRecomputeTrigger) {
// schemaRecomputeTrigger allows to invalidate the schema when required.
}
- if (initialInstance) {
- const behavior = behaviors[0];
- const behaviorProperties = behavior.getProperties();
- return propertiesMapToSchema({
- properties: behaviorProperties,
- defaultValueProperties: behaviorProperties,
- getPropertyValue: (instance: gdBehavior, propertyName) =>
- getPropertyValue(instance, propertyName, initialInstance),
- onUpdateProperty: (instance, propertyName, value) =>
- updateProperty(
- project,
- instance,
- propertyName,
- value,
- initialInstance
- ),
- object,
- layersContainer,
- visibility: 'All',
- showcaseNonDefaultValues: true,
- hideResourceProperties: true,
- shouldDisabledFieldsWithMixedValues: false,
- });
- }
const behaviorMetadataProperties = behaviorMetadata.getProperties();
return propertiesMapToSchema({
properties: behaviorMetadataProperties,
@@ -174,15 +89,7 @@ export const CompactBehaviorPropertiesEditor = ({
shouldDisabledFieldsWithMixedValues: true,
});
},
- [
- schemaRecomputeTrigger,
- initialInstance,
- behaviorMetadata,
- object,
- layersContainer,
- behaviors,
- project,
- ]
+ [schemaRecomputeTrigger, behaviorMetadata, object, layersContainer]
);
return (
diff --git a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditorProps.flow.js b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditorProps.flow.js
index 0af2d759ba69..13c69e81f0b4 100644
--- a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditorProps.flow.js
+++ b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/CompactBehaviorPropertiesEditorProps.flow.js
@@ -10,8 +10,6 @@ export type CompactBehaviorPropertiesEditorProps = {|
behaviors: Array,
object: gdObject | null,
layersContainer: gdLayersContainer,
- behaviorOverriding: gdBehavior | null,
- initialInstance: gdInitialInstance | null,
onOpenFullEditor?: () => void,
onBehaviorUpdated: () => void,
resourceManagementProps: ResourceManagementProps,
diff --git a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/index.js b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/index.js
index 6da99c9a7a41..b3aa34ee8bb9 100644
--- a/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/index.js
+++ b/newIDE/app/src/ObjectEditor/CompactObjectPropertiesEditor/index.js
@@ -848,8 +848,6 @@ export const CompactObjectPropertiesEditor = ({
project={project}
behaviorMetadata={behaviorMetadata}
behaviors={[behavior]}
- behaviorOverriding={null}
- initialInstance={null}
object={object}
layersContainer={layersContainer}
onBehaviorUpdated={() => {}}
diff --git a/newIDE/app/src/ObjectGroupEditor/CompactObjectGroupPropertiesEditor.js b/newIDE/app/src/ObjectGroupEditor/CompactObjectGroupPropertiesEditor.js
index dc7d8d89c861..4937440a18eb 100644
--- a/newIDE/app/src/ObjectGroupEditor/CompactObjectGroupPropertiesEditor.js
+++ b/newIDE/app/src/ObjectGroupEditor/CompactObjectGroupPropertiesEditor.js
@@ -370,8 +370,6 @@ export const CompactObjectGroupPropertiesEditor = ({
project={project}
behaviorMetadata={behaviorMetadata}
behaviors={behaviors}
- behaviorOverriding={null}
- initialInstance={null}
object={null}
layersContainer={layersContainer}
onBehaviorUpdated={() => {}}
diff --git a/newIDE/app/src/stories/componentStories/ObjectEditor/CompactAnchorBehaviorEditor.stories.js b/newIDE/app/src/stories/componentStories/ObjectEditor/CompactAnchorBehaviorEditor.stories.js
index e25dbbaa9c9a..e49589fd90a7 100644
--- a/newIDE/app/src/stories/componentStories/ObjectEditor/CompactAnchorBehaviorEditor.stories.js
+++ b/newIDE/app/src/stories/componentStories/ObjectEditor/CompactAnchorBehaviorEditor.stories.js
@@ -34,8 +34,6 @@ export const Default = (): React.Node => {
behaviors={[anchorBehavior]}
object={spriteObjectWithBehaviors}
behaviorMetadata={behaviorMetadata}
- behaviorOverriding={null}
- initialInstance={null}
onOpenFullEditor={action('onOpenFullEditor')}
onBehaviorUpdated={action('onBehaviorUpdated')}
resourceManagementProps={fakeResourceManagementProps}