Skip to content

Commit feb767a

Browse files
authored
Merge branch 'drag-drop-new-objects' into last-Almost-stable
2 parents 6927501 + 3af0713 commit feb767a

6 files changed

Lines changed: 75 additions & 71 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# THIS IS AUTOGENERATED. DO NOT EDIT MANUALLY
2+
version = 1
3+
name = "GDevelop"
4+
5+
[setup]
6+
script = ""
7+
8+
[[actions]]
9+
name = "Run"
10+
icon = "run"
11+
command = '''
12+
cd "C:\Users\batah\OneDrive\المستندات\GitHub\GDevelop\newIDE\app"
13+
npm run build
14+
npm start
15+
'''

newIDE/app/src/ObjectsList/DroppedFileObjectSelectorUtils.js

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
// @flow
22

33
const imageExtensions = ['png', 'jpg', 'jpeg', 'webp'];
4-
const modelExtensions = ['glb'];
54

65
export type DroppedSupportedFile = {|
76
file: ?File,
8-
resourceKind: 'image' | 'model3D',
7+
resourceKind: 'image',
98
|};
109

1110
export const getFileExtension = (filename: string): string => {
@@ -14,28 +13,18 @@ export const getFileExtension = (filename: string): string => {
1413
return filename.substring(dotIndex + 1).toLowerCase();
1514
};
1615

17-
export const getResourceKindFromExtension = (
18-
extension: string
19-
): ?('image' | 'model3D') => {
16+
export const getResourceKindFromExtension = (extension: string): ?'image' => {
2017
if (imageExtensions.includes(extension)) {
2118
return 'image';
2219
}
23-
if (modelExtensions.includes(extension)) {
24-
return 'model3D';
25-
}
2620
return null;
2721
};
2822

29-
export const getResourceKindFromMimeType = (
30-
mimeType: string
31-
): ?('image' | 'model3D') => {
23+
export const getResourceKindFromMimeType = (mimeType: string): ?'image' => {
3224
const normalizedMimeType = mimeType.toLowerCase();
3325
if (normalizedMimeType.startsWith('image/')) {
3426
return 'image';
3527
}
36-
if (normalizedMimeType === 'model/gltf-binary') {
37-
return 'model3D';
38-
}
3928
return null;
4029
};
4130

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// @flow
2+
3+
const objectTypeToDefaultName = {
4+
Sprite: 'NewSprite',
5+
'TiledSpriteObject::TiledSprite': 'NewTiledSprite',
6+
'ParticleSystem::ParticleEmitter': 'NewParticlesEmitter',
7+
'PanelSpriteObject::PanelSprite': 'NewPanelSprite',
8+
'PrimitiveDrawing::Drawer': 'NewShapePainter',
9+
'TextObject::Text': 'NewText',
10+
'BBText::BBText': 'NewBBText',
11+
'BitmapText::BitmapTextObject': 'NewBitmapText',
12+
'TextEntryObject::TextEntry': 'NewTextEntry',
13+
'TileMap::SimpleTileMap': 'NewTileMap',
14+
'TileMap::TileMap': 'NewExternalTileMap',
15+
'TileMap::CollisionMask': 'NewExternalTileMapMask',
16+
'MyDummyExtension::DummyObject': 'NewDummyObject',
17+
'Lighting::LightObject': 'NewLight',
18+
'TextInput::TextInputObject': 'NewTextInput',
19+
'Scene3D::Model3DObject': 'New3DModel',
20+
'Scene3D::Cube3DObject': 'New3DBox',
21+
'SpineObject::SpineObject': 'NewSpine',
22+
'Video::VideoObject': 'NewVideo',
23+
};
24+
25+
export const getDefaultObjectNameForType = (objectType: string): string =>
26+
// $FlowFixMe[invalid-computed-prop]
27+
objectTypeToDefaultName[objectType] || 'NewObject';
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @flow
2+
import { getDefaultObjectNameForType } from './ObjectTypeDefaultName';
3+
4+
describe('ObjectTypeDefaultName', () => {
5+
it('returns the editor-style default object name for known object types', () => {
6+
expect(getDefaultObjectNameForType('Sprite')).toBe('NewSprite');
7+
expect(getDefaultObjectNameForType('PanelSpriteObject::PanelSprite')).toBe(
8+
'NewPanelSprite'
9+
);
10+
});
11+
12+
it('falls back to NewObject for unknown object types', () => {
13+
expect(getDefaultObjectNameForType('Unknown::Object')).toBe('NewObject');
14+
});
15+
});

newIDE/app/src/ObjectsList/ObjectsListDragAndDrop.spec.js

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ describe('ObjectsList drag and drop helpers', () => {
4343

4444
test('detects supported resource kinds from extension', () => {
4545
expect(getResourceKindFromExtension('png')).toBe('image');
46-
expect(getResourceKindFromExtension('glb')).toBe('model3D');
46+
expect(getResourceKindFromExtension('glb')).toBe(null);
4747
expect(getResourceKindFromExtension('wav')).toBe(null);
4848
});
4949

5050
test('detects supported resource kinds from mime type', () => {
5151
expect(getResourceKindFromMimeType('image/webp')).toBe('image');
52-
expect(getResourceKindFromMimeType('model/gltf-binary')).toBe('model3D');
52+
expect(getResourceKindFromMimeType('model/gltf-binary')).toBe(null);
5353
expect(getResourceKindFromMimeType('audio/wav')).toBe(null);
5454
});
5555

@@ -94,7 +94,7 @@ describe('ObjectsList drag and drop helpers', () => {
9494
});
9595
});
9696

97-
test('detects a supported dropped file from mime type before the file is available', () => {
97+
test('returns null for unsupported dropped mime types before the file is available', () => {
9898
const droppedFile = getDroppedSupportedFile({
9999
0: {
100100
kind: 'file',
@@ -104,10 +104,7 @@ describe('ObjectsList drag and drop helpers', () => {
104104
length: 1,
105105
});
106106

107-
expect(droppedFile).toEqual({
108-
file: null,
109-
resourceKind: 'model3D',
110-
});
107+
expect(droppedFile).toBe(null);
111108
});
112109

113110
test('returns null for unsupported dropped entries', () => {

newIDE/app/src/ObjectsList/index.js

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ import {
7878
getDroppedSupportedFile,
7979
type DroppedSupportedFile,
8080
} from './DroppedFileObjectSelectorUtils';
81+
import { getDefaultObjectNameForType } from './ObjectTypeDefaultName';
8182

8283
const gd: libGDevelop = global.gd;
8384
const nodePath = optionalRequire('path');
@@ -438,28 +439,6 @@ const getTreeViewItemRightButton = (i18n: I18nType) => (item: TreeViewItem) =>
438439

439440
export const objectWithContextReactDndType = 'GD_OBJECT_WITH_CONTEXT';
440441

441-
const objectTypeToDefaultName = {
442-
Sprite: 'NewSprite',
443-
'TiledSpriteObject::TiledSprite': 'NewTiledSprite',
444-
'ParticleSystem::ParticleEmitter': 'NewParticlesEmitter',
445-
'PanelSpriteObject::PanelSprite': 'NewPanelSprite',
446-
'PrimitiveDrawing::Drawer': 'NewShapePainter',
447-
'TextObject::Text': 'NewText',
448-
'BBText::BBText': 'NewBBText',
449-
'BitmapText::BitmapTextObject': 'NewBitmapText',
450-
'TextEntryObject::TextEntry': 'NewTextEntry',
451-
'TileMap::SimpleTileMap': 'NewTileMap',
452-
'TileMap::TileMap': 'NewExternalTileMap',
453-
'TileMap::CollisionMask': 'NewExternalTileMapMask',
454-
'MyDummyExtension::DummyObject': 'NewDummyObject',
455-
'Lighting::LightObject': 'NewLight',
456-
'TextInput::TextInputObject': 'NewTextInput',
457-
'Scene3D::Model3DObject': 'New3DModel',
458-
'Scene3D::Cube3DObject': 'New3DBox',
459-
'SpineObject::SpineObject': 'NewSpine',
460-
'Video::VideoObject': 'NewVideo',
461-
};
462-
463442
export type ObjectsListInterface = {|
464443
forceUpdateList: () => void,
465444
openNewObjectDialog: () => void,
@@ -712,21 +691,12 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
712691
({
713692
objectType,
714693
resourceName,
715-
sourceFileName,
716694
}: {|
717695
objectType: string,
718696
resourceName: string,
719-
sourceFileName: string,
720697
|}) => {
721-
const sourceBaseName = nodePath
722-
? nodePath.basename(sourceFileName, nodePath.extname(sourceFileName))
723-
: sourceFileName.replace(/\.[^/.]+$/, '');
724-
const fallbackName =
725-
// $FlowFixMe[invalid-computed-prop]
726-
objectTypeToDefaultName[objectType] || 'NewObject';
727-
const defaultObjectName = sourceBaseName || fallbackName;
728698
const objectName = newNameGenerator(
729-
defaultObjectName,
699+
getDefaultObjectNameForType(objectType),
730700
candidateName =>
731701
objectsContainer.hasObjectNamed(candidateName) ||
732702
(!!globalObjectsContainer &&
@@ -841,10 +811,7 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
841811
if (!droppedFile.file) return null;
842812
const storageProvider = resourceManagementProps.getStorageProvider();
843813
const resourcesManager = project.getResourcesManager();
844-
const newResource =
845-
droppedFile.resourceKind === 'image'
846-
? new gd.ImageResource()
847-
: new gd.Model3DResource();
814+
const newResource = new gd.ImageResource();
848815
if (storageProvider.internalName === 'Cloud') {
849816
if (!fileMetadata || !authenticatedUser.authenticated) {
850817
newResource.delete();
@@ -915,8 +882,7 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
915882
? 'New' +
916883
(project.getEventsBasedObject(objectType).getDefaultName() ||
917884
project.getEventsBasedObject(objectType).getName())
918-
: // $FlowFixMe[invalid-computed-prop]
919-
objectTypeToDefaultName[objectType] || 'NewObject';
885+
: getDefaultObjectNameForType(objectType);
920886
const name = newNameGenerator(
921887
defaultName,
922888
name =>
@@ -1968,17 +1934,13 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
19681934
return;
19691935
}
19701936
let objectTypeToCreate = null;
1971-
if (droppedFile.resourceKind === 'image') {
1972-
objectTypeToCreate = getObjectTypeForDroppedImagePosition(
1973-
event.clientX,
1974-
event.clientY
1975-
);
1976-
if (!objectTypeToCreate) {
1977-
resetDroppedFileState();
1978-
return;
1979-
}
1980-
} else {
1981-
objectTypeToCreate = 'Scene3D::Model3DObject';
1937+
objectTypeToCreate = getObjectTypeForDroppedImagePosition(
1938+
event.clientX,
1939+
event.clientY
1940+
);
1941+
if (!objectTypeToCreate) {
1942+
resetDroppedFileState();
1943+
return;
19821944
}
19831945
if (
19841946
storageProvider.internalName === 'Cloud' &&
@@ -2006,7 +1968,6 @@ const ObjectsList = React.forwardRef<Props, ObjectsListInterface>(
20061968
insertObjectFromDroppedResource({
20071969
objectType: objectTypeToCreate,
20081970
resourceName,
2009-
sourceFileName: droppedFile.file.name,
20101971
});
20111972
} catch (error) {
20121973
await showAlert({

0 commit comments

Comments
 (0)