Skip to content

Commit f4c3dea

Browse files
committed
Open the variant tab only.
1 parent ca0db73 commit f4c3dea

File tree

17 files changed

+157
-44
lines changed

17 files changed

+157
-44
lines changed

newIDE/app/src/MainFrame/EditorContainers/BaseEditor.js

+4
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,10 @@ export type RenderEditorContainerProps = {|
151151
eventsBasedObjectName: string
152152
) => void,
153153
onOpenEventBasedObjectEditor: (
154+
extensionName: string,
155+
eventsBasedObjectName: string
156+
) => void,
157+
onOpenEventBasedObjectVariantEditor: (
154158
extensionName: string,
155159
eventsBasedObjectName: string,
156160
variantName: string

newIDE/app/src/MainFrame/EditorContainers/CustomObjectEditorContainer.js

+3
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ export class CustomObjectEditorContainer extends React.Component<RenderEditorCon
245245
}
246246
onExtractAsEventBasedObject={this.props.onExtractAsEventBasedObject}
247247
onOpenEventBasedObjectEditor={this.props.onOpenEventBasedObjectEditor}
248+
onOpenEventBasedObjectVariantEditor={
249+
this.props.onOpenEventBasedObjectVariantEditor
250+
}
248251
onExtensionInstalled={this.props.onExtensionInstalled}
249252
onDeleteEventsBasedObjectVariant={
250253
this.props.onDeleteEventsBasedObjectVariant

newIDE/app/src/MainFrame/EditorContainers/ExternalLayoutEditorContainer.js

+3
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,9 @@ export class ExternalLayoutEditorContainer extends React.Component<
260260
onOpenEventBasedObjectEditor={
261261
this.props.onOpenEventBasedObjectEditor
262262
}
263+
onOpenEventBasedObjectVariantEditor={
264+
this.props.onOpenEventBasedObjectVariantEditor
265+
}
263266
onObjectEdited={objectWithContext =>
264267
this.props.onSceneObjectEdited(layout, objectWithContext)
265268
}

newIDE/app/src/MainFrame/EditorContainers/SceneEditorContainer.js

+3
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ export class SceneEditorContainer extends React.Component<RenderEditorContainerP
150150
onExtractAsExternalLayout={this.props.onExtractAsExternalLayout}
151151
onExtractAsEventBasedObject={this.props.onExtractAsEventBasedObject}
152152
onOpenEventBasedObjectEditor={this.props.onOpenEventBasedObjectEditor}
153+
onOpenEventBasedObjectVariantEditor={
154+
this.props.onOpenEventBasedObjectVariantEditor
155+
}
153156
onExtensionInstalled={this.props.onExtensionInstalled}
154157
onDeleteEventsBasedObjectVariant={
155158
this.props.onDeleteEventsBasedObjectVariant

newIDE/app/src/MainFrame/index.js

+32-5
Original file line numberDiff line numberDiff line change
@@ -2225,16 +2225,43 @@ const MainFrame = (props: Props) => {
22252225
22262226
const onOpenEventBasedObjectEditor = (
22272227
extensionName: string,
2228-
eventsBasedObjectName: string,
2229-
variantName: string
2228+
eventsBasedObjectName: string
22302229
) => {
2231-
if (!currentProject) return;
2230+
if (
2231+
!currentProject ||
2232+
!currentProject.hasEventsFunctionsExtensionNamed(extensionName)
2233+
) {
2234+
return;
2235+
}
22322236
openEventsFunctionsExtension(
22332237
extensionName,
22342238
null,
22352239
null,
22362240
eventsBasedObjectName
22372241
);
2242+
const eventsFunctionsExtension = currentProject.getEventsFunctionsExtension(
2243+
extensionName
2244+
);
2245+
const eventsBasedObjects = eventsFunctionsExtension.getEventsBasedObjects();
2246+
if (!eventsBasedObjects.has(eventsBasedObjectName)) {
2247+
return;
2248+
}
2249+
const eventsBasedObject = eventsBasedObjects.get(eventsBasedObjectName);
2250+
openCustomObjectEditor(eventsFunctionsExtension, eventsBasedObject, '');
2251+
2252+
// Trigger reloading of extensions as an extension was modified (or even added)
2253+
// to create the custom object.
2254+
eventsFunctionsExtensionsState.loadProjectEventsFunctionsExtensions(
2255+
currentProject
2256+
);
2257+
};
2258+
2259+
const onOpenEventBasedObjectVariantEditor = (
2260+
extensionName: string,
2261+
eventsBasedObjectName: string,
2262+
variantName: string
2263+
) => {
2264+
if (!currentProject) return;
22382265
if (!currentProject.hasEventsFunctionsExtensionNamed(extensionName)) {
22392266
return;
22402267
}
@@ -3949,10 +3976,10 @@ const MainFrame = (props: Props) => {
39493976
) =>
39503977
onOpenEventBasedObjectEditor(
39513978
extensionName,
3952-
eventsBasedObjectName,
3953-
''
3979+
eventsBasedObjectName
39543980
),
39553981
onOpenEventBasedObjectEditor: onOpenEventBasedObjectEditor,
3982+
onOpenEventBasedObjectVariantEditor: onOpenEventBasedObjectVariantEditor,
39563983
onDeleteEventsBasedObjectVariant: deleteEventsBasedObjectVariant,
39573984
onEventsBasedObjectChildrenEdited: onEventsBasedObjectChildrenEdited,
39583985
onSceneObjectEdited: onSceneObjectEdited,

newIDE/app/src/ObjectEditor/Editors/CustomObjectPropertiesEditor/index.js

+37-28
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { Column, Line } from '../../../UI/Grid';
1313
import { getExtraObjectsInformation } from '../../../Hints';
1414
import { getObjectTutorialIds } from '../../../Utils/GDevelopServices/Tutorial';
1515
import AlertMessage from '../../../UI/AlertMessage';
16-
import { ColumnStackLayout } from '../../../UI/Layout';
1716
import DismissableTutorialMessage from '../../../Hints/DismissableTutorialMessage';
1817
import { mapFor } from '../../../Utils/MapFor';
1918
import ObjectsEditorService from '../../ObjectsEditorService';
@@ -42,9 +41,15 @@ import ScrollView, { type ScrollViewInterface } from '../../../UI/ScrollView';
4241
import FlatButton from '../../../UI/FlatButton';
4342
import RaisedButton from '../../../UI/RaisedButton';
4443
import FlatButtonWithSplitMenu from '../../../UI/FlatButtonWithSplitMenu';
45-
import { ResponsiveLineStackLayout, LineStackLayout } from '../../../UI/Layout';
44+
import {
45+
ResponsiveLineStackLayout,
46+
LineStackLayout,
47+
ColumnStackLayout,
48+
} from '../../../UI/Layout';
4649
import { useResponsiveWindowSize } from '../../../UI/Responsive/ResponsiveWindowMeasurer';
4750
import Add from '../../../UI/CustomSvgIcons/Add';
51+
import Trash from '../../../UI/CustomSvgIcons/Trash';
52+
import Edit from '../../../UI/CustomSvgIcons/ShareExternal';
4853
import Dialog from '../../../UI/Dialog';
4954
import HelpButton from '../../../UI/HelpButton';
5055
import RestoreIcon from '../../../UI/CustomSvgIcons/Restore';
@@ -107,7 +112,7 @@ const CustomObjectPropertiesEditor = (props: Props) => {
107112
unsavedChanges,
108113
renderObjectNameField,
109114
isChildObject,
110-
onOpenEventBasedObjectEditor,
115+
onOpenEventBasedObjectVariantEditor,
111116
onDeleteEventsBasedObjectVariant,
112117
} = props;
113118

@@ -204,8 +209,8 @@ const CustomObjectPropertiesEditor = (props: Props) => {
204209

205210
const editVariant = React.useCallback(
206211
() => {
207-
onOpenEventBasedObjectEditor &&
208-
onOpenEventBasedObjectEditor(
212+
onOpenEventBasedObjectVariantEditor &&
213+
onOpenEventBasedObjectVariantEditor(
209214
gd.PlatformExtension.getExtensionFromFullObjectType(
210215
customObjectConfiguration.getType()
211216
),
@@ -215,7 +220,7 @@ const CustomObjectPropertiesEditor = (props: Props) => {
215220
customObjectConfiguration.getVariantName()
216221
);
217222
},
218-
[customObjectConfiguration, onOpenEventBasedObjectEditor]
223+
[customObjectConfiguration, onOpenEventBasedObjectVariantEditor]
219224
);
220225

221226
const duplicateVariant = React.useCallback(
@@ -329,7 +334,31 @@ const CustomObjectPropertiesEditor = (props: Props) => {
329334
<Text size="block-title">Variant</Text>
330335
</Column>
331336
</Line>
332-
<LineStackLayout>
337+
<ColumnStackLayout expand noMargin>
338+
<LineStackLayout>
339+
<FlatButton
340+
label={<Trans>Edit</Trans>}
341+
leftIcon={<Edit />}
342+
onClick={editVariant}
343+
disabled={
344+
!eventBasedObject ||
345+
getVariant(
346+
eventBasedObject,
347+
customObjectConfiguration
348+
).getAssetStoreAssetId() !== ''
349+
}
350+
/>
351+
<FlatButton
352+
label={<Trans>Duplicate</Trans>}
353+
leftIcon={<Add />}
354+
onClick={() => setNewVariantDialogOpen(true)}
355+
/>
356+
<FlatButton
357+
label={<Trans>Delete</Trans>}
358+
leftIcon={<Trash />}
359+
onClick={deleteVariant}
360+
/>
361+
</LineStackLayout>
333362
<SelectField
334363
floatingLabelText={<Trans>Variant</Trans>}
335364
value={getVariantName(
@@ -340,7 +369,6 @@ const CustomObjectPropertiesEditor = (props: Props) => {
340369
customObjectConfiguration.setVariantName(value);
341370
forceUpdate();
342371
}}
343-
fullWidth
344372
>
345373
<SelectOption
346374
key="default-variant"
@@ -368,26 +396,7 @@ const CustomObjectPropertiesEditor = (props: Props) => {
368396
}
369397
)}
370398
</SelectField>
371-
<FlatButton
372-
label={<Trans>Edit</Trans>}
373-
onClick={editVariant}
374-
disabled={
375-
!eventBasedObject ||
376-
getVariant(
377-
eventBasedObject,
378-
customObjectConfiguration
379-
).getAssetStoreAssetId() !== ''
380-
}
381-
/>
382-
<FlatButton
383-
label={<Trans>Duplicate</Trans>}
384-
onClick={() => setNewVariantDialogOpen(true)}
385-
/>
386-
<FlatButton
387-
label={<Trans>Delete</Trans>}
388-
onClick={deleteVariant}
389-
/>
390-
</LineStackLayout>
399+
</ColumnStackLayout>
391400

392401
{!getVariantName(
393402
eventBasedObject,

newIDE/app/src/ObjectEditor/Editors/EditorProps.flow.js

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ export type EditorProps = {|
3838
renderObjectNameField?: () => React.Node,
3939
isChildObject?: boolean,
4040
onOpenEventBasedObjectEditor?: (
41+
extensionName: string,
42+
eventsBasedObjectName: string
43+
) => void,
44+
onOpenEventBasedObjectVariantEditor?: (
4145
extensionName: string,
4246
eventsBasedObjectName: string,
4347
variantName: string

newIDE/app/src/ObjectEditor/ObjectEditorDialog.js

+8
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ type Props = {|
6262
openBehaviorEvents: (extensionName: string, behaviorName: string) => void,
6363
onExtensionInstalled: (extensionName: string) => void,
6464
onOpenEventBasedObjectEditor: (
65+
extensionName: string,
66+
eventsBasedObjectName: string
67+
) => void,
68+
onOpenEventBasedObjectVariantEditor: (
6569
extensionName: string,
6670
eventsBasedObjectName: string,
6771
variantName: string
@@ -103,6 +107,7 @@ const InnerDialog = (props: InnerDialogProps) => {
103107
onComputeAllVariableNames,
104108
onExtensionInstalled,
105109
onOpenEventBasedObjectEditor,
110+
onOpenEventBasedObjectVariantEditor,
106111
onDeleteEventsBasedObjectVariant,
107112
isBehaviorListLocked,
108113
isVariableListLocked,
@@ -311,6 +316,9 @@ const InnerDialog = (props: InnerDialogProps) => {
311316
/>
312317
)}
313318
onOpenEventBasedObjectEditor={onOpenEventBasedObjectEditor}
319+
onOpenEventBasedObjectVariantEditor={
320+
onOpenEventBasedObjectVariantEditor
321+
}
314322
onDeleteEventsBasedObjectVariant={onDeleteEventsBasedObjectVariant}
315323
/>
316324
</Column>

newIDE/app/src/ObjectsList/ObjectTreeViewItemContent.js

+13-6
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ export type ObjectTreeViewItemCallbacks = {|
4141
) => void,
4242
onAddObjectInstance: (objectName: string) => void,
4343
onOpenEventBasedObjectEditor: (
44+
extensionName: string,
45+
eventsBasedObjectName: string
46+
) => void,
47+
onOpenEventBasedObjectVariantEditor: (
4448
extensionName: string,
4549
eventsBasedObjectName: string,
4650
variantName: string
@@ -281,7 +285,7 @@ export class ObjectTreeViewItemContent implements TreeViewItemContent {
281285
swapObjectAsset,
282286
canSetAsGlobalObject,
283287
setAsGlobalObject,
284-
onOpenEventBasedObjectEditor,
288+
onOpenEventBasedObjectVariantEditor,
285289
selectObjectFolderOrObjectWithContext,
286290
addFolder,
287291
isListLocked,
@@ -366,17 +370,20 @@ export class ObjectTreeViewItemContent implements TreeViewItemContent {
366370
project.hasEventsBasedObject(object.getType())
367371
? {
368372
label: i18n._(t`Edit children`),
369-
click: () =>
370-
onOpenEventBasedObjectEditor(
373+
click: () => {
374+
const customObjectConfiguration = gd.asCustomObjectConfiguration(
375+
object.getConfiguration()
376+
);
377+
onOpenEventBasedObjectVariantEditor(
371378
gd.PlatformExtension.getExtensionFromFullObjectType(
372379
object.getType()
373380
),
374381
gd.PlatformExtension.getObjectNameFromFullObjectType(
375382
object.getType()
376383
),
377-
// TODO open the right variant
378-
''
379-
),
384+
customObjectConfiguration.getVariantName()
385+
);
386+
},
380387
}
381388
: null,
382389
{ type: 'separator' },

newIDE/app/src/ObjectsList/index.js

+7
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,10 @@ type Props = {|
461461

462462
onEditObject: (object: gdObject, initialTab: ?ObjectEditorTab) => void,
463463
onOpenEventBasedObjectEditor: (
464+
extensionName: string,
465+
eventsBasedObjectName: string
466+
) => void,
467+
onOpenEventBasedObjectVariantEditor: (
464468
extensionName: string,
465469
eventsBasedObjectName: string,
466470
variantName: string
@@ -505,6 +509,7 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
505509

506510
onEditObject,
507511
onOpenEventBasedObjectEditor,
512+
onOpenEventBasedObjectVariantEditor,
508513
onExportAssets,
509514
onObjectCreated,
510515
onObjectEdited,
@@ -985,6 +990,7 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
985990
onAddObjectInstance,
986991
initialInstances,
987992
onOpenEventBasedObjectEditor,
993+
onOpenEventBasedObjectVariantEditor,
988994
getValidatedObjectOrGroupName,
989995
onRenameObjectFolderOrObjectWithContextFinish,
990996
onObjectModified,
@@ -1012,6 +1018,7 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
10121018
onAddObjectInstance,
10131019
initialInstances,
10141020
onOpenEventBasedObjectEditor,
1021+
onOpenEventBasedObjectVariantEditor,
10151022
getValidatedObjectOrGroupName,
10161023
onRenameObjectFolderOrObjectWithContextFinish,
10171024
onObjectModified,

newIDE/app/src/SceneEditor/EditorsDisplay.flow.js

+4
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ export type SceneEditorsDisplayProps = {|
4444
editObjectInPropertiesPanel: (objectName: string) => void,
4545
onEditObject: (object: gdObject, initialTab: ?ObjectEditorTab) => void,
4646
onOpenEventBasedObjectEditor: (
47+
extensionName: string,
48+
eventsBasedObjectName: string
49+
) => void,
50+
onOpenEventBasedObjectVariantEditor: (
4751
extensionName: string,
4852
eventsBasedObjectName: string,
4953
variantName: string

newIDE/app/src/SceneEditor/MosaicEditorsDisplay/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,9 @@ const MosaicEditorsDisplay = React.forwardRef<
399399
}
400400
onEditObject={props.onEditObject}
401401
onOpenEventBasedObjectEditor={props.onOpenEventBasedObjectEditor}
402+
onOpenEventBasedObjectVariantEditor={
403+
props.onOpenEventBasedObjectVariantEditor
404+
}
402405
onExportAssets={props.onExportAssets}
403406
onDeleteObjects={(objectWithContext, cb) =>
404407
props.onDeleteObjects(i18n, objectWithContext, cb)

newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,9 @@ const SwipeableDrawerEditorsDisplay = React.forwardRef<
337337
onOpenEventBasedObjectEditor={
338338
props.onOpenEventBasedObjectEditor
339339
}
340+
onOpenEventBasedObjectVariantEditor={
341+
props.onOpenEventBasedObjectVariantEditor
342+
}
340343
onExportAssets={props.onExportAssets}
341344
onDeleteObjects={(objectWithContext, cb) =>
342345
props.onDeleteObjects(i18n, objectWithContext, cb)

0 commit comments

Comments
 (0)