mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Add possibility to move object from context menu to another folder
This commit is contained in:
@@ -14,7 +14,6 @@ export const getObjectFolderOrObjectUnifiedName = (
|
||||
? objectFolderOrObject.getFolderName()
|
||||
: objectFolderOrObject.getObject().getName();
|
||||
|
||||
|
||||
export const enumerateObjectFolderOrObjects = (
|
||||
project: gdObjectsContainer,
|
||||
objectsContainer: gdObjectsContainer,
|
||||
@@ -92,3 +91,31 @@ export const enumerateObjectFolderOrObjects = (
|
||||
selectedByNamesObjectFolderOrObjectsList,
|
||||
};
|
||||
};
|
||||
|
||||
const enumerateFoldersInFolder = (
|
||||
folder: gdObjectFolderOrObject,
|
||||
prefix: string,
|
||||
result: {| path: string, folder: gdObjectFolderOrObject |}[]
|
||||
) => {
|
||||
mapFor(0, folder.getChildrenCount(), i => {
|
||||
const child = folder.getChildAt(i);
|
||||
if (child.isFolder()) {
|
||||
result.push({
|
||||
path: prefix
|
||||
? prefix + '/' + child.getFolderName()
|
||||
: child.getFolderName(),
|
||||
folder: child,
|
||||
});
|
||||
enumerateFoldersInFolder(child, child.getFolderName(), result);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const enumerateFoldersInContainer = (
|
||||
container: gdObjectsContainer
|
||||
): {| path: string, folder: gdObjectFolderOrObject |}[] => {
|
||||
const rootFolder = container.getRootFolder();
|
||||
const result = [];
|
||||
enumerateFoldersInFolder(rootFolder, '', result);
|
||||
return result;
|
||||
};
|
||||
|
@@ -44,6 +44,7 @@ import ResponsiveRaisedButton from '../UI/ResponsiveRaisedButton';
|
||||
import Add from '../UI/CustomSvgIcons/Add';
|
||||
import InAppTutorialContext from '../InAppTutorial/InAppTutorialContext';
|
||||
import {
|
||||
enumerateFoldersInContainer,
|
||||
enumerateObjectFolderOrObjects,
|
||||
getObjectFolderOrObjectUnifiedName,
|
||||
type ObjectFolderOrObjectWithContext,
|
||||
@@ -880,7 +881,9 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
|
||||
selectedObjectFolderOrObjectParent.moveObjectFolderOrObjectToAnotherFolder(
|
||||
selectedObjectFolderOrObject,
|
||||
destinationParent,
|
||||
destinationParent.getChildPosition(destinationObjectFolderOrObject)
|
||||
destinationParent.getChildPosition(
|
||||
destinationObjectFolderOrObject
|
||||
) + (where === 'after' ? 1 : 0)
|
||||
);
|
||||
} else {
|
||||
return;
|
||||
@@ -950,9 +953,9 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
|
||||
|
||||
const renderObjectMenuTemplate = React.useCallback(
|
||||
(i18n: I18nType) => (item: TreeViewItem, index: number) => {
|
||||
if (item.isRoot || item.isPlaceholder) return;
|
||||
if (item.isRoot || item.isPlaceholder) return [];
|
||||
const { objectFolderOrObject } = item;
|
||||
if (objectFolderOrObject.isFolder()) return;
|
||||
if (objectFolderOrObject.isFolder()) return [];
|
||||
|
||||
const object = objectFolderOrObject.getObject();
|
||||
const instanceCountOnScene = initialInstances
|
||||
@@ -961,6 +964,13 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
|
||||
object.getName()
|
||||
)
|
||||
: undefined;
|
||||
const container = item.global ? project : objectsContainer;
|
||||
const folderAndPathsInContainer = enumerateFoldersInContainer(
|
||||
container
|
||||
).filter(
|
||||
folderAndPath =>
|
||||
folderAndPath.folder !== item.objectFolderOrObject.getParent()
|
||||
);
|
||||
|
||||
const objectMetadata = gd.MetadataProvider.getObjectMetadata(
|
||||
project.getCurrentPlatform(),
|
||||
@@ -1032,6 +1042,29 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
|
||||
},
|
||||
visible: canSetAsGlobalObject !== false,
|
||||
},
|
||||
{
|
||||
label: i18n._('Move to folder'),
|
||||
submenu: folderAndPathsInContainer.map(({ folder, path }) => ({
|
||||
label: path,
|
||||
click: () => {
|
||||
item.objectFolderOrObject
|
||||
.getParent()
|
||||
.moveObjectFolderOrObjectToAnotherFolder(
|
||||
item.objectFolderOrObject,
|
||||
folder,
|
||||
0
|
||||
);
|
||||
onObjectModified(true);
|
||||
if (treeViewRef.current)
|
||||
treeViewRef.current.openItem(
|
||||
getTreeViewItemId({
|
||||
objectFolderOrObject: folder,
|
||||
global: item.global,
|
||||
})
|
||||
);
|
||||
},
|
||||
})),
|
||||
},
|
||||
{
|
||||
label: i18n._(t`Tags`),
|
||||
submenu: buildTagsMenuTemplate({
|
||||
@@ -1094,6 +1127,8 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
|
||||
canSetAsGlobalObject,
|
||||
initialInstances,
|
||||
selectObject,
|
||||
objectsContainer,
|
||||
onObjectModified,
|
||||
]
|
||||
);
|
||||
|
||||
|
Reference in New Issue
Block a user