diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 092aa0e1b..2f4bdb194 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -389,7 +389,7 @@ function newStrategyPart () { compatibleSubType = undefined break case 'Formula': - compatibleType = '->' + 'Position Size' + '->' + 'Position Rate' + '->' + 'Phase' + '->' + compatibleType = '->' + 'Position Size' + '->' + 'Position Rate' + '->' + 'Phase' + '->' + 'Announcement' + '->' compatibleSubType = undefined break case 'Next Phase Event': diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 217bc9ab0..a47d7728f 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -508,6 +508,20 @@ function newStrategyPartConstructor () { strategyPart.codeEditor.initialize() strategyPart.codeEditor.container.connectToParent(strategyPart.container, false, false, true, true, false, false, false, false) addLeftIcons(menuItemsInitialValues, floatingObject) + menuItemsInitialValues.push( + { + action: 'Add Formula', + actionFunction: payload.onMenuItemClick, + label: 'Add Formula', + visible: true, + relatedStrategyPart: 'Formula', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -60 + } + ) + addLeftIcons(menuItemsInitialValues, floatingObject) menuItemsInitialValues.push( { action: 'Edit Announcement', @@ -519,7 +533,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -40, + angle: -20, dontShowAtFullscreen: true } ) @@ -536,7 +550,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0 + angle: 20 } ) menuItemsInitialValues.push( @@ -550,7 +564,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 40 + angle: 60 } ) break diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js index 3bce0a287..882edb1eb 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js @@ -261,6 +261,12 @@ function newNodeChildren () { childrenCount: 0, childIndex: undefined } + if (parentNode.formula !== undefined) { + response.childrenCount++ + if (parentNode.formula.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index d72cc8d7c..544556f49 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -386,6 +386,9 @@ function newNodeDeleter () { } } } + if (node.formula !== undefined) { + deleteFormula(node.formula, rootNodes) + } completeDeletion(node, rootNodes) destroyPart(node) cleanNode(node) diff --git a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js index add0f0f78..a0e8b4a94 100644 --- a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js +++ b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js @@ -483,6 +483,10 @@ function newOnFocus () { } } case 'Announcement': { + child = getNodeThatIsOnFocus(node.formula) + if (child !== undefined) { + return child + } if (node.payload.uiObject.isOnFocus === true) { return node } else { diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 5ca13c5c6..d36de9dae 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -426,6 +426,9 @@ function newPartsFromNodes () { } case 'Announcement': { createPart('Announcement', node.name, node, parentNode, chainParent, 'Announcement') + if (node.formula !== undefined) { + createPartFromNode(node.formula, node, node) + } return } case 'Layer Manager': { diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index e22043249..3b934e5aa 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -677,7 +677,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - code: node.code + code: node.code, + formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { object.id = node.id diff --git a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js index 826ad1b8a..70b5620ce 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js +++ b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js @@ -483,6 +483,11 @@ function newShortcutKeys () { } } case 'Announcement': { + let child + child = getNodeByShortcutKey(node.formula, searchingKey) + if (child !== undefined) { + return child + } if (node.payload.uiObject.shortcutKey === searchingKey) { return node } else {