diff --git a/DesignerSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js b/DesignerSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js index 9617118a6..0c009e1fc 100644 --- a/DesignerSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js +++ b/DesignerSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js @@ -2,6 +2,7 @@ function newUiObjectsFromNodes () { thisObject = { recreateWorkspace: recreateWorkspace, createUiObjectFromNode: createUiObjectFromNode, + addUIObject: addUIObject, addTeam: addTeam, addSensorBot: addSensorBot, addIndicatorBot: addIndicatorBot, @@ -1078,6 +1079,34 @@ function newUiObjectsFromNodes () { } } + function addUIObject (parent, type) { + let object = { + name: 'New ' + type, + type: type + } + createUiObject(true, object.type, object.name, object, parent, parent) + + let nodeDefinition = APP_SCHEMA_MAP.get(parent.type) + if (nodeDefinition !== undefined) { + for (i = 0; i < nodeDefinition.properties.length; i++) { + let property = nodeDefinition.properties[i] + if (property.childType === type) { + switch (property.type) { + case 'node': { + parent[property.name] = object + } + break + case 'array': { + parent[property.name].push(object) + } + break + } + } + } + } + return object + } + function addTeam (node) { let team = { name: 'New Team', diff --git a/DesignerSpace/Workspace/Workspace.js b/DesignerSpace/Workspace/Workspace.js index f00e90f40..ed8f1f339 100644 --- a/DesignerSpace/Workspace/Workspace.js +++ b/DesignerSpace/Workspace/Workspace.js @@ -248,8 +248,13 @@ function newWorkspace () { } } - async function onMenuItemClick (payload, action, callBackFunction) { + async function onMenuItemClick (payload, action, relatedUiObject, callBackFunction) { switch (action) { + case 'Add UI Object': + { + functionLibraryUiObjectsFromNodes.addUIObject(payload.node, relatedUiObject) + } + break case 'Share Workspace': { let text = stringifyWorkspace(true) diff --git a/FloatingSpace/CircularMenuItem.js b/FloatingSpace/CircularMenuItem.js index a473124d7..92ff2d7c5 100644 --- a/FloatingSpace/CircularMenuItem.js +++ b/FloatingSpace/CircularMenuItem.js @@ -229,7 +229,7 @@ function newCircularMenuItem () { if (thisObject.label === undefined) { /* This is what we have in the case of menu items that are only Icons. In this situation there is no complex logic, just execute the specified action. */ - thisObject.actionFunction(thisObject.payload, thisObject.action) + thisObject.actionFunction(thisObject.payload, thisObject.action, thisObject.relatedUiObject) return } @@ -261,7 +261,7 @@ function newCircularMenuItem () { } /* Execute the action and wait for callbacks to update our statuus. */ - thisObject.actionFunction(thisObject.payload, thisObject.action, onPrimaryCallBack) + thisObject.actionFunction(thisObject.payload, thisObject.action, thisObject.relatedUiObject, onPrimaryCallBack) return } if (temporaryStatus === STATUS_PRIMARY_WORK_DONE && thisObject.secondaryAction !== undefined) { @@ -271,7 +271,7 @@ function newCircularMenuItem () { } /* Execute the action and wait for callbacks to update our statuus. */ - thisObject.actionFunction(thisObject.payload, thisObject.secondaryAction, onSecondaryCallBack) + thisObject.actionFunction(thisObject.payload, thisObject.secondaryAction, thisObject.relatedUiObject, onSecondaryCallBack) return } diff --git a/FloatingSpace/UiObjectConstructor.js b/FloatingSpace/UiObjectConstructor.js index d0dff925c..b05162849 100644 --- a/FloatingSpace/UiObjectConstructor.js +++ b/FloatingSpace/UiObjectConstructor.js @@ -1621,7 +1621,7 @@ function newUiObjectConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -50, + angle: -60, dontShowAtFullscreen: true } ) @@ -1642,7 +1642,9 @@ function newUiObjectConstructor () { ) menuItemsInitialValues.push( { - action: 'Add Shapes', + action: 'Add UI Object', + disableIfPropertyIsDefined: true, + propertyToCheckFor: 'shapes', actionFunction: payload.onMenuItemClick, label: 'Add Shapes', visible: true, @@ -1693,7 +1695,7 @@ function newUiObjectConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 50 + angle: 60 } ) break @@ -4708,7 +4710,21 @@ function newUiObjectConstructor () { break } default: { - if (ERROR_LOG === true) { logger.write('[ERROR] getMenuItemsInitialValues -> UI Object Type not Recognized -> type = ' + payload.node.type) } + let nodeDefinition = APP_SCHEMA_MAP.get(payload.node.type) + if (nodeDefinition !== undefined) { + for (i = 0; i < nodeDefinition.menuItems.length; i++) { + let menutItemDefinition = nodeDefinition.menuItems[i] + let newMenuItem = JSON.parse(JSON.stringify(menutItemDefinition)) + + /* We need to reference the real function based on its name */ + if (menutItemDefinition.actionFunction !== undefined) { + newMenuItem.actionFunction = eval(menutItemDefinition.actionFunction) + } + menuItemsInitialValues.push(newMenuItem) + } + } else { + if (ERROR_LOG === true) { logger.write('[ERROR] getMenuItemsInitialValues -> UI Object Type not Recognized -> type = ' + payload.node.type) } + } } } @@ -5021,6 +5037,35 @@ function newUiObjectConstructor () { break } default: { + let nodeDefinition = APP_SCHEMA_MAP.get(payload.node.type) + if (nodeDefinition !== undefined) { + switch (nodeDefinition.level) { + case 0: { + level_0() + return + } + case 1: { + level_1() + return + } + case 2: { + level_2() + return + } + case 3: { + level_3() + return + } + case 4: { + level_4() + return + } + case 5: { + level_5() + return + } + } + } if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> UI Object Type not Recognized -> type = ' + payload.node.type) } return } diff --git a/Spaces/DesignerSpace.js b/Spaces/DesignerSpace.js index b06dec154..8cde058e0 100644 --- a/Spaces/DesignerSpace.js +++ b/Spaces/DesignerSpace.js @@ -122,8 +122,11 @@ function newDesignerSpace () { /* Take types-icons relationships defined at the schema */ for (let i = 0; i < APP_SCHEMA_ARRAY.length; i++) { let nodeDefinition = APP_SCHEMA_ARRAY[i] - let icon = thisObject.iconCollection.get(nodeDefinition.icon) - thisObject.iconByUiObjectType.set(nodeDefinition.type, icon) + let iconName = nodeDefinition.icon + if (iconName !== undefined) { + let icon = thisObject.iconCollection.get(iconName) + thisObject.iconByUiObjectType.set(nodeDefinition.type, icon) + } } }