From 9a04d7d05833d675e22db875f49c3c90a8199a9e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 2 Apr 2020 13:29:52 +0200 Subject: [PATCH] inherting from siblings --- CanvasApp/FloatingSpace/FloatingObject.js | 4 +- .../FloatingSpace/UiObjectConstructor.js | 76 ++++++++++++++++++- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/CanvasApp/FloatingSpace/FloatingObject.js b/CanvasApp/FloatingSpace/FloatingObject.js index a57cbefec..54d7544fc 100644 --- a/CanvasApp/FloatingSpace/FloatingObject.js +++ b/CanvasApp/FloatingSpace/FloatingObject.js @@ -22,8 +22,8 @@ function newFloatingObject () { targetRadius: 0, // This is the target radius of the floating object with zoom applied. It should be animated until reaching this value. isPinned: false, isFrozen: false, - angleToParent: ANGLE_TO_PARENT.RANGE_90, - distanceToParent: DISTANCE_TO_PARENT.PARENT_100X, + angleToParent: undefined, + distanceToParent: undefined, isCollapsed: false, isParentCollapsed: false, frozenManually: false, diff --git a/CanvasApp/FloatingSpace/UiObjectConstructor.js b/CanvasApp/FloatingSpace/UiObjectConstructor.js index 4fe03a6bd..38da1216d 100644 --- a/CanvasApp/FloatingSpace/UiObjectConstructor.js +++ b/CanvasApp/FloatingSpace/UiObjectConstructor.js @@ -65,10 +65,80 @@ function newUiObjectConstructor () { } } - /* For brand new objects being created directly by the user, we will make them inherit some properties from their parents. */ + /* + For brand new objects being created directly by the user, we will make them inherit some properties + from their closest siblings, and if they don't have, from their parents. + */ + if (userAddingNew === true) { - floatingObject.angleToParent = payload.parentNode.payload.floatingObject.angleToParent - floatingObject.distanceToParent = payload.parentNode.payload.floatingObject.distanceToParent + let definition = APP_SCHEMA_MAP.get(payload.parentNode.type) + for (let i = 0; i < definition.properties.length; i++) { + let property = definition.properties[i] + if (property.childType === payload.node.type) { + if (property.type === 'array') { + let parentNode = payload.parentNode + let parentNodeArray = parentNode[property.name] + if (parentNodeArray.length > 1) { // the new node was already added + let closestSibling = parentNodeArray[parentNodeArray.length - 2] + if (closestSibling !== undefined) { + floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent + floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent + break + } + } + } + if (floatingObject.angleToParent === undefined) { + for (let j = i - 1; j >= 0; j--) { + let siblingProperty = definition.properties[j] + let parentNode = payload.parentNode + let parentNodeProperty = parentNode[siblingProperty.name] + if (siblingProperty.type === 'array') { + if (parentNodeProperty.length > 0) { + let closestSibling = parentNodeProperty[parentNodeProperty.length - 1] + if (closestSibling !== undefined) { + floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent + floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent + break + } + } + } else { + let closestSibling = parentNodeProperty + if (closestSibling !== undefined) { + floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent + floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent + break + } + } + } + for (let j = i + 1; j < definition.properties.length; j++) { + let siblingProperty = definition.properties[j] + let parentNode = payload.parentNode + let parentNodeProperty = parentNode[siblingProperty.name] + if (siblingProperty.type === 'array') { + if (parentNodeProperty.length > 0) { + let closestSibling = parentNodeProperty[parentNodeProperty.length - 1] + if (closestSibling !== undefined) { + floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent + floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent + break + } + } + } else { + let closestSibling = parentNodeProperty + if (closestSibling !== undefined) { + floatingObject.angleToParent = closestSibling.payload.floatingObject.angleToParent + floatingObject.distanceToParent = closestSibling.payload.floatingObject.distanceToParent + break + } + } + } + } + } + } + if (floatingObject.angleToParent === undefined) { + floatingObject.angleToParent = payload.parentNode.payload.floatingObject.angleToParent + floatingObject.distanceToParent = payload.parentNode.payload.floatingObject.distanceToParent + } } let uiObject = newUiObject()