Skip to content

Commit

Permalink
Close deleted variant tab.
Browse files Browse the repository at this point in the history
  • Loading branch information
D8H committed Feb 28, 2025
1 parent 4695b9d commit eccdb98
Show file tree
Hide file tree
Showing 11 changed files with 109 additions and 4 deletions.
5 changes: 5 additions & 0 deletions newIDE/app/src/MainFrame/EditorContainers/BaseEditor.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,11 @@ export type RenderEditorContainerProps = {|
eventsBasedObjectName: string,
variantName: string
) => void,
onDeleteEventsBasedObjectVariant: (
eventsFunctionsExtension: gdEventsFunctionsExtension,
eventBasedObject: gdEventsBasedObject,
variant: gdEventsBasedObjectVariant
) => void,
|};

export type RenderEditorContainerPropsWithRef = {|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,9 @@ export class CustomObjectEditorContainer extends React.Component<RenderEditorCon
}
onExtractAsEventBasedObject={this.props.onExtractAsEventBasedObject}
onOpenEventBasedObjectEditor={this.props.onOpenEventBasedObjectEditor}
onDeleteEventsBasedObjectVariant={
this.props.onDeleteEventsBasedObjectVariant
}
/>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ export class ExternalLayoutEditorContainer extends React.Component<
}
// Nothing to do as events-based objects can't have external layout.
onEventsBasedObjectChildrenEdited={() => {}}
onDeleteEventsBasedObjectVariant={() => {}}
/>
)}
{!layout && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,9 @@ export class SceneEditorContainer extends React.Component<RenderEditorContainerP
onExtractAsExternalLayout={this.props.onExtractAsExternalLayout}
onExtractAsEventBasedObject={this.props.onExtractAsEventBasedObject}
onOpenEventBasedObjectEditor={this.props.onOpenEventBasedObjectEditor}
onDeleteEventsBasedObjectVariant={
this.props.onDeleteEventsBasedObjectVariant
}
onObjectEdited={objectWithContext =>
this.props.onSceneObjectEdited(layout, objectWithContext)
}
Expand Down
23 changes: 23 additions & 0 deletions newIDE/app/src/MainFrame/EditorTabs/EditorTabsHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,29 @@ export const closeCustomObjectTab = (
});
};

export const closeEventsBasedObjectVariantTab = (
state: EditorTabsState,
eventsFunctionsExtensionName: string,
eventsBasedObjectName: string,
eventsBasedObjectVariantName: string
) => {
return closeTabsExceptIf(state, editorTab => {
const editor = editorTab.editorRef;
if (editor instanceof CustomObjectEditorContainer) {
return (
(!editor.getEventsFunctionsExtensionName() ||
editor.getEventsFunctionsExtensionName() !==
eventsFunctionsExtensionName) &&
(!editor.getEventsBasedObjectName() ||
editor.getEventsBasedObjectName() !== eventsBasedObjectName) &&
(!editor.getVariantName() ||
editor.getVariantName() !== eventsBasedObjectVariantName)
);
}
return true;
});
};

export const getEventsFunctionsExtensionEditor = (
state: EditorTabsState,
eventsFunctionsExtension: gdEventsFunctionsExtension
Expand Down
25 changes: 25 additions & 0 deletions newIDE/app/src/MainFrame/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import {
closeExternalEventsTabs,
closeEventsFunctionsExtensionTabs,
closeCustomObjectTab,
closeEventsBasedObjectVariantTab,
saveUiSettings,
type EditorTabsState,
type EditorTab,
Expand Down Expand Up @@ -1548,6 +1549,29 @@ const MainFrame = (props: Props) => {
}));
};

const deleteEventsBasedObjectVariant = (
eventsFunctionsExtension: gdEventsFunctionsExtension,
eventBasedObject: gdEventsBasedObject,
variant: gdEventsBasedObjectVariant
): void => {
const variants = eventBasedObject.getVariants();
const variantName = variant.getName();
if (!variants.hasVariantNamed(variantName)) {
return;
}
variants.removeVariant(variantName);

setState(state => ({
...state,
editorTabs: closeEventsBasedObjectVariantTab(
state.editorTabs,
eventsFunctionsExtension.getName(),
eventBasedObject.getName(),
variantName
),
}));
};

const setPreviewedLayout = (
previewLayoutName: ?string,
previewExternalLayoutName?: ?string
Expand Down Expand Up @@ -3886,6 +3910,7 @@ const MainFrame = (props: Props) => {
''
),
onOpenEventBasedObjectEditor: onOpenEventBasedObjectEditor,
onDeleteEventsBasedObjectVariant: deleteEventsBasedObjectVariant,
onEventsBasedObjectChildrenEdited: onEventsBasedObjectChildrenEdited,
onSceneObjectEdited: onSceneObjectEdited,
gamesList,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ const CustomObjectPropertiesEditor = (props: Props) => {
renderObjectNameField,
isChildObject,
onOpenEventBasedObjectEditor,
onDeleteEventsBasedObjectVariant,
} = props;

const { isMobile } = useResponsiveWindowSize();
Expand Down Expand Up @@ -254,19 +255,37 @@ const CustomObjectPropertiesEditor = (props: Props) => {

const deleteVariant = React.useCallback(
() => {
if (!eventBasedObject) {
if (!eventBasedObject || !onDeleteEventsBasedObjectVariant) {
return;
}
const variants = eventBasedObject.getVariants();
const selectedVariantName = customObjectConfiguration.getVariantName();
if (variants.hasVariantNamed(selectedVariantName)) {
// TODO Close the variant tabs before deleting it.
customObjectConfiguration.setVariantName('');
variants.removeVariant(selectedVariantName);
const extensionName = gd.PlatformExtension.getExtensionFromFullObjectType(
customObjectConfiguration.getType()
);
if (!project.hasEventsFunctionsExtensionNamed(extensionName)) {
return;
}
const eventBasedExtension = project.getEventsFunctionsExtension(
extensionName
);
onDeleteEventsBasedObjectVariant(
eventBasedExtension,
eventBasedObject,
variants.getVariant(selectedVariantName)
);
forceUpdate();
}
},
[customObjectConfiguration, eventBasedObject, forceUpdate]
[
customObjectConfiguration,
eventBasedObject,
forceUpdate,
onDeleteEventsBasedObjectVariant,
project,
]
);

return (
Expand Down
5 changes: 5 additions & 0 deletions newIDE/app/src/ObjectEditor/Editors/EditorProps.flow.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,9 @@ export type EditorProps = {|
eventsBasedObjectName: string,
variantName: string
) => void,
onDeleteEventsBasedObjectVariant?: (
eventsFunctionsExtension: gdEventsFunctionsExtension,
eventBasedObject: gdEventsBasedObject,
variant: gdEventsBasedObjectVariant
) => void,
|};
7 changes: 7 additions & 0 deletions newIDE/app/src/ObjectEditor/ObjectEditorDialog.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ type Props = {|
eventsBasedObjectName: string,
variantName: string
) => void,
onDeleteEventsBasedObjectVariant: (
eventsFunctionsExtension: gdEventsFunctionsExtension,
eventBasedObject: gdEventsBasedObject,
variant: gdEventsBasedObjectVariant
) => void,
|};

type InnerDialogProps = {|
Expand Down Expand Up @@ -94,6 +99,7 @@ const InnerDialog = (props: InnerDialogProps) => {
onUpdateBehaviorsSharedData,
onComputeAllVariableNames,
onOpenEventBasedObjectEditor,
onDeleteEventsBasedObjectVariant,
} = props;
const [currentTab, setCurrentTab] = React.useState<ObjectEditorTab>(
initialTab || 'properties'
Expand Down Expand Up @@ -289,6 +295,7 @@ const InnerDialog = (props: InnerDialogProps) => {
/>
)}
onOpenEventBasedObjectEditor={onOpenEventBasedObjectEditor}
onDeleteEventsBasedObjectVariant={onDeleteEventsBasedObjectVariant}
/>
</Column>
) : null}
Expand Down
8 changes: 8 additions & 0 deletions newIDE/app/src/SceneEditor/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,11 @@ type Props = {|
eventsBasedObjectName: string,
variantName: string
) => void,
onDeleteEventsBasedObjectVariant: (
eventsFunctionsExtension: gdEventsFunctionsExtension,
eventBasedObject: gdEventsBasedObject,
variant: gdEventsBasedObjectVariant
) => void,

// Preview:
hotReloadPreviewButtonProps: HotReloadPreviewButtonProps,
Expand Down Expand Up @@ -2129,6 +2134,9 @@ export default class SceneEditor extends React.Component<Props, State> {
onOpenEventBasedObjectEditor={
this.props.onOpenEventBasedObjectEditor
}
onDeleteEventsBasedObjectVariant={
this.props.onDeleteEventsBasedObjectVariant
}
/>
)}
</React.Fragment>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ export const CustomObject = () => (
onOpenEventBasedObjectEditor={() =>
action('Open event-based object editor')
}
onDeleteEventsBasedObjectVariant={() =>
action('Delete event-based object variant')
}
/>
</DragAndDropContextProvider>
);
Expand Down Expand Up @@ -79,6 +82,9 @@ export const StandardObject = () => (
onOpenEventBasedObjectEditor={() =>
action('Open event-based object editor')
}
onDeleteEventsBasedObjectVariant={() =>
action('Delete event-based object variant')
}
/>
</DragAndDropContextProvider>
);

0 comments on commit eccdb98

Please sign in to comment.