Auto Scale fully implemented

This commit is contained in:
Luis Fernando Molina committed 2020-02-14 22:13:31 +01:00
1 parent 26f986ecd2
commit 4600e96ef5
81 files changed
+967 -805

No files matched your search

+1 -1
View File
@@ -93,7 +93,7 @@ function newAnimation () {
callBackFunction()
let t1 = performance.now()
timeConsumed = t1 - t0
if (key === 'Chart Space Draw') {
if (key === 'Charting Space Draw') {
if (Math.random() * 100 > 99) {
totalConsumption = 0
totalCounter = 0
+40 -41
View File
@@ -32,12 +32,12 @@ function newCanvas () {
let thisObject = {
eventHandler: undefined,
topSpace: undefined,
chartSpace: undefined,
chartingSpace: undefined,
floatingSpace: undefined,
panelsSpace: undefined,
cockpitSpace: undefined,
bottomSpace: undefined,
designerSpace: undefined,
designSpace: undefined,
animation: undefined,
initialize: initialize,
finalize: finalize
@@ -53,7 +53,7 @@ function newCanvas () {
function finalize () {
try {
thisObject.chartSpace.finalize()
thisObject.chartingSpace.finalize()
thisObject.floatingSpace.finalize()
browserCanvas.removeEventListener('mousedown', onMouseDown, false)
@@ -95,8 +95,8 @@ function newCanvas () {
thisObject.topSpace = newTopSpace()
thisObject.topSpace.initialize()
thisObject.designerSpace = newDesignerSpace()
thisObject.designerSpace.initialize()
thisObject.designSpace = newDesignSpace()
thisObject.designSpace.initialize()
thisObject.cockpitSpace = newCockpitSpace()
thisObject.cockpitSpace.initialize()
@@ -104,8 +104,8 @@ function newCanvas () {
thisObject.panelsSpace = newPanelsSpace()
thisObject.panelsSpace.initialize()
thisObject.chartSpace = newChartSpace()
thisObject.chartSpace.initialize()
thisObject.chartingSpace = newChartingSpace()
thisObject.chartingSpace.initialize()
thisObject.bottomSpace = thisObject.cockpitSpace
@@ -122,16 +122,16 @@ function newCanvas () {
/* Spcaces Physics */
animation.addCallBackFunction('CockpitSpace Physics', thisObject.cockpitSpace.physics)
animation.addCallBackFunction('Floating Space Physics', thisObject.floatingSpace.physics)
animation.addCallBackFunction('Chart Space Physics', thisObject.chartSpace.physics)
animation.addCallBackFunction('Designer Space Physics', thisObject.designerSpace.physics)
animation.addCallBackFunction('Charting Space Physics', thisObject.chartingSpace.physics)
animation.addCallBackFunction('Design Space Physics', thisObject.designSpace.physics)
animation.addCallBackFunction('Panels Space Physics', thisObject.panelsSpace.physics)
/* Spcaces Drawing */
animation.addCallBackFunction('Floating Space Draw', thisObject.floatingSpace.draw)
animation.addCallBackFunction('Chart Space Draw', thisObject.chartSpace.draw)
animation.addCallBackFunction('Charting Space Draw', thisObject.chartingSpace.draw)
animation.addCallBackFunction('Panels Space', thisObject.panelsSpace.draw)
animation.addCallBackFunction('CockpitSpace Draw', thisObject.cockpitSpace.draw)
animation.addCallBackFunction('Designer Space Draw', thisObject.designerSpace.draw)
animation.addCallBackFunction('Design Space Draw', thisObject.designSpace.draw)
animation.addCallBackFunction('Top Space Draw', thisObject.topSpace.draw)
animation.addCallBackFunction('Splash Screen Draw', splashScreen.draw)
animation.start()
@@ -231,7 +231,7 @@ function newCanvas () {
function onKeyDown (event) {
checkMediaRecording(event)
let nodeOnFocus = canvas.designerSpace.workspace.getNodeThatIsOnFocus()
let nodeOnFocus = canvas.designSpace.workspace.getNodeThatIsOnFocus()
if (nodeOnFocus !== undefined) {
if (nodeOnFocus.payload.uiObject.codeEditor !== undefined) {
if (nodeOnFocus.payload.uiObject.codeEditor.visible === true) {
@@ -297,22 +297,22 @@ function newCanvas () {
}
if (event.shiftKey === true && event.ctrlKey === false && event.code === 'ArrowLeft') {
canvas.chartSpace.oneScreenLeft()
canvas.chartingSpace.oneScreenLeft()
return
}
if (event.shiftKey === true && event.ctrlKey === false && event.code === 'ArrowRight') {
canvas.chartSpace.oneScreenRight()
canvas.chartingSpace.oneScreenRight()
return
}
if (event.shiftKey === true && event.code === 'ArrowUp') {
canvas.chartSpace.oneScreenUp()
canvas.chartingSpace.oneScreenUp()
return
}
if (event.shiftKey === true && event.code === 'ArrowDown') {
canvas.chartSpace.oneScreenDown()
canvas.chartingSpace.oneScreenDown()
return
}
@@ -360,7 +360,7 @@ function newCanvas () {
/* From here we prevent the default behaviour */
event.preventDefault()
let nodeUsingThisKey = canvas.designerSpace.workspace.getNodeByShortcutKey(event.key)
let nodeUsingThisKey = canvas.designSpace.workspace.getNodeByShortcutKey(event.key)
if (nodeOnFocus === undefined && nodeUsingThisKey !== undefined) {
/* Then we displace the whole workspace to center it at the node using this key */
@@ -451,7 +451,7 @@ function newCanvas () {
x: event.x,
y: event.y
}
thisObject.designerSpace.workspace.spawn(reader.result, mousePosition)
thisObject.designSpace.workspace.spawn(reader.result, mousePosition)
}
}
} catch (err) {
@@ -470,9 +470,9 @@ function newCanvas () {
let container
/* We check if the mouse is over an element of the Designer Space / */
/* We check if the mouse is over an element of the Design Space / */
container = thisObject.designerSpace.getContainer(point)
container = thisObject.designSpace.getContainer(point)
if (container !== undefined && container.isDraggeable === true) {
containerBeingDragged = container
@@ -528,9 +528,9 @@ function newCanvas () {
return
}
/* we check if it is over any of the existing containers at the Chart Space. */
/* we check if it is over any of the existing containers at the Charting Space. */
container = thisObject.chartSpace.getContainer(point, GET_CONTAINER_PURPOSE.DRAGGING)
container = thisObject.chartingSpace.getContainer(point, GET_CONTAINER_PURPOSE.DRAGGING)
if (container !== undefined) {
if (container.isDraggeable === true) {
@@ -567,7 +567,6 @@ function newCanvas () {
function onMouseClick (event) {
try {
console.log('ignoreNextClick', ignoreNextClick)
if (ignoreNextClick === true) {
ignoreNextClick = false
return
@@ -578,9 +577,9 @@ function newCanvas () {
let container
/* We check if the mouse is over an element of the Designer Space / */
/* We check if the mouse is over an element of the Design Space / */
container = thisObject.designerSpace.getContainer(point)
container = thisObject.designSpace.getContainer(point)
if (container !== undefined && container.isClickeable === true) {
container.eventHandler.raiseEvent('onMouseClick', point)
@@ -614,9 +613,9 @@ function newCanvas () {
return
}
/* If it is not, then we check if it is over any of the existing containers at the Chart Space. */
/* If it is not, then we check if it is over any of the existing containers at the Charting Space. */
container = thisObject.chartSpace.getContainer(point, GET_CONTAINER_PURPOSE.MOUSE_CLICK)
container = thisObject.chartingSpace.getContainer(point, GET_CONTAINER_PURPOSE.MOUSE_CLICK)
if (container !== undefined && container.isClickeable === true) {
container.eventHandler.raiseEvent('onMouseClick', point)
@@ -657,9 +656,9 @@ function newCanvas () {
point.x = event.pageX
point.y = event.pageY - CURRENT_TOP_MARGIN
if (canvas.chartSpace.viewport !== undefined) {
canvas.chartSpace.viewport.mousePosition.x = point.x
canvas.chartSpace.viewport.mousePosition.y = point.y
if (canvas.chartingSpace.viewport !== undefined) {
canvas.chartingSpace.viewport.mousePosition.x = point.x
canvas.chartingSpace.viewport.mousePosition.y = point.y
}
if (containerDragStarted === true || floatingObjectDragStarted === true || viewPortBeingDragged === true) {
@@ -713,8 +712,8 @@ function newCanvas () {
let container
/* We check if the mouse is over an element of the Strategy Space / */
if (thisObject.designerSpace !== undefined) {
container = thisObject.designerSpace.getContainer(point)
if (thisObject.designSpace !== undefined) {
container = thisObject.designSpace.getContainer(point)
if (container !== undefined && container.detectMouseOver === true) {
containerFound()
@@ -752,9 +751,9 @@ function newCanvas () {
}
}
/* If it is not, then we check if it is over any of the existing containers at the Chart Space. */
if (thisObject.chartSpace !== undefined) {
container = thisObject.chartSpace.getContainer(point, GET_CONTAINER_PURPOSE.MOUSE_OVER)
/* If it is not, then we check if it is over any of the existing containers at the Charting Space. */
if (thisObject.chartingSpace !== undefined) {
container = thisObject.chartingSpace.getContainer(point, GET_CONTAINER_PURPOSE.MOUSE_OVER)
if (container !== undefined && container.detectMouseOver === true) {
containerFound()
@@ -817,16 +816,16 @@ function newCanvas () {
return false // This instructs the browser not to take the event and scroll the page.
}
/* Chart Space. */
/* Charting Space. */
container = canvas.chartSpace.getContainer({ x: point.x, y: point.y }, GET_CONTAINER_PURPOSE.MOUSE_WHEEL)
container = canvas.chartingSpace.getContainer({ x: point.x, y: point.y }, GET_CONTAINER_PURPOSE.MOUSE_WHEEL)
if (container !== undefined && container.isWheelable === true) {
container.eventHandler.raiseEvent('onMouseWheel', event)
return false // This instructs the browser not to take the event and scroll the page.
}
if (container !== undefined) {
canvas.chartSpace.viewport.onMouseWheel(event)
canvas.chartingSpace.viewport.onMouseWheel(event)
return false
}
@@ -887,7 +886,7 @@ function newCanvas () {
y: dragVector.upY - dragVector.downY
}
canvas.chartSpace.viewport.displace(displaceVector)
canvas.chartingSpace.viewport.displace(displaceVector)
}
if (containerDragStarted) {
if (containerBeingDragged !== undefined) {
@@ -898,7 +897,7 @@ function newCanvas () {
}
let downNoZoom
downNoZoom = canvas.chartSpace.viewport.unTransformThisPoint(downCopy)
downNoZoom = canvas.chartingSpace.viewport.unTransformThisPoint(downCopy)
let upCopy = {
x: dragVector.upX,
@@ -906,7 +905,7 @@ function newCanvas () {
}
let upNoZoom
upNoZoom = canvas.chartSpace.viewport.unTransformThisPoint(upCopy)
upNoZoom = canvas.chartingSpace.viewport.unTransformThisPoint(upCopy)
displaceVector = {
x: upNoZoom.x - downNoZoom.x,
@@ -15,10 +15,13 @@ function newCoordinateSystem () {
maxWidth: undefined,
scale: undefined,
eventHandler: undefined,
autoMinScale: true,
autoMaxScale: true,
autoMinXScale: true,
autoMaxXScale: true,
autoMinYScale: true,
autoMaxYScale: true,
physics: physics,
reportValue: reportValue,
reportXValue: reportXValue,
reportYValue: reportYValue,
zoomX: zoomX,
zoomY: zoomY,
recalculateScale: recalculateScale,
@@ -48,9 +51,13 @@ function newCoordinateSystem () {
thisObject.eventHandler = newEventHandler()
thisObject.eventHandler.name = 'Coordinate System'
let newMax = -VERY_LARGE_NUMBER
let newMin = VERY_LARGE_NUMBER
let notValueReported = true
let newXMax = -VERY_LARGE_NUMBER
let newXMin = VERY_LARGE_NUMBER
let noXValueReported = true
let newYMax = -VERY_LARGE_NUMBER
let newYMin = VERY_LARGE_NUMBER
let noYValueReported = true
return thisObject
@@ -74,46 +81,80 @@ function newCoordinateSystem () {
}
function physics () {
if ((thisObject.autoMinScale === true || thisObject.autoMaxScale === true) && notValueReported === false) {
let mustRecalculate = false
let mustRecalculate = false
if (thisObject.autoMaxScale === true && thisObject.max.y !== newMax) {
thisObject.max.y = newMax
if ((thisObject.autoMinXScale === true || thisObject.autoMaxXScale === true) && noXValueReported === false) {
if (thisObject.autoMaxXScale === true && thisObject.max.x !== newXMax) {
thisObject.max.x = newXMax
mustRecalculate = true
}
if (thisObject.autoMaxScale === true) {
newMax = -VERY_LARGE_NUMBER
if (thisObject.autoMaxXScale === true) {
newXMax = -VERY_LARGE_NUMBER
}
if (thisObject.autoMinScale === true && thisObject.min.y !== newMin) {
thisObject.min.y = newMin
newMin = VERY_LARGE_NUMBER
if (thisObject.autoMinXScale === true && thisObject.min.x !== newXMin) {
thisObject.min.x = newXMin
newXMin = VERY_LARGE_NUMBER
mustRecalculate = true
}
if (thisObject.autoMinScale === true) {
newMin = VERY_LARGE_NUMBER
}
if (mustRecalculate === true) {
recalculateScale()
if (thisObject.autoMinXScale === true) {
newXMin = VERY_LARGE_NUMBER
}
/* Reseting this to start over at each cycle. */
noXValueReported = true
}
notValueReported = true
if ((thisObject.autoMinYScale === true || thisObject.autoMaxYScale === true) && noYValueReported === false) {
if (thisObject.autoMaxYScale === true && thisObject.max.y !== newYMax) {
thisObject.max.y = newYMax
mustRecalculate = true
}
if (thisObject.autoMaxYScale === true) {
newYMax = -VERY_LARGE_NUMBER
}
if (thisObject.autoMinYScale === true && thisObject.min.y !== newYMin) {
thisObject.min.y = newYMin
newYMin = VERY_LARGE_NUMBER
mustRecalculate = true
}
if (thisObject.autoMinYScale === true) {
newYMin = VERY_LARGE_NUMBER
}
/* Reseting this to start over at each cycle. */
noYValueReported = true
}
if (mustRecalculate === true) {
recalculateScale()
}
}
function reportValue (value) {
if (thisObject.autoMinScale === true) {
if (value < newMin) { newMin = value }
notValueReported = false
function reportXValue (value) {
if (thisObject.autoMinXScale === true) {
if (value < newXMin) { newXMin = value }
noXValueReported = false
}
if (thisObject.autoMaxScale === true) {
if (value > newMax) { newMax = value }
notValueReported = false
if (thisObject.autoMaxXScale === true) {
if (value > newXMax) { newXMax = value }
noXValueReported = false
}
}
function reportYValue (value) {
if (thisObject.autoMinYScale === true) {
if (value < newYMin) { newYMin = value }
noYValueReported = false
}
if (thisObject.autoMaxYScale === true) {
if (value > newYMax) { newYMax = value }
noYValueReported = false
}
}
@@ -402,15 +402,15 @@ function newEdgeEditor () {
y: pointB4.y + edgeSize
}
pointA1 = canvas.chartSpace.viewport.fitIntoViewport(pointA1)
pointA2 = canvas.chartSpace.viewport.fitIntoViewport(pointA2)
pointA3 = canvas.chartSpace.viewport.fitIntoViewport(pointA3)
pointA4 = canvas.chartSpace.viewport.fitIntoViewport(pointA4)
pointA1 = canvas.chartingSpace.viewport.fitIntoViewport(pointA1)
pointA2 = canvas.chartingSpace.viewport.fitIntoViewport(pointA2)
pointA3 = canvas.chartingSpace.viewport.fitIntoViewport(pointA3)
pointA4 = canvas.chartingSpace.viewport.fitIntoViewport(pointA4)
pointB1 = canvas.chartSpace.viewport.fitIntoViewport(pointB1)
pointB2 = canvas.chartSpace.viewport.fitIntoViewport(pointB2)
pointB3 = canvas.chartSpace.viewport.fitIntoViewport(pointB3)
pointB4 = canvas.chartSpace.viewport.fitIntoViewport(pointB4)
pointB1 = canvas.chartingSpace.viewport.fitIntoViewport(pointB1)
pointB2 = canvas.chartingSpace.viewport.fitIntoViewport(pointB2)
pointB3 = canvas.chartingSpace.viewport.fitIntoViewport(pointB3)
pointB4 = canvas.chartingSpace.viewport.fitIntoViewport(pointB4)
browserCanvasContext.setLineDash([0, 0])
@@ -54,6 +54,7 @@ function newTimeMachine () {
let rateScaleMouseOverEventSuscriptionId
let timeFrameScaleEventSuscriptionId
let timeFrameScaleMouseOverEventSuscriptionId
let onScaleChangedEventSubscriptionId
setupContainer()
return thisObject
@@ -71,8 +72,9 @@ function newTimeMachine () {
}
function finalize () {
canvas.chartSpace.viewport.eventHandler.stopListening(onViewportPositionChangedEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(onViewportZoomChangedEventSuscriptionId)
canvas.chartingSpace.viewport.eventHandler.stopListening(onViewportPositionChangedEventSuscriptionId)
canvas.chartingSpace.viewport.eventHandler.stopListening(onViewportZoomChangedEventSuscriptionId)
timeMachineCoordinateSystem.eventHandler.stopListening(onScaleChangedEventSubscriptionId)
if (thisObject.timeScale !== undefined) {
finalizeTimeScale()
@@ -146,15 +148,15 @@ function newTimeMachine () {
onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver)
onMouseNotOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver)
onViewportPositionChangedEventSuscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent('Position Changed', onViewportPositionChanged)
onViewportZoomChangedEventSuscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent('Zoom Changed', onViewportZoomChanged)
onViewportPositionChangedEventSuscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent('Position Changed', onViewportPositionChanged)
onViewportZoomChangedEventSuscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent('Zoom Changed', onViewportZoomChanged)
onScaleChangedEventSubscriptionId = timeMachineCoordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged)
thisObject.edgeEditor = newEdgeEditor()
thisObject.edgeEditor.initialize(timeMachineCoordinateSystem)
thisObject.edgeEditor.container.connectToParent(thisObject.container, true, true, false, true, true, true)
callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE)
callBackFunction()
}
function onMouseOver (event) {
@@ -262,6 +264,10 @@ function newTimeMachine () {
if (container !== undefined) {
if (container.isForThisPurpose(purpose)) {
return container
} else {
if (purpose === GET_CONTAINER_PURPOSE.DRAGGING && container.isClickeable === true) {
return container
}
}
}
}
@@ -278,7 +284,6 @@ function newTimeMachine () {
for (let i = 0; i < thisObject.timelineCharts.length; i++) {
container = thisObject.timelineCharts[i].getContainer(point, purpose)
if (container !== undefined) {
console.log('IN TIME MACHINE GOT THIS CONTAINER: ' + container.name)
if (container.isForThisPurpose(purpose)) {
if (thisObject.container.frame.isThisPointHere(point) === true) {
return container
@@ -317,14 +322,18 @@ function newTimeMachine () {
}
}
function onScaleChanged () {
recalculateCurrentDatetime()
}
function recalculateCurrentDatetime () {
/*
The view port was moved or the view port zoom level was changed and the center of the screen points to a different datetime that we
must calculate.
*/
let center = {
x: (canvas.chartSpace.viewport.visibleArea.bottomRight.x - canvas.chartSpace.viewport.visibleArea.bottomLeft.x) / 2,
y: (canvas.chartSpace.viewport.visibleArea.bottomRight.y - canvas.chartSpace.viewport.visibleArea.topRight.y) / 2
x: (canvas.chartingSpace.viewport.visibleArea.bottomRight.x - canvas.chartingSpace.viewport.visibleArea.bottomLeft.x) / 2,
y: (canvas.chartingSpace.viewport.visibleArea.bottomRight.y - canvas.chartingSpace.viewport.visibleArea.topRight.y) / 2
}
center = unTransformThisPoint(center, thisObject.container)
@@ -339,7 +348,7 @@ function newTimeMachine () {
}
function fitFunction (point, fullVisible, margin, topMargin, bottomMargin) {
/* We prevent a point to be out of the container AND out of the Chart Space in general */
/* We prevent a point to be out of the container AND out of the Charting Space in general */
let returnPoint = {
x: point.x,
@@ -369,7 +378,7 @@ function newTimeMachine () {
if (returnPoint.y - margin - topMargin < upCorner.y) { returnPoint.y = upCorner.y + margin + topMargin }
if (returnPoint.y + margin + bottomMargin > bottonCorner.y) { returnPoint.y = bottonCorner.y - margin - bottomMargin }
returnPoint = canvas.chartSpace.fitFunction(returnPoint, fullVisible)
returnPoint = canvas.chartingSpace.fitFunction(returnPoint, fullVisible)
return returnPoint
}
@@ -387,7 +396,7 @@ function newTimeMachine () {
}
function panelPhysics () {
if (thisObject.container.frame.isInViewPort() && canvas.chartSpace.viewport.zoomTargetLevel > ZOOM_OUT_THRESHOLD_FOR_HIDDING_PANELS) {
if (thisObject.container.frame.isInViewPort() && canvas.chartingSpace.viewport.zoomTargetLevel > ZOOM_OUT_THRESHOLD_FOR_HIDDING_PANELS) {
canvas.panelsSpace.unHide(thisObject.payload.node.id, 'Layers Panel')
canvas.panelsSpace.unHide(thisObject.payload.node.id, 'Plotter Panel')
} else {
@@ -531,7 +540,7 @@ function newTimeMachine () {
if (thisObject.rateScale !== undefined && thisObject.rateScale.isVisible === true) { thisObject.rateScale.draw() }
}
} else {
let icon = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let icon = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
if (icon !== undefined) {
if (icon.canDrawIcon === true) {
let imageSize = 40
@@ -581,7 +590,7 @@ function newTimeMachine () {
let imageSize = 25
let fontSize = 25
let opacity = 1
let icon = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let icon = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
position = transformThisPoint(position, thisObject.container)
printLabel(thisObject.payload.node.name, position.x + 30, position.y - 10, opacity, fontSize)
@@ -239,6 +239,8 @@ function newTimelineChart () {
timelineChartCoordinateSystem.max.x = timeMachineCoordinateSystem.max.x
timelineChartCoordinateSystem.maxHeight = timeMachineCoordinateSystem.maxHeight
timelineChartCoordinateSystem.maxWidth = timeMachineCoordinateSystem.maxWidth
timelineChartCoordinateSystem.autoMinXScale = timeMachineCoordinateSystem.autoMinXScale
timelineChartCoordinateSystem.autoMaxXScale = timeMachineCoordinateSystem.autoMaxXScale
timelineChartCoordinateSystem.recalculateScale()
}
File renamed without changes.
@@ -384,7 +384,7 @@ function newUiObjectsFromNodes () {
payload.node = node
payload.parentNode = parentNode
payload.chainParent = chainParent
payload.onMenuItemClick = canvas.designerSpace.workspace.onMenuItemClick
payload.onMenuItemClick = canvas.designSpace.workspace.onMenuItemClick
node.payload = payload
node.type = uiObjectType
@@ -140,7 +140,7 @@ function newWorkspace () {
workingAtTask++
break
case 5:
canvas.chartSpace.reset()
canvas.chartingSpace.reset()
workingAtTask++
break
case 6:
+8 -8
View File
@@ -203,19 +203,19 @@ function newCircularMenuItem () {
temporaryStatus === STATUS_SECONDARY_WORK_FAILED
) && thisObject.secondaryAction !== undefined
) {
thisObject.iconOn = canvas.designerSpace.iconCollection.get(thisObject.secondaryIcon)
thisObject.iconOff = canvas.designerSpace.iconCollection.get(thisObject.secondaryIcon)
thisObject.iconOn = canvas.designSpace.iconCollection.get(thisObject.secondaryIcon)
thisObject.iconOff = canvas.designSpace.iconCollection.get(thisObject.secondaryIcon)
} else {
if (thisObject.relatedUiObject !== undefined) {
thisObject.iconOn = canvas.designerSpace.iconByUiObjectType.get(thisObject.relatedUiObject)
thisObject.iconOff = canvas.designerSpace.iconByUiObjectType.get(thisObject.relatedUiObject)
thisObject.iconOn = canvas.designSpace.iconByUiObjectType.get(thisObject.relatedUiObject)
thisObject.iconOff = canvas.designSpace.iconByUiObjectType.get(thisObject.relatedUiObject)
} else {
if (thisObject.iconPathOn !== undefined && thisObject.iconPathOff !== undefined) {
thisObject.iconOn = canvas.designerSpace.iconCollection.get(thisObject.iconPathOn)
thisObject.iconOff = canvas.designerSpace.iconCollection.get(thisObject.iconPathOff)
thisObject.iconOn = canvas.designSpace.iconCollection.get(thisObject.iconPathOn)
thisObject.iconOff = canvas.designSpace.iconCollection.get(thisObject.iconPathOff)
} else {
thisObject.iconOn = canvas.designerSpace.iconCollection.get(thisObject.icons[thisObject.actionStatus()])
thisObject.iconOff = canvas.designerSpace.iconCollection.get(thisObject.icons[thisObject.actionStatus()])
thisObject.iconOn = canvas.designSpace.iconCollection.get(thisObject.icons[thisObject.actionStatus()])
thisObject.iconOff = canvas.designSpace.iconCollection.get(thisObject.icons[thisObject.actionStatus()])
}
}
}
+1 -1
View File
@@ -261,7 +261,7 @@ function newFloatingObject () {
if (parent.payload.position === undefined) { return }
let distanceToParent = Math.sqrt(Math.pow(parent.payload.position.x - thisObject.container.frame.position.x, 2) + Math.pow(parent.payload.position.y - thisObject.container.frame.position.y, 2)) // ... we calculate the distance ...
let parentChildren = canvas.designerSpace.workspace.nodeChildren.childrenCount(parent, thisObject.payload.node)
let parentChildren = canvas.designSpace.workspace.nodeChildren.childrenCount(parent, thisObject.payload.node)
let axisCount = parentChildren.childrenCount
let axisIndex = parentChildren.childIndex
let baseAngle = 0
+7 -7
View File
@@ -427,7 +427,7 @@ function newUiObject () {
if (previousDistanceToChainParent !== undefined) {
if (ratio > THRESHOLD) {
canvas.designerSpace.workspace.chainDetachNode(thisObject.payload.node)
canvas.designSpace.workspace.chainDetachNode(thisObject.payload.node)
}
}
}
@@ -534,7 +534,7 @@ function newUiObject () {
if (previousDistanceToReferenceParent !== undefined) {
if (ratio > THRESHOLD) {
canvas.designerSpace.workspace.referenceDetachNode(thisObject.payload.node)
canvas.designSpace.workspace.referenceDetachNode(thisObject.payload.node)
}
}
}
@@ -657,7 +657,7 @@ function newUiObject () {
}
function iconPhysics () {
icon = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.type)
icon = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let nodeDefinition = APP_SCHEMA_MAP.get(thisObject.payload.node.type)
if (nodeDefinition.alternativeIcons !== undefined) {
let nodeToUse = thisObject.payload.node
@@ -685,7 +685,7 @@ function newUiObject () {
iconName = alternativeIcon.iconName
}
}
let newIcon = canvas.designerSpace.iconCollection.get(iconName)
let newIcon = canvas.designSpace.iconCollection.get(iconName)
if (newIcon !== undefined) {
icon = newIcon
}
@@ -694,7 +694,7 @@ function newUiObject () {
}
}
executingIcon = canvas.designerSpace.iconCollection.get('attractive')
executingIcon = canvas.designSpace.iconCollection.get('attractive')
}
function onFocus () {
@@ -748,12 +748,12 @@ function newUiObject () {
function onDragFinished (event) {
if (isChainAttaching === true) {
canvas.designerSpace.workspace.chainAttachNode(thisObject.payload.node, chainAttachToNode)
canvas.designSpace.workspace.chainAttachNode(thisObject.payload.node, chainAttachToNode)
chainAttachToNode = undefined
isChainAttaching = false
}
if (isReferenceAttaching === true) {
canvas.designerSpace.workspace.referenceAttachNode(thisObject.payload.node, referenceAttachToNode)
canvas.designSpace.workspace.referenceAttachNode(thisObject.payload.node, referenceAttachToNode)
referenceAttachToNode = undefined
isReferenceAttaching = false
}
+2 -2
View File
@@ -52,7 +52,7 @@ function newFrame () {
}
function isInViewPort () {
/* This function is usefull to know if the object who has this frame is currently appearing at least in part at the canvas.chartSpace.viewport */
/* This function is usefull to know if the object who has this frame is currently appearing at least in part at the canvas.chartingSpace.viewport */
point1 = {
x: 0,
@@ -69,7 +69,7 @@ function newFrame () {
point1 = transformThisPoint(point1, thisObject.container)
point3 = transformThisPoint(point3, thisObject.container)
if (point1.x < canvas.chartSpace.viewport.visibleArea.topRight.x && point1.y < canvas.chartSpace.viewport.visibleArea.bottomRight.y && point3.x > canvas.chartSpace.viewport.visibleArea.bottomLeft.x && point3.y > canvas.chartSpace.viewport.visibleArea.topLeft.y) {
if (point1.x < canvas.chartingSpace.viewport.visibleArea.topRight.x && point1.y < canvas.chartingSpace.viewport.visibleArea.bottomRight.y && point3.x > canvas.chartingSpace.viewport.visibleArea.bottomLeft.x && point3.y > canvas.chartingSpace.viewport.visibleArea.topLeft.y) {
return true
} else {
return false
+5 -4
View File
@@ -44,6 +44,7 @@ UI_FONT = {
const DEBUG = {}
const ZOOM_OUT_THRESHOLD_FOR_HIDDING_PANELS = 5 // This regulates some behavious changes that happens when the user zoom out below this level.
const ZOOM_OUT_THRESHOLD_FOR_CHANGING_TIME_FRAME = 5 // This help regulate when to change the Time Frame base on the level of zoom out.
const ZOOM_OUT_THRESHOLD_FOR_PACKING_OBJECTS_AT_THE_BOTTOM_OR_TOP_OF_VIEWPORT = 5
let FONT_ASPECT_RATIO = 0.32;
@@ -164,10 +165,10 @@ const _3_MINUTES_IN_MILISECONDS = 3 * 60 * 1000;
const _2_MINUTES_IN_MILISECONDS = 2 * 60 * 1000;
const _1_MINUTE_IN_MILISECONDS = 1 * 60 * 1000;
let NEW_SESSION_INITIAL_DATE = new Date(); // This value will be overwritten at the canvas.chartSpace.viewport.initialize if the user had a prevous session with this same browser.
let NEW_SESSION_INITIAL_DATE = new Date(); // This value will be overwritten at the canvas.chartingSpace.viewport.initialize if the user had a prevous session with this same browser.
let INITIAL_ZOOM_LEVEL = -28.25 // This is the zoom level at the view port in which the APP starts.
let INITIAL_TIME_PERIOD = ONE_DAY_IN_MILISECONDS // This value will be overwritten at the canvas.chartSpace.viewport.initialize if the user had a prevous session with this same browser.
let VERY_LARGE_NUMBER = 100000000000
let INITIAL_TIME_PERIOD = ONE_DAY_IN_MILISECONDS // This value will be overwritten at the canvas.chartingSpace.viewport.initialize if the user had a prevous session with this same browser.
let VERY_LARGE_NUMBER = 100000000000000
let CURRENT_TOP_MARGIN = window.canvasApp.topMargin
let AT_FULL_SCREEN_MODE = false
@@ -206,7 +207,7 @@ const PERIOD_05_MIN = "05-min";
const PERIOD_01_MIN = "01-min";
/*
We define here the size of the chartSpace. It has to bee enough big in order to accomodate all the charts we expect to display in this space.
We define here the size of the chartingSpace. It has to bee enough big in order to accomodate all the charts we expect to display in this space.
*/
const TIME_MACHINE_WIDTH = 320;
+3 -3
View File
@@ -472,7 +472,7 @@ function newLayer () {
let icon2
if (plotterModule.code.icon !== undefined) {
icon2 = canvas.designerSpace.iconCollection.get(plotterModule.code.icon)
icon2 = canvas.designSpace.iconCollection.get(plotterModule.code.icon)
}
let icon3 = getIcon(baseAsset)
@@ -490,9 +490,9 @@ function newLayer () {
}
}
if (iconName !== undefined) {
icon = canvas.designerSpace.iconCollection.get(iconName)
icon = canvas.designSpace.iconCollection.get(iconName)
} else {
icon = canvas.designerSpace.iconCollection.get(nodeDefinition.icon)
icon = canvas.designSpace.iconCollection.get(nodeDefinition.icon)
}
return icon
}
+5 -5
View File
@@ -60,8 +60,8 @@ function newLayersPanel () {
thisObject.container.frame.height = headerHeight
let position = { // Default position
x: canvas.chartSpace.viewport.visibleArea.topLeft.x,
y: canvas.chartSpace.viewport.visibleArea.topLeft.y
x: canvas.chartingSpace.viewport.visibleArea.topLeft.x,
y: canvas.chartingSpace.viewport.visibleArea.topLeft.y
}
thisObject.container.frame.position = position
@@ -189,7 +189,7 @@ function newLayersPanel () {
function panelSizePhysics () {
if (isInitialized === false || thisObject.visible === false || thisObject.isHidden === true) { return }
let viewPortHeight = canvas.chartSpace.viewport.visibleArea.bottomLeft.y - canvas.chartSpace.viewport.visibleArea.topLeft.y
let viewPortHeight = canvas.chartingSpace.viewport.visibleArea.bottomLeft.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y
if (viewPortHeight < headerHeight) {
thisObject.visible = false
@@ -386,8 +386,8 @@ function newLayersPanel () {
let label2 = thisObject.payload.node.payload.parentNode.name.substring(0, 18)
let label3 = ''
let icon1 = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.payload.parentNode.type)
let icon2 = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
let icon1 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.payload.parentNode.type)
let icon2 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
let backgroundColor = UI_COLOR.BLACK
+3 -3
View File
@@ -58,7 +58,7 @@ function newPanelTabButton () {
upPosition.y = thisObject.parentContainer.frame.position.y
downPosition.x = thisObject.parentContainer.frame.position.x
downPosition.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y
downPosition.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y
transitionPosition.x = upPosition.x
transitionPosition.y = upPosition.y
@@ -96,10 +96,10 @@ function newPanelTabButton () {
if (isInitialized === false) { return }
upPosition.x = thisObject.parentContainer.frame.position.x
upPosition.y = canvas.chartSpace.viewport.visibleArea.topRight.y
upPosition.y = canvas.chartingSpace.viewport.visibleArea.topRight.y
downPosition.x = thisObject.parentContainer.frame.position.x
downPosition.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y
downPosition.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y
if (thisObject.status === 'going down') {
if (transitionPosition.y < downPosition.y) {
+2 -2
View File
@@ -74,9 +74,9 @@ function newPanelsVisibleButton () {
function draw () {
let icon
if (thisObject.showPanels === true) {
icon = canvas.designerSpace.iconCollection.get('plotter-panel')
icon = canvas.designSpace.iconCollection.get('plotter-panel')
} else {
icon = canvas.designerSpace.iconCollection.get('social-bot')
icon = canvas.designSpace.iconCollection.get('toggle-panel-off')
}
drawIcon(icon, 1 / 2, 1 / 2, 0, 0, 14, thisObject.container)
+2 -2
View File
@@ -47,8 +47,8 @@ function newPlotterPanel () {
thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL
thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL
thisObject.container.frame.position.x = canvas.chartSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width - thisObject.container.frame.width * Math.random() * 8
thisObject.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height - thisObject.container.frame.height * Math.random() * 1.5
thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width - thisObject.container.frame.width * Math.random() * 8
thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height - thisObject.container.frame.height * Math.random() * 1.5
panelTabButton = newPanelTabButton()
panelTabButton.parentContainer = thisObject.container
+17 -17
View File
@@ -25,7 +25,7 @@ function newPlotter () {
let coordinateSystem
let plotterModuleConfig
let slotHeight = (canvas.chartSpace.viewport.visibleArea.bottomRight.y - canvas.chartSpace.viewport.visibleArea.topLeft.y) / 10 // This is the amount of slots available
let slotHeight = (canvas.chartingSpace.viewport.visibleArea.bottomRight.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y) / 10 // This is the amount of slots available
let mustRecalculateDataPoints = false
let atMousePositionFillStyles = new Map()
let atMousePositionStrokeStyles = new Map()
@@ -61,8 +61,8 @@ function newPlotter () {
try {
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId)
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId)
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId)
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId)
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId)
@@ -113,8 +113,8 @@ function newPlotter () {
fileCursor = dailyFiles.getFileCursor(pTimeFrame)
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent('Zoom Changed', onViewportZoomChanged)
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent('Position Changed', onViewportPositionChanged)
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent('Zoom Changed', onViewportZoomChanged)
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent('Position Changed', onViewportPositionChanged)
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent('Drag Finished', onDragFinished)
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent('Files Updated', onMarketFilesUpdated)
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent('Files Updated', onDailyFilesUpdated)
@@ -376,8 +376,8 @@ function newPlotter () {
let daysOnSides = getSideDays(timeFrame)
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem)
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem)
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem)
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem)
let dateDiff = rightDate.valueOf() - leftDate.valueOf()
@@ -429,8 +429,8 @@ function newPlotter () {
let daysOnSides = getSideDays(timeFrame)
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem)
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem)
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem)
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem)
let dateDiff = rightDate.valueOf() - leftDate.valueOf()
@@ -520,13 +520,13 @@ function newPlotter () {
beginPoint = transformThisPoint(beginPoint, thisObject.container)
endPoint = transformThisPoint(endPoint, thisObject.container)
beginPoint = canvas.chartSpace.viewport.fitIntoVisibleArea(beginPoint)
endPoint = canvas.chartSpace.viewport.fitIntoVisibleArea(endPoint)
beginPoint = canvas.chartingSpace.viewport.fitIntoVisibleArea(beginPoint)
endPoint = canvas.chartingSpace.viewport.fitIntoVisibleArea(endPoint)
beginPoint = thisObject.fitFunction(beginPoint)
endPoint = thisObject.fitFunction(endPoint)
if (endPoint.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || beginPoint.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (endPoint.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || beginPoint.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
continue
}
@@ -569,7 +569,7 @@ function newPlotter () {
y: y
}
/* Contributing to Auto-Scale */
coordinateSystem.reportValue(dataPoint.y)
coordinateSystem.reportYValue(dataPoint.y)
/*
The information we store in files is independent from the charing system and its coordinate systems.
@@ -577,7 +577,7 @@ function newPlotter () {
*/
dataPoint = coordinateSystem.transformThisPoint(dataPoint)
dataPoint = transformThisPoint(dataPoint, thisObject.container)
dataPoint = canvas.chartSpace.viewport.fitIntoVisibleArea(dataPoint)
dataPoint = canvas.chartingSpace.viewport.fitIntoVisibleArea(dataPoint)
dataPoint = thisObject.fitFunction(dataPoint)
/* Store the data point at the local map */
@@ -586,7 +586,7 @@ function newPlotter () {
if (plotterModuleConfig !== undefined) {
if (plotterModuleConfig.slot !== undefined) {
/* We reset the y coordinate since it will be transformed with another coordinate system to fit into a slot. */
dataPoint.y = (-1) * y * coordinateSystem.scale.y + (plotterModuleConfig.slot.number - 1) * slotHeight + canvas.chartSpace.viewport.visibleArea.topLeft.y
dataPoint.y = (-1) * y * coordinateSystem.scale.y + (plotterModuleConfig.slot.number - 1) * slotHeight + canvas.chartingSpace.viewport.visibleArea.topLeft.y
}
}
}
@@ -726,7 +726,7 @@ function newPlotter () {
y: dataPointObject.y
}
/* We make sure the points do not fall outside the viewport visible area. This step allways need to be done. */
dataPoint = canvas.chartSpace.viewport.fitIntoVisibleArea(dataPoint)
dataPoint = canvas.chartingSpace.viewport.fitIntoVisibleArea(dataPoint)
dataPoint = thisObject.fitFunction(dataPoint)
if (k === 0) {
browserCanvasContext.moveTo(dataPoint.x, dataPoint.y)
@@ -769,7 +769,7 @@ function newPlotter () {
}
}
if (coordinateSystem.autoMinScale === true || coordinateSystem.autosMaxScale === true) {
if (coordinateSystem.autoMinYScale === true || coordinateSystem.autosMaxScale === true) {
mustRecalculateDataPoints = true
} else {
mustRecalculateDataPoints = false
@@ -88,7 +88,7 @@ function newDashboard () {
function setBrowserEvents () {
window.onbeforeunload = onBrowserClosed
function onBrowserClosed () {
// canvas.designerSpace.workspace.stopAllRunningTasks()
// canvas.designSpace.workspace.stopAllRunningTasks()
}
}
}
+129 -50
View File
@@ -5,6 +5,7 @@ function newAutoScaleButton () {
parentContainer: undefined,
autoMinScale: undefined,
autoMaxScale: undefined,
setStatus: setStatus,
draw: draw,
getContainer: getContainer, // returns the inner most container that holds the point received by parameter.
initialize: initialize,
@@ -19,13 +20,15 @@ function newAutoScaleButton () {
thisObject.container.isDraggeable = false
thisObject.container.frame.containerName = 'Auto Scale Button'
let onMouseClickEventSuscriptionId
const ICON_SIZE = 36
let onMouseWheelEventSubscriptionId
let coordinateSystem
let axis
let currentStatus
return thisObject
function finalize () {
thisObject.container.eventHandler.stopListening(onMouseClickEventSuscriptionId)
thisObject.container.eventHandler.stopListening(onMouseWheelEventSubscriptionId)
thisObject.container.finalize()
thisObject.container = undefined
thisObject.fitFunction = undefined
@@ -33,83 +36,159 @@ function newAutoScaleButton () {
thisObject.panels = undefined
coordinateSystem = undefined
axis = undefined
}
function initialize (pCoordinateSystem) {
function initialize (pAxis, pCoordinateSystem) {
axis = pAxis
coordinateSystem = pCoordinateSystem
thisObject.autoMinScale = coordinateSystem.autoMinScale
thisObject.autoMaxScale = coordinateSystem.autoMaxScale
thisObject.autoMinScale = coordinateSystem.autoMinYScale
thisObject.autoMaxScale = coordinateSystem.autoMaxYScale
thisObject.container.frame.width = 25
thisObject.container.frame.height = 25
switch (axis) {
case 'X': {
thisObject.container.frame.width = ICON_SIZE
thisObject.container.frame.height = ICON_SIZE
let position = {
x: thisObject.container.parentContainer.frame.width * 5 / 8,
y: thisObject.container.parentContainer.frame.height / 2 - thisObject.container.frame.height / 2
let position = {
x: thisObject.container.parentContainer.frame.width * 7 / 8,
y: thisObject.container.parentContainer.frame.height / 2
}
thisObject.container.frame.position = position
break
}
case 'Y': {
thisObject.container.frame.width = ICON_SIZE
thisObject.container.frame.height = ICON_SIZE
let position = {
x: thisObject.container.parentContainer.frame.width * 7 / 8,
y: thisObject.container.parentContainer.frame.height / 2
}
thisObject.container.frame.position = position
break
}
}
thisObject.container.frame.position = position
/* Lets listen to our own events to react when we have a Mouse Click */
onMouseClickEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseClick', onMouseClick)
onMouseWheelEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel)
}
function onMouseClick (event) {
function setStatus (autoMinScale, autoMaxScale) {
thisObject.autoMinScale = autoMinScale
thisObject.autoMaxScale = autoMaxScale
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) {
thisObject.autoMinScale = true
thisObject.autoMaxScale = false
update()
return
currentStatus = 1
}
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) {
thisObject.autoMinScale = false
thisObject.autoMaxScale = true
update()
return
currentStatus = 2
}
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) {
thisObject.autoMinScale = true
thisObject.autoMaxScale = true
update()
return
currentStatus = 3
}
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) {
thisObject.autoMinScale = false
thisObject.autoMaxScale = false
update()
return
currentStatus = 4
}
}
function onMouseWheel (event) {
let factor
let delta = event.wheelDelta
if (delta < 0) {
delta = -1
} else {
delta = 1
}
currentStatus = currentStatus + delta
if (currentStatus === 5) { currentStatus = 1 }
if (currentStatus === 0) { currentStatus = 4 }
switch (currentStatus) {
case 1: {
thisObject.autoMinScale = false
thisObject.autoMaxScale = false
update()
return
}
case 2: {
thisObject.autoMinScale = true
thisObject.autoMaxScale = false
update()
return
}
case 3: {
thisObject.autoMinScale = false
thisObject.autoMaxScale = true
update()
return
}
case 4: {
thisObject.autoMinScale = true
thisObject.autoMaxScale = true
update()
return
}
}
function update () {
coordinateSystem.autoMinScale = thisObject.autoMinScale
coordinateSystem.autoMaxScale = thisObject.autoMaxScale
switch (axis) {
case 'X': {
coordinateSystem.autoMinXScale = thisObject.autoMinScale
coordinateSystem.autoMaxXScale = thisObject.autoMaxScale
break
}
case 'Y': {
coordinateSystem.autoMinYScale = thisObject.autoMinScale
coordinateSystem.autoMaxYScale = thisObject.autoMaxScale
break
}
}
coordinateSystem.recalculateScale()
}
}
function getContainer (point, purpose) {
console.log('INSIDE BUTTON')
if (thisObject.container.frame.isThisPointHere(point, true) === true) {
console.log('RETURNING BUTTON FROM BUTTON')
return thisObject.container
}
}
function draw () {
let icon
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) {
icon = canvas.designerSpace.iconCollection.get('plotter-panel')
switch (axis) {
case 'X': {
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) {
icon = canvas.designSpace.iconCollection.get('toggle-auto-time-scale-manual')
}
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) {
icon = canvas.designSpace.iconCollection.get('toggle-auto-time-scale-auto-min')
}
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) {
icon = canvas.designSpace.iconCollection.get('toggle-auto-time-scale-auto-max')
}
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) {
icon = canvas.designSpace.iconCollection.get('toggle-auto-time-scale-auto-min-max')
}
drawIcon(icon, 0, 0, 0, 0, ICON_SIZE, thisObject.container)
break
}
case 'Y': {
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === false) {
icon = canvas.designSpace.iconCollection.get('toggle-auto-scale-manual')
}
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) {
icon = canvas.designSpace.iconCollection.get('toggle-auto-scale-auto-min')
}
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) {
icon = canvas.designSpace.iconCollection.get('toggle-auto-scale-auto-max')
}
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) {
icon = canvas.designSpace.iconCollection.get('toggle-auto-scale-auto-min-max')
}
drawIcon(icon, 0, 0, 0, 0, ICON_SIZE, thisObject.container)
break
}
}
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === false) {
icon = canvas.designerSpace.iconCollection.get('shapes-polygon-body')
}
if (thisObject.autoMinScale === false && thisObject.autoMaxScale === true) {
icon = canvas.designerSpace.iconCollection.get('social-bot')
}
if (thisObject.autoMinScale === true && thisObject.autoMaxScale === true) {
icon = canvas.designerSpace.iconCollection.get('startup')
}
drawIcon(icon, 1 / 2, 1 / 2, 0, 0, 14, thisObject.container)
}
}
+20 -22
View File
@@ -91,11 +91,11 @@ function newRateScale () {
onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver)
onScaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged)
readObjectState()
autoScaleButton = newAutoScaleButton()
autoScaleButton.container.connectToParent(thisObject.container)
autoScaleButton.initialize(coordinateSystem)
autoScaleButton.initialize('Y', coordinateSystem)
readObjectState()
}
function onMouseOverSomeTimeMachineContainer (event) {
@@ -134,6 +134,11 @@ function newRateScale () {
}
function onMouseWheel (event) {
if (event.shiftKey === true) {
autoScaleButton.container.eventHandler.raiseEvent('onMouseWheel', event)
return
}
let factor
let morePower = 10
if (event.buttons === 4) { morePower = 1 } // Mouse wheel pressed.
@@ -150,15 +155,7 @@ function newRateScale () {
}
function getContainer (point, purpose) {
console.log(purpose, point.x, point.y)
if (thisObject.container.frame.isThisPointHere(point, true) === true) {
console.log('INSIDE')
let container = autoScaleButton.getContainer(point, purpose)
if (container !== undefined) {
console.log('RETURNING BUTTON FROM SCALE')
return container
}
if (purpose === GET_CONTAINER_PURPOSE.DRAGGING) {
return draggeableContainer
}
@@ -172,8 +169,8 @@ function newRateScale () {
let code = JSON.parse(thisObject.payload.node.code)
code.minValue = coordinateSystem.min.y
code.maxValue = coordinateSystem.max.y
code.autoMinScale = coordinateSystem.autoMinScale
code.autoMaxScale = coordinateSystem.autoMaxScale
code.autoMinScale = coordinateSystem.autoMinYScale
code.autoMaxScale = coordinateSystem.autoMaxYScale
thisObject.payload.node.code = JSON.stringify(code, null, 4)
} catch (err) {
// we ignore errors here since most likely they will be parsing errors.
@@ -193,19 +190,20 @@ function newRateScale () {
if (
thisObject.minValue !== code.minValue ||
thisObject.maxValue !== code.maxValue ||
coordinateSystem.autoMinScale !== code.autoMinScale ||
coordinateSystem.autoMaxScale !== code.autoMaxScale
coordinateSystem.autoMinYScale !== code.autoMinScale ||
coordinateSystem.autoMaxYScale !== code.autoMaxScale
) {
thisObject.minValue = code.minValue
thisObject.maxValue = code.maxValue
coordinateSystem.min.y = thisObject.minValue
coordinateSystem.max.y = thisObject.maxValue
if (code.autoMinScale !== undefined && (code.autoMinScale === true || code.autoMinScale === false)) {
coordinateSystem.autoMinScale = code.autoMinScale
}
if (code.autoMaxScale !== undefined && (code.autoMaxScale === true || code.autoMaxScale === false)) {
coordinateSystem.autoMaxScale = code.autoMaxScale
if (code.autoMinScale !== undefined && (code.autoMinScale === true || code.autoMinScale === false) && code.autoMaxScale !== undefined && (code.autoMaxScale === true || code.autoMaxScale === false)) {
coordinateSystem.autoMinYScale = code.autoMinScale
coordinateSystem.autoMaxYScale = code.autoMaxScale
autoScaleButton.setStatus(code.autoMinScale, code.autoMaxScale)
}
coordinateSystem.recalculateScale()
}
}
@@ -394,8 +392,8 @@ function newRateScale () {
let label3 = labelArray[1]
if (label3 === undefined) { label3 = '00' }
let icon1 = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
let icon2 = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let icon1 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
let icon2 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let backgroundColor = UI_COLOR.BLACK
+6 -6
View File
@@ -61,7 +61,7 @@ function newTimeFrameScale () {
function finalize () {
thisObject.container.eventHandler.stopListening(onMouseWheelEventSubscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(onViewportZoomChangedEventSubscriptionId)
canvas.chartingSpace.viewport.eventHandler.stopListening(onViewportZoomChangedEventSubscriptionId)
thisObject.container.eventHandler.stopListening(onMouseOverEventSubscriptionId)
thisObject.container.eventHandler.stopListening(onMouseNotOverEventSubscriptionId)
@@ -81,7 +81,7 @@ function newTimeFrameScale () {
newTimeFrame()
onMouseWheelEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseWheel', onMouseWheel)
onViewportZoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent('Zoom Changed', onViewportZoomChanged)
onViewportZoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent('Zoom Changed', onViewportZoomChanged)
onMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver)
onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver)
}
@@ -123,13 +123,13 @@ function newTimeFrameScale () {
}
function zoomOutPhysics () {
if ((thisObject.isVisible === true && previousIsVisible === false) && (canvas.chartSpace.viewport.zoomTargetLevel >= ZOOM_OUT_THRESHOLD_FOR_CHANGING_TIME_FRAME)) {
if ((thisObject.isVisible === true && previousIsVisible === false) && (canvas.chartingSpace.viewport.zoomTargetLevel >= ZOOM_OUT_THRESHOLD_FOR_CHANGING_TIME_FRAME)) {
let event = {}
event.timeFrame = thisObject.timeFrame
thisObject.container.eventHandler.raiseEvent('Time Frame Value Changed', event)
previousIsVisible = true
}
if ((thisObject.isVisible === false && previousIsVisible === true) || (canvas.chartSpace.viewport.zoomTargetLevel < ZOOM_OUT_THRESHOLD_FOR_CHANGING_TIME_FRAME)) {
if ((thisObject.isVisible === false && previousIsVisible === true) || (canvas.chartingSpace.viewport.zoomTargetLevel < ZOOM_OUT_THRESHOLD_FOR_CHANGING_TIME_FRAME)) {
let event = {}
event.timeFrame = ONE_DAY_IN_MILISECONDS
thisObject.container.eventHandler.raiseEvent('Time Frame Value Changed', event)
@@ -340,8 +340,8 @@ function newTimeFrameScale () {
let label2 = label[0]
let label3 = label[1].toUpperCase()
let icon1 = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
let icon2 = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let icon1 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
let icon2 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let backgroundColor = UI_COLOR.BLACK
+25 -3
View File
@@ -30,6 +30,7 @@ function newTimeScale () {
thisObject.container.frame.height = 40
let visible = true
let autoScaleButton
let isMouseOver
let onMouseWheelEventSubscriptionId
@@ -63,6 +64,9 @@ function newTimeScale () {
coordinateSystem = undefined
limitingContainer = undefined
mouse = undefined
autoScaleButton.finalize()
autoScaleButton = undefined
}
function initialize (pCoordinateSystem, pLimitingContainer) {
@@ -74,6 +78,10 @@ function newTimeScale () {
onMouseNotOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseNotOver', onMouseNotOver)
onScaleChangedEventSubscriptionId = coordinateSystem.eventHandler.listenToEvent('Scale Changed', onScaleChanged)
autoScaleButton = newAutoScaleButton()
autoScaleButton.container.connectToParent(thisObject.container)
autoScaleButton.initialize('X', coordinateSystem)
readObjectState()
}
@@ -108,6 +116,10 @@ function newTimeScale () {
}
function onMouseWheel (event) {
if (event.shiftKey === true) {
autoScaleButton.container.eventHandler.raiseEvent('onMouseWheel', event)
return
}
let factor
let morePower = 10
if (event.buttons === 4) { morePower = 1 } // Mouse wheel pressed.
@@ -126,7 +138,7 @@ function newTimeScale () {
saveObjectState()
}
function getContainer (point) {
function getContainer (point, purpose) {
if (thisObject.container.frame.isThisPointHere(point, true) === true) {
return thisObject.container
}
@@ -137,6 +149,8 @@ function newTimeScale () {
let code = JSON.parse(thisObject.payload.node.code)
code.fromDate = (new Date(coordinateSystem.min.x)).toISOString()
code.toDate = (new Date(coordinateSystem.max.x)).toISOString()
code.autoMinScale = coordinateSystem.autoMinXScale
code.autoMaxScale = coordinateSystem.autoMaxXScale
thisObject.payload.node.code = JSON.stringify(code, null, 4)
} catch (err) {
// we ignore errors here since most likely they will be parsing errors.
@@ -158,6 +172,12 @@ function newTimeScale () {
thisObject.toDate = Date.parse(code.toDate)
coordinateSystem.min.x = thisObject.fromDate
coordinateSystem.max.x = thisObject.toDate
if (code.autoMinScale !== undefined && (code.autoMinScale === true || code.autoMinScale === false) && code.autoMaxScale !== undefined && (code.autoMaxScale === true || code.autoMaxScale === false)) {
coordinateSystem.autoMinXScale = code.autoMinScale
coordinateSystem.autoMaxXScale = code.autoMaxScale
autoScaleButton.setStatus(code.autoMinScale, code.autoMaxScale)
}
coordinateSystem.recalculateScale()
}
}
@@ -229,6 +249,7 @@ function newTimeScale () {
function draw () {
drawScaleBox()
autoScaleButton.draw()
if (visible === false) {
drawScaleDisplayCover(thisObject.container)
}
@@ -237,6 +258,7 @@ function newTimeScale () {
function drawForeground () {
if (isMouseOver === true) {
drawScaleBox()
autoScaleButton.draw()
}
}
@@ -249,8 +271,8 @@ function newTimeScale () {
let label2 = labelArray[1] + ' ' + labelArray[2] + ' ' + labelArray[3]
let label3 = labelArray[4]
let icon1 = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
let icon2 = canvas.designerSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let icon1 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.payload.parentNode.type)
let icon2 = canvas.designSpace.iconByUiObjectType.get(thisObject.payload.node.type)
let backgroundColor = UI_COLOR.BLACK
@@ -6,8 +6,8 @@ changes, then all charts in it are replotted with the corresponging data.
*/
function newChartSpace () {
const MODULE_NAME = 'Chart Space'
function newChartingSpace () {
const MODULE_NAME = 'Charting Space'
const ERROR_LOG = true
const logger = newWebDebugLog()
logger.fileName = MODULE_NAME
@@ -84,7 +84,7 @@ function newChartSpace () {
}
function initialize () {
let rootNodes = canvas.designerSpace.workspace.workspaceNode.rootNodes
let rootNodes = canvas.designSpace.workspace.workspaceNode.rootNodes
for (let i = 0; i < rootNodes.length; i++) {
let rootNode = rootNodes[i]
if (rootNode.type === 'Charting Space') {
@@ -93,7 +93,7 @@ function newChartSpace () {
}
if (thisObject.payload === undefined) {
if (ERROR_LOG === true) { logger.write('[WARN] initialize -> There must exist a Charting Space at the Designer Space in order to enable Charts. PLease create one and refreash your browser. ') }
if (ERROR_LOG === true) { logger.write('[WARN] initialize -> There must exist a Charting Space at the Design Space in order to enable Charts. PLease create one and refreash your browser. ') }
return
}
@@ -167,7 +167,7 @@ function newChartSpace () {
y: browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100
}
canvas.chartSpace.viewport.displace(displaceVector)
canvas.chartingSpace.viewport.displace(displaceVector)
}
function oneScreenDown () {
@@ -176,7 +176,7 @@ function newChartSpace () {
y: -browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100
}
canvas.chartSpace.viewport.displace(displaceVector)
canvas.chartingSpace.viewport.displace(displaceVector)
}
function oneScreenLeft () {
@@ -185,7 +185,7 @@ function newChartSpace () {
y: 0
}
canvas.chartSpace.viewport.displace(displaceVector, true)
canvas.chartingSpace.viewport.displace(displaceVector, true)
}
function oneScreenRight () {
@@ -194,7 +194,7 @@ function newChartSpace () {
y: 0
}
canvas.chartSpace.viewport.displace(displaceVector, true)
canvas.chartingSpace.viewport.displace(displaceVector, true)
}
function fitFunction (point, fullVisible) {
@@ -265,16 +265,21 @@ function newChartSpace () {
if (thisObject.payload.node === undefined) { return }
syncWithDesignerLoop = syncWithDesignerLoop + 0.00000000001
if (thisObject.payload.node.timeMachines !== undefined) {
for (let j = 0; j < thisObject.payload.node.timeMachines.length; j++) {
let node = thisObject.payload.node.timeMachines[j]
let timeMachine = timeMachinesMap.get(node.id)
if (timeMachine === undefined) {
if (thisObject.payload.node.dashboards !== undefined) {
for (let i = 0; i < thisObject.payload.node.dashboards.length; i++) {
let dashboard = thisObject.payload.node.dashboards[i]
if (dashboard.timeMachines !== undefined) {
for (let j = 0; j < dashboard.timeMachines.length; j++) {
let node = dashboard.timeMachines[j]
let timeMachine = timeMachinesMap.get(node.id)
if (timeMachine === undefined) {
/* The time machine node is new, thus we need to initialize a new timeMachine */
initializeTimeMachine(node, syncWithDesignerLoop)
} else {
initializeTimeMachine(node, syncWithDesignerLoop)
} else {
/* The time machine already exists, we tag it as existing at the current loop. */
timeMachine.syncWithDesignerLoop = syncWithDesignerLoop
timeMachine.syncWithDesignerLoop = syncWithDesignerLoop
}
}
}
}
}
@@ -309,16 +314,11 @@ function newChartSpace () {
timeMachine.container.frame.position.y = browserCanvas.height / 2 - TIME_MACHINE_HEIGHT / 2
timeMachine.initialize(onTimeMachineInitialized)
function onTimeMachineInitialized (err) {
if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) {
if (ERROR_LOG === true) { logger.write('[ERROR] syncWithDesigner -> initializeTimeMachine -> Initialization Failed. -> Err ' + err.message) }
return
}
function onTimeMachineInitialized () {
thisObject.timeMachines.push(timeMachine)
timeMachine.payload.uiObject.setValue('')
if (canvas.chartSpace.viewport !== undefined) {
canvas.chartSpace.viewport.raiseEvents() // These events will impacts on objects just initialized.
if (canvas.chartingSpace.viewport !== undefined) {
canvas.chartingSpace.viewport.raiseEvents() // These events will impacts on objects just initialized.
}
}
}
@@ -333,8 +333,8 @@ function newChartSpace () {
thisObject.visible = true
}
if (canvas.chartSpace.viewport !== undefined) {
canvas.chartSpace.viewport.resize()
if (canvas.chartingSpace.viewport !== undefined) {
canvas.chartingSpace.viewport.resize()
}
}
+7 -7
View File
@@ -48,7 +48,7 @@
thisObject.container.frame.position.x = 0
let INITIAL_POSITION
if (canvas.designerSpace.workspace.enabled === true) {
if (canvas.designSpace.workspace.enabled === true) {
let localStorage = window.localStorage.getItem(MODULE_NAME)
if (localStorage !== null) {
storage = JSON.parse(localStorage)
@@ -132,7 +132,7 @@
thisObject.status = 'MIDDLE'
if (canvas.designerSpace.workspace.enabled === true) {
if (canvas.designSpace.workspace.enabled === true) {
thisObject.container.isDraggeable = true
} else {
thisObject.container.isDraggeable = false
@@ -141,10 +141,10 @@
if (thisObject.container.frame.position.y > browserCanvas.height * 99.5 / 100 - COCKPIT_SPACE_HEIGHT) {
thisObject.container.frame.position.y = browserCanvas.height - COCKPIT_SPACE_HEIGHT
thisObject.status = 'BOTTOM'
canvas.designerSpace.makeInvisible()
canvas.designSpace.makeInvisible()
canvas.floatingSpace.makeInvisible()
} else {
canvas.designerSpace.makeVisible()
canvas.designSpace.makeVisible()
canvas.floatingSpace.makeVisible()
}
@@ -161,8 +161,8 @@
spacePosition: COCKPIT_SPACE_POSITION
}
window.localStorage.setItem(MODULE_NAME, JSON.stringify(storage))
if (canvas.chartSpace.viewport !== undefined) {
canvas.chartSpace.viewport.resize()
if (canvas.chartingSpace.viewport !== undefined) {
canvas.chartingSpace.viewport.resize()
}
}
@@ -219,7 +219,7 @@
browserCanvasContext.closePath()
browserCanvasContext.fill()
if (canvas.designerSpace.workspace.enabled === true) {
if (canvas.designSpace.workspace.enabled === true) {
arrow()
}
}
@@ -1,5 +1,5 @@
function newDesignerSpace () {
function newDesignSpace () {
const MODULE_NAME = 'Strategy Space'
let thisObject = {
sidePanel: undefined,
@@ -241,7 +241,17 @@ function newDesignerSpace () {
'task-manager',
'session-based-data',
'session-independent-data',
'session-reference'
'session-reference',
'dashboard',
'toggle-auto-scale-manual',
'toggle-auto-scale-auto-min-max',
'toggle-auto-scale-auto-max',
'toggle-auto-scale-auto-min',
'toggle-panel-off',
'toggle-auto-time-scale-auto-min',
'toggle-auto-time-scale-auto-max',
'toggle-auto-time-scale-auto-min-max',
'toggle-auto-time-scale-manual'
]
for (let i = 0; i < iconsNames.length; i++) {
@@ -281,7 +291,7 @@ function newDesignerSpace () {
if (thisObject.sidePanel !== undefined) {
container = thisObject.sidePanel.getContainer(point)
if (container !== undefined) {
container.space = 'Designer Space'
container.space = 'Design Space'
return container
}
}
+16 -16
View File
@@ -43,8 +43,8 @@ function newPanelsSpace () {
case 'Layers Panel':
{
panel = newLayersPanel()
panel.fitFunction = canvas.chartSpace.fitFunction
panel.container.isVisibleFunction = canvas.chartSpace.isThisPointVisible
panel.fitFunction = canvas.chartingSpace.fitFunction
panel.container.isVisibleFunction = canvas.chartingSpace.isThisPointVisible
panel.type = 'Layers Panel'
break
}
@@ -52,14 +52,14 @@ function newPanelsSpace () {
{
if (pParameters.panelNode.code.isLegacy !== true) {
panel = newPlotterPanel()
panel.fitFunction = canvas.chartSpace.fitFunction
panel.container.isVisibleFunction = canvas.chartSpace.isThisPointVisible
panel.fitFunction = canvas.chartingSpace.fitFunction
panel.container.isVisibleFunction = canvas.chartingSpace.isThisPointVisible
panel.session = pSession
panel.initialize(pParameters.panelNode)
} else {
panel = getNewPlotterPanel(pParameters.dataMine, pParameters.plotterCodeName, pParameters.moduleCodeName, pParameters.panelNode.code.codeName)
panel.fitFunction = canvas.chartSpace.fitFunction
panel.container.isVisibleFunction = canvas.chartSpace.isThisPointVisible
panel.fitFunction = canvas.chartingSpace.fitFunction
panel.container.isVisibleFunction = canvas.chartingSpace.isThisPointVisible
panel.session = pSession
panel.initialize()
}
@@ -130,7 +130,7 @@ function newPanelsSpace () {
if (thisObject.panels !== undefined) {
for (let i = 0; i < thisObject.panels.length; i++) {
let panel = thisObject.panels[i]
let owner = canvas.chartSpace.inViewport.get(panel.owner)
let owner = canvas.chartingSpace.inViewport.get(panel.owner)
if (owner !== undefined) {
if (panel.physics !== undefined) {
panel.physics()
@@ -162,8 +162,8 @@ function newPanelsSpace () {
centerPoint.y = centerPoint.y + panel.container.frame.height / 2
/* Lets see which quadrant the panel is at */
let verticalLine = (canvas.chartSpace.viewport.visibleArea.topRight.x - canvas.chartSpace.viewport.visibleArea.topLeft.x) / 2 + canvas.chartSpace.viewport.visibleArea.topLeft.x
let horizontalLine = (canvas.chartSpace.viewport.visibleArea.bottomRight.y - canvas.chartSpace.viewport.visibleArea.topRight.y) / 2 + canvas.chartSpace.viewport.visibleArea.topRight.y
let verticalLine = (canvas.chartingSpace.viewport.visibleArea.topRight.x - canvas.chartingSpace.viewport.visibleArea.topLeft.x) / 2 + canvas.chartingSpace.viewport.visibleArea.topLeft.x
let horizontalLine = (canvas.chartingSpace.viewport.visibleArea.bottomRight.y - canvas.chartingSpace.viewport.visibleArea.topRight.y) / 2 + canvas.chartingSpace.viewport.visibleArea.topRight.y
if (panel.panelTabButton !== undefined) {
if (panel.panelTabButton.status === 'up') {
@@ -208,18 +208,18 @@ function newPanelsSpace () {
panel.container.frame.position.x = browserCanvas.width - panel.container.frame.width
}
}
if (panel.container.frame.height <= canvas.chartSpace.viewport.visibleArea.bottomRight.y - canvas.chartSpace.viewport.visibleArea.topRight.y) {
if (panel.container.frame.height <= canvas.chartingSpace.viewport.visibleArea.bottomRight.y - canvas.chartingSpace.viewport.visibleArea.topRight.y) {
if (panel.gravitatesTowards === 'topLeft' || panel.gravitatesTowards === 'topRight') {
panel.container.frame.position.y = panel.container.frame.position.y - panel.container.speed.y
isOverlapping(i, panel.container)
if (panel.container.frame.position.y < canvas.chartSpace.viewport.visibleArea.topLeft.y) {
panel.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.topLeft.y
if (panel.container.frame.position.y < canvas.chartingSpace.viewport.visibleArea.topLeft.y) {
panel.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.topLeft.y
}
} else {
panel.container.frame.position.y = panel.container.frame.position.y + panel.container.speed.y
isOverlapping(i, panel.container)
if (panel.container.frame.position.y + panel.container.frame.height > canvas.chartSpace.viewport.visibleArea.bottomRight.y) {
panel.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - panel.container.frame.height
if (panel.container.frame.position.y + panel.container.frame.height > canvas.chartingSpace.viewport.visibleArea.bottomRight.y) {
panel.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - panel.container.frame.height
}
}
}
@@ -317,7 +317,7 @@ function newPanelsSpace () {
for (let i = 0; i < thisObject.panels.length; i++) {
let panel = thisObject.panels[i]
let owner = canvas.chartSpace.inViewport.get(panel.owner)
let owner = canvas.chartingSpace.inViewport.get(panel.owner)
if (owner !== undefined) {
if (panel.isVisible === true && panel.isHidden === false) {
panel.draw()
@@ -336,7 +336,7 @@ function newPanelsSpace () {
*/
for (let i = thisObject.panels.length - 1; i >= 0; i--) {
let panel = thisObject.panels[i]
let owner = canvas.chartSpace.inViewport.get(panel.owner)
let owner = canvas.chartingSpace.inViewport.get(panel.owner)
if (owner !== undefined) {
if (panel.isVisible === true && panel.isHidden === false) {
container = panel.getContainer(point)
+1 -1
View File
@@ -45,7 +45,7 @@ function newTopSpace () {
thisObject.container.frame.position.x = 0
try {
thisObject.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.bottomLeft.y
thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.bottomLeft.y
} catch (e) { }
}
+7 -7
View File
@@ -114,15 +114,15 @@ function transformThisPoint (point, container) {
point = container.frame.frameThisPoint(point)
/* We pass this point through the canvas.chartSpace.viewport lends, meaning we apply the canvas.chartSpace.viewport zoom and displacement. */
/* We pass this point through the canvas.chartingSpace.viewport lends, meaning we apply the canvas.chartingSpace.viewport zoom and displacement. */
point = canvas.chartSpace.viewport.transformThisPoint(point)
point = canvas.chartingSpace.viewport.transformThisPoint(point)
return point
}
function unTransformThisPoint (point, container) {
point = canvas.chartSpace.viewport.unTransformThisPoint(point)
point = canvas.chartingSpace.viewport.unTransformThisPoint(point)
point = container.frame.unframeThisPoint(point)
return point
@@ -174,7 +174,7 @@ function getRateFromPointAtBrowserCanvas (point, container, coordinateSystem) {
return point.y
}
function getRateFromPointAtChartSpace (point, container, coordinateSystem) {
function getRateFromPointAtChartingSpace (point, container, coordinateSystem) {
point = container.frame.unframeThisPoint(point)
point = coordinateSystem.unInverseTransform(point, container.frame.height)
@@ -200,14 +200,14 @@ function moveToUserPosition (container, currentDate, currentRate, coordinateSyst
y: currentRate
}
/* Put this point in the coordinate system of the canvas.chartSpace.viewport */
/* Put this point in the coordinate system of the canvas.chartingSpace.viewport */
targetPoint = coordinateSystem.transformThisPoint(targetPoint)
targetPoint = transformThisPoint(targetPoint, container)
let displaceVector
let targetNoZoom = canvas.chartSpace.viewport.unTransformThisPoint(targetPoint)
let mouseNoZoom = canvas.chartSpace.viewport.unTransformThisPoint(mousePosition)
let targetNoZoom = canvas.chartingSpace.viewport.unTransformThisPoint(targetPoint)
let mouseNoZoom = canvas.chartingSpace.viewport.unTransformThisPoint(mousePosition)
displaceVector = {
x: mouseNoZoom.x - targetNoZoom.x,
+38 -4
View File
@@ -4784,8 +4784,8 @@
},
{
"action": "Add UI Object",
"label": "Add Time Machine",
"relatedUiObject": "Time Machine",
"label": "Add Dashboard",
"relatedUiObject": "Dashboard",
"actionFunction": "payload.onMenuItemClick"
},
{
@@ -4809,6 +4809,40 @@
"childType": "Viewport",
"autoAdd": true
},
{
"name": "dashboards",
"type": "array",
"childType": "Dashboard"
}
]
},
{
"type": "Dashboard",
"menuItems": [
{
"action": "Add UI Object",
"label": "Add Time Machine",
"relatedUiObject": "Time Machine",
"actionFunction": "payload.onMenuItemClick"
},
{
"action": "Delete UI Object",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete Dashboard",
"iconPathOn": "delete",
"iconPathOff": "delete",
"actionFunction": "payload.onMenuItemClick"
}
],
"addLeftIcons": true,
"level": 1,
"icon": "dashboard",
"chainAttachesTo": {
"compatibleTypes": "->Charting Space->"
},
"propertyNameAtParent": "dashboards",
"properties": [
{
"name": "timeMachines",
"type": "array",
@@ -4878,7 +4912,7 @@
"isTitleAllwaysVisible": true,
"icon": "time-machine",
"chainAttachesTo": {
"compatibleTypes": "->Charting Space->"
"compatibleTypes": "->Dashboard->"
},
"propertyNameAtParent": "timeMachines",
"properties": [
@@ -4965,7 +4999,7 @@
}
],
"initialValues": {
"code": "{ \n\"fromDate\": \"2018-01-01\",\n\"toDate\": \"2020-12-31\"\n}"
"code": "{ \n\"autoMinScale\": true,\n\"autoMaxScale\": true,\n\"fromDate\": \"2018-01-01\",\n\"toDate\": \"2020-12-31\"\n}"
},
"addLeftIcons": true,
"editors": {
@@ -67,8 +67,8 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -121,8 +121,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -320,8 +320,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -408,8 +408,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -518,36 +518,38 @@
bandPoint5 = transformThisPoint(bandPoint5, thisObject.container);
bandPoint6 = transformThisPoint(bandPoint6, thisObject.container);
if (bandPoint2.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || bandPoint1.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (bandPoint2.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || bandPoint1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
continue;
}
let diffA = bandPoint1.y - canvas.chartSpace.viewport.visibleArea.bottomLeft.y
if (diffA > 0) {
bandPoint1.y = bandPoint1.y - diffA
bandPoint2.y = bandPoint2.y - diffA
bandPoint3.y = bandPoint3.y - diffA
bandPoint4.y = bandPoint4.y - diffA
bandPoint5.y = bandPoint5.y - diffA
bandPoint6.y = bandPoint6.y - diffA
if (canvas.chartingSpace.viewport.zoomTargetLevel < ZOOM_OUT_THRESHOLD_FOR_PACKING_OBJECTS_AT_THE_BOTTOM_OR_TOP_OF_VIEWPORT) {
let diffA = bandPoint1.y - canvas.chartingSpace.viewport.visibleArea.bottomLeft.y
if (diffA > 0) {
bandPoint1.y = bandPoint1.y - diffA
bandPoint2.y = bandPoint2.y - diffA
bandPoint3.y = bandPoint3.y - diffA
bandPoint4.y = bandPoint4.y - diffA
bandPoint5.y = bandPoint5.y - diffA
bandPoint6.y = bandPoint6.y - diffA
}
let diffB = bandPoint2.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y
if (diffB < 0) {
bandPoint1.y = bandPoint1.y - diffB
bandPoint2.y = bandPoint2.y - diffB
bandPoint3.y = bandPoint3.y - diffB
bandPoint4.y = bandPoint4.y - diffB
bandPoint5.y = bandPoint5.y - diffB
bandPoint6.y = bandPoint6.y - diffB
}
}
let diffB = bandPoint2.y - canvas.chartSpace.viewport.visibleArea.topLeft.y
if (diffB < 0) {
bandPoint1.y = bandPoint1.y - diffB
bandPoint2.y = bandPoint2.y - diffB
bandPoint3.y = bandPoint3.y - diffB
bandPoint4.y = bandPoint4.y - diffB
bandPoint5.y = bandPoint5.y - diffB
bandPoint6.y = bandPoint6.y - diffB
}
bandPoint1 = canvas.chartSpace.viewport.fitIntoVisibleArea(bandPoint1);
bandPoint2 = canvas.chartSpace.viewport.fitIntoVisibleArea(bandPoint2);
bandPoint3 = canvas.chartSpace.viewport.fitIntoVisibleArea(bandPoint3);
bandPoint4 = canvas.chartSpace.viewport.fitIntoVisibleArea(bandPoint4);
bandPoint5 = canvas.chartSpace.viewport.fitIntoVisibleArea(bandPoint5);
bandPoint6 = canvas.chartSpace.viewport.fitIntoVisibleArea(bandPoint6);
bandPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(bandPoint1);
bandPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(bandPoint2);
bandPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(bandPoint3);
bandPoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(bandPoint4);
bandPoint5 = canvas.chartingSpace.viewport.fitIntoVisibleArea(bandPoint5);
bandPoint6 = canvas.chartingSpace.viewport.fitIntoVisibleArea(bandPoint6);
bandPoint1 = thisObject.fitFunction(bandPoint1);
bandPoint2 = thisObject.fitFunction(bandPoint2);
@@ -576,9 +578,9 @@
}
if (
bandPoint1.x < canvas.chartSpace.viewport.visibleArea.topLeft.x + 50
bandPoint1.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50
||
bandPoint1.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x - 50
bandPoint1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50
) {
// we leave this bands without fill.
} else {
@@ -651,8 +653,8 @@
browserCanvasContext.stroke();
/* Contributing to Auto-Scale*/
coordinateSystem.reportValue(band.movingAverage + band.deviation)
coordinateSystem.reportValue(band.movingAverage - band.deviation)
coordinateSystem.reportYValue(band.movingAverage + band.deviation)
coordinateSystem.reportYValue(band.movingAverage - band.deviation)
}
}
@@ -37,8 +37,8 @@ function newAAMastersPlottersBollingerBandsBollingerBandsBollingerBandsPanel ()
thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL;
thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL;
thisObject.container.frame.position.x = canvas.chartSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 3;
thisObject.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height;
thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 3;
thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height;
panelTabButton = newPanelTabButton()
panelTabButton.parentContainer = thisObject.container
@@ -65,8 +65,8 @@
/* Stop listening to the necesary events. */
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -115,8 +115,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -301,8 +301,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, plotAreaFrame);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, plotAreaFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, plotAreaFrame);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, plotAreaFrame);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -386,8 +386,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, plotAreaFrame);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, plotAreaFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, plotAreaFrame);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, plotAreaFrame);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -480,7 +480,7 @@
plotAreaViewport.initializeY(
minValue,
maxValue,
canvas.chartSpace.viewport.visibleArea.bottomRight.y - canvas.chartSpace.viewport.visibleArea.topLeft.y
canvas.chartingSpace.viewport.visibleArea.bottomRight.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y
);
plotAreaFrame.initializeY(
@@ -510,7 +510,7 @@
/* This next section is to get ready in order to be able to plot dinamically constrained to the viewport */
let visibleHeight = canvas.chartSpace.viewport.visibleArea.bottomRight.y - canvas.chartSpace.viewport.visibleArea.topLeft.y;
let visibleHeight = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y;
let frameCorner1 = {
x: 0,
@@ -651,7 +651,7 @@
pbPoint9 = transformThisPoint(pbPoint9, thisObject.container);
pbPoint10 = transformThisPoint(pbPoint10, thisObject.container);
if (pbPoint1.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || pbPoint2.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (pbPoint1.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || pbPoint2.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
return false;
}
@@ -669,37 +669,37 @@
/* Now we set the real value of y. */
pbPoint1.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (previousPercentBandwidth + pbOffset) * plotAreaViewport.scale.y;
pbPoint2.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (currentPercentBandwidth + pbOffset) * plotAreaViewport.scale.y;
pbPoint1.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (previousPercentBandwidth + pbOffset) * plotAreaViewport.scale.y;
pbPoint2.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (currentPercentBandwidth + pbOffset) * plotAreaViewport.scale.y;
pbPoint3.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (0 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y;
pbPoint4.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (30 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y;
pbPoint5.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (70 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y;
pbPoint6.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (100 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y;
pbPoint3.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (0 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y;
pbPoint4.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (30 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y;
pbPoint5.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (70 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y;
pbPoint6.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (100 * pbChartHeight / 100 + pbOffset) * plotAreaViewport.scale.y;
pbPoint7.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (previousMovingAverage + pbOffset) * plotAreaViewport.scale.y;
pbPoint8.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (currentMovingAverage + pbOffset) * plotAreaViewport.scale.y;
pbPoint7.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (previousMovingAverage + pbOffset) * plotAreaViewport.scale.y;
pbPoint8.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (currentMovingAverage + pbOffset) * plotAreaViewport.scale.y;
pbPoint9.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (previousBandwidth + pbOffset) * plotAreaViewport.scale.y;
pbPoint10.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - (currentBandwidth + pbOffset) * plotAreaViewport.scale.y;
pbPoint9.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (previousBandwidth + pbOffset) * plotAreaViewport.scale.y;
pbPoint10.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - (currentBandwidth + pbOffset) * plotAreaViewport.scale.y;
}
/* Everything must fit within the visible area */
pbPoint1 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint1);
pbPoint2 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint2);
pbPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint1);
pbPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint2);
pbPoint3 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint3);
pbPoint4 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint4);
pbPoint5 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint5);
pbPoint6 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint6);
pbPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint3);
pbPoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint4);
pbPoint5 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint5);
pbPoint6 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint6);
pbPoint7 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint7);
pbPoint8 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint8);
pbPoint7 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint7);
pbPoint8 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint8);
pbPoint9 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint9);
pbPoint10 = canvas.chartSpace.viewport.fitIntoVisibleArea(pbPoint10);
pbPoint9 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint9);
pbPoint10 = canvas.chartingSpace.viewport.fitIntoVisibleArea(pbPoint10);
/* Now the drawing of the lines */
@@ -37,8 +37,8 @@ function newAAMastersPlottersCandlesVolumesCandlesCandlePanel() {
thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL;
thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL;
thisObject.container.frame.position.x = canvas.chartSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 2;
thisObject.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height;
thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 2;
thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height;
panelTabButton = newPanelTabButton()
panelTabButton.parentContainer = thisObject.container
@@ -57,8 +57,8 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -110,8 +110,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -303,8 +303,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -348,6 +348,13 @@
if (candle.open < candle.close) { candle.direction = 'up'; }
if (candle.open === candle.close) { candle.direction = 'side'; }
/* Contributing to Auto-Scale*/
if (i === 0) {
coordinateSystem.reportXValue(candle.begin)
}
if (i === dailyFile.length - 1) {
coordinateSystem.reportXValue(candle.end)
}
if (
(candle.begin >= farLeftDate.valueOf() && candle.end <= farRightDate.valueOf()) &&
@@ -393,8 +400,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -428,6 +435,14 @@
if (candle.open < candle.close) { candle.direction = 'up'; }
if (candle.open === candle.close) { candle.direction = 'side'; }
/* Contributing to Auto-Scale*/
if (i === 0) {
coordinateSystem.reportXValue(candle.begin)
}
if (i === marketFile.length - 1) {
coordinateSystem.reportXValue(candle.end)
}
if (
(candle.begin >= leftDate.valueOf() && candle.end <= rightDate.valueOf()) &&
(candle.begin >= coordinateSystem.min.x && candle.end <= coordinateSystem.max.x)
@@ -522,46 +537,48 @@
candle.stickPoint3 = transformThisPoint(candle.stickPoint3, thisObject.container);
candle.stickPoint4 = transformThisPoint(candle.stickPoint4, thisObject.container);
let diffA = candle.stickPoint3.y - canvas.chartSpace.viewport.visibleArea.bottomLeft.y
if (diffA > 0) {
candle.candlePoint1.y = candle.candlePoint1.y - diffA
candle.candlePoint2.y = candle.candlePoint2.y - diffA
candle.candlePoint3.y = candle.candlePoint3.y - diffA
candle.candlePoint4.y = candle.candlePoint4.y - diffA
if (canvas.chartingSpace.viewport.zoomTargetLevel < ZOOM_OUT_THRESHOLD_FOR_PACKING_OBJECTS_AT_THE_BOTTOM_OR_TOP_OF_VIEWPORT) {
let diffA = candle.stickPoint3.y - canvas.chartingSpace.viewport.visibleArea.bottomLeft.y
if (diffA > 0) {
candle.candlePoint1.y = candle.candlePoint1.y - diffA
candle.candlePoint2.y = candle.candlePoint2.y - diffA
candle.candlePoint3.y = candle.candlePoint3.y - diffA
candle.candlePoint4.y = candle.candlePoint4.y - diffA
candle.stickPoint1.y = candle.stickPoint1.y - diffA
candle.stickPoint2.y = candle.stickPoint2.y - diffA
candle.stickPoint3.y = candle.stickPoint3.y - diffA
candle.stickPoint4.y = candle.stickPoint4.y - diffA
candle.stickPoint1.y = candle.stickPoint1.y - diffA
candle.stickPoint2.y = candle.stickPoint2.y - diffA
candle.stickPoint3.y = candle.stickPoint3.y - diffA
candle.stickPoint4.y = candle.stickPoint4.y - diffA
}
let diffB = candle.stickPoint1.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y
if (diffB < 0) {
candle.candlePoint1.y = candle.candlePoint1.y - diffB
candle.candlePoint2.y = candle.candlePoint2.y - diffB
candle.candlePoint3.y = candle.candlePoint3.y - diffB
candle.candlePoint4.y = candle.candlePoint4.y - diffB
candle.stickPoint1.y = candle.stickPoint1.y - diffB
candle.stickPoint2.y = candle.stickPoint2.y - diffB
candle.stickPoint3.y = candle.stickPoint3.y - diffB
candle.stickPoint4.y = candle.stickPoint4.y - diffB
}
}
let diffB = candle.stickPoint1.y - canvas.chartSpace.viewport.visibleArea.topLeft.y
if (diffB < 0) {
candle.candlePoint1.y = candle.candlePoint1.y - diffB
candle.candlePoint2.y = candle.candlePoint2.y - diffB
candle.candlePoint3.y = candle.candlePoint3.y - diffB
candle.candlePoint4.y = candle.candlePoint4.y - diffB
candle.stickPoint1.y = candle.stickPoint1.y - diffB
candle.stickPoint2.y = candle.stickPoint2.y - diffB
candle.stickPoint3.y = candle.stickPoint3.y - diffB
candle.stickPoint4.y = candle.stickPoint4.y - diffB
}
candle.candlePoint1 = canvas.chartSpace.viewport.fitIntoVisibleArea(candle.candlePoint1);
candle.candlePoint2 = canvas.chartSpace.viewport.fitIntoVisibleArea(candle.candlePoint2);
candle.candlePoint3 = canvas.chartSpace.viewport.fitIntoVisibleArea(candle.candlePoint3);
candle.candlePoint4 = canvas.chartSpace.viewport.fitIntoVisibleArea(candle.candlePoint4);
candle.candlePoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(candle.candlePoint1);
candle.candlePoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(candle.candlePoint2);
candle.candlePoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(candle.candlePoint3);
candle.candlePoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(candle.candlePoint4);
candle.candlePoint1 = thisObject.fitFunction(candle.candlePoint1);
candle.candlePoint2 = thisObject.fitFunction(candle.candlePoint2);
candle.candlePoint3 = thisObject.fitFunction(candle.candlePoint3);
candle.candlePoint4 = thisObject.fitFunction(candle.candlePoint4);
candle.stickPoint1 = canvas.chartSpace.viewport.fitIntoVisibleArea(candle.stickPoint1);
candle.stickPoint2 = canvas.chartSpace.viewport.fitIntoVisibleArea(candle.stickPoint2);
candle.stickPoint3 = canvas.chartSpace.viewport.fitIntoVisibleArea(candle.stickPoint3);
candle.stickPoint4 = canvas.chartSpace.viewport.fitIntoVisibleArea(candle.stickPoint4);
candle.stickPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(candle.stickPoint1);
candle.stickPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(candle.stickPoint2);
candle.stickPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(candle.stickPoint3);
candle.stickPoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(candle.stickPoint4);
candle.stickPoint1 = thisObject.fitFunction(candle.stickPoint1);
candle.stickPoint2 = thisObject.fitFunction(candle.stickPoint2);
@@ -578,13 +595,13 @@
candle = candles[i];
if (candle.candlePoint2.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || candle.candlePoint1.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (candle.candlePoint2.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || candle.candlePoint1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
continue
}
/* Contributing to Auto-Scale*/
coordinateSystem.reportValue(candle.max)
coordinateSystem.reportValue(candle.min)
coordinateSystem.reportYValue(candle.max)
coordinateSystem.reportYValue(candle.min)
//if (onScreenCandles.length < 15000) {
@@ -37,8 +37,8 @@ function newAAMastersPlottersCandlesVolumesVolumesVolumePanel() {
thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL;
thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL;
thisObject.container.frame.position.x = canvas.chartSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width;
thisObject.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height;
thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width;
thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.bottomLeft.y - thisObject.container.frame.height;
panelTabButton = newPanelTabButton()
panelTabButton.parentContainer = thisObject.container
@@ -65,8 +65,8 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -118,8 +118,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -298,8 +298,8 @@
if (fileCursor.files.size === 0) { return; } // We need to wait until there are files in the cursor
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -382,8 +382,8 @@
if (marketFile === undefined) { return; } // Initialization not complete yet.
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -438,7 +438,7 @@
/* Now we calculate and plot the volumes */
let visibleHeight = canvas.chartSpace.viewport.visibleArea.bottomRight.y - canvas.chartSpace.viewport.visibleArea.topLeft.y;
let visibleHeight = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y;
let frameCorner1 = {
x: 0,
@@ -506,7 +506,7 @@
volumePointA1.x = volumePointA1.x - baseIncrement;
volumePointA4.x = volumePointA4.x + baseIncrement;
if (volumePointA4.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || volumePointA1.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (volumePointA4.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || volumePointA1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
return false;
}
@@ -516,7 +516,7 @@
if (calculateBuys(coordinateSystem, thisObject.container.frame.height) === false) { continue; } // We try to see if it fits in the visible area.
let diffA = volumePointA1.y - canvas.chartSpace.viewport.visibleArea.bottomLeft.y
let diffA = volumePointA1.y - canvas.chartingSpace.viewport.visibleArea.bottomLeft.y
if (diffA > 0) {
volumePointA1.y = volumePointA1.y - diffA
volumePointA2.y = volumePointA2.y - diffA
@@ -565,7 +565,7 @@
calculateSells(coordinateSystem, thisObject.container.frame.height); // We try to see if it fits in the visible area.
let diffB = volumePointB1.y - canvas.chartSpace.viewport.visibleArea.topLeft.y
let diffB = volumePointB1.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y
if (diffB < 0) {
volumePointB1.y = volumePointB1.y - diffB
volumePointB2.y = volumePointB2.y - diffB
@@ -593,15 +593,15 @@
/* Everything must fit within the visible area */
volumePointA1 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumePointA1);
volumePointA2 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumePointA2);
volumePointA3 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumePointA3);
volumePointA4 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumePointA4);
volumePointA1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumePointA1);
volumePointA2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumePointA2);
volumePointA3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumePointA3);
volumePointA4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumePointA4);
volumePointB1 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumePointB1);
volumePointB2 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumePointB2);
volumePointB3 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumePointB3);
volumePointB4 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumePointB4);
volumePointB1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumePointB1);
volumePointB2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumePointB2);
volumePointB3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumePointB3);
volumePointB4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumePointB4);
volumePointA1 = thisObject.fitFunction(volumePointA1);
volumePointA2 = thisObject.fitFunction(volumePointA2);
@@ -700,9 +700,9 @@
}
/* Contributing to Auto-Scale*/
coordinateSystem.reportValue(volume.amountBuy * 5)
coordinateSystem.reportValue(volume.amountSell * 5)
coordinateSystem.reportValue(0)
coordinateSystem.reportYValue(volume.amountBuy * 5)
coordinateSystem.reportYValue(volume.amountSell * 5)
coordinateSystem.reportYValue(0)
}
}
}
@@ -67,8 +67,8 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -120,8 +120,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -328,8 +328,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -434,8 +434,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -572,14 +572,14 @@
stairsPoint3 = transformThisPoint(stairsPoint3, thisObject.container);
stairsPoint4 = transformThisPoint(stairsPoint4, thisObject.container);
if (stairsPoint2.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || stairsPoint1.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (stairsPoint2.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || stairsPoint1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
continue;
}
stairsPoint1 = canvas.chartSpace.viewport.fitIntoVisibleArea(stairsPoint1);
stairsPoint2 = canvas.chartSpace.viewport.fitIntoVisibleArea(stairsPoint2);
stairsPoint3 = canvas.chartSpace.viewport.fitIntoVisibleArea(stairsPoint3);
stairsPoint4 = canvas.chartSpace.viewport.fitIntoVisibleArea(stairsPoint4);
stairsPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(stairsPoint1);
stairsPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(stairsPoint2);
stairsPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(stairsPoint3);
stairsPoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(stairsPoint4);
stairsPoint1 = thisObject.fitFunction(stairsPoint1);
stairsPoint2 = thisObject.fitFunction(stairsPoint2);
@@ -587,10 +587,10 @@
stairsPoint4 = thisObject.fitFunction(stairsPoint4);
/* Contributing to Auto-Scale*/
coordinateSystem.reportValue(stairs.firstMin)
coordinateSystem.reportValue(stairs.firstMax)
coordinateSystem.reportValue(stairs.lastMin)
coordinateSystem.reportValue(stairs.lastMax)
coordinateSystem.reportYValue(stairs.firstMin)
coordinateSystem.reportYValue(stairs.firstMax)
coordinateSystem.reportYValue(stairs.lastMin)
coordinateSystem.reportYValue(stairs.lastMax)
browserCanvasContext.beginPath();
@@ -65,8 +65,8 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -118,8 +118,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -324,8 +324,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -418,8 +418,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -480,7 +480,7 @@
let opacity = '0.25';
let visibleHeight = canvas.chartSpace.viewport.visibleArea.bottomRight.y - canvas.chartSpace.viewport.visibleArea.topLeft.y;
let visibleHeight = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - canvas.chartingSpace.viewport.visibleArea.topLeft.y;
let frameCorner1 = {
x: 0,
@@ -516,8 +516,8 @@
function calculateBuys(plot, height) {
/* Contributing to Auto-Scale*/
coordinateSystem.reportValue(stairs.firstAmount * 2)
coordinateSystem.reportValue(stairs.lastAmount * 2)
coordinateSystem.reportYValue(stairs.firstAmount * 2)
coordinateSystem.reportYValue(stairs.lastAmount * 2)
volumeBarPointA1 = {
x: stairs.begin + timeFrame / 2,
@@ -550,7 +550,7 @@
volumeBarPointA3 = transformThisPoint(volumeBarPointA3, thisObject.container);
volumeBarPointA4 = transformThisPoint(volumeBarPointA4, thisObject.container);
if (volumeBarPointA4.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || volumeBarPointA1.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (volumeBarPointA4.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || volumeBarPointA1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
return false;
}
@@ -559,16 +559,16 @@
if (calculateBuys(coordinateSystem, thisObject.container.frame.height) === false) { continue; } // We try to see if it fits in the visible area.
if (volumeBarPointA1.y > canvas.chartSpace.viewport.visibleArea.bottomLeft.y && frameHeightInViewPort > visibleHeight * 2 / 3) {
if (volumeBarPointA1.y > canvas.chartingSpace.viewport.visibleArea.bottomLeft.y && frameHeightInViewPort > visibleHeight * 2 / 3) {
if (calculateBuys(coordinateSystem, visibleHeight) === false) { continue; } // We snap t to the view port.
/* Now we set the real value of y. */
volumeBarPointA1.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y;
volumeBarPointA2.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - stairs.firstAmount * 2 * coordinateSystem.scale.y;
volumeBarPointA3.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y - stairs.lastAmount * 2 * coordinateSystem.scale.y;
volumeBarPointA4.y = canvas.chartSpace.viewport.visibleArea.bottomRight.y;
volumeBarPointA1.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y;
volumeBarPointA2.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - stairs.firstAmount * 2 * coordinateSystem.scale.y;
volumeBarPointA3.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y - stairs.lastAmount * 2 * coordinateSystem.scale.y;
volumeBarPointA4.y = canvas.chartingSpace.viewport.visibleArea.bottomRight.y;
}
}
@@ -583,8 +583,8 @@
function calculateSells(plot, height) {
/* Contributing to Auto-Scale*/
coordinateSystem.reportValue(stairs.firstAmount * 2)
coordinateSystem.reportValue(stairs.lastAmount * 2)
coordinateSystem.reportYValue(stairs.firstAmount * 2)
coordinateSystem.reportYValue(stairs.lastAmount * 2)
volumeBarPointB1 = {
x: stairs.begin + timeFrame / 2,
@@ -620,16 +620,16 @@
calculateSells(coordinateSystem, thisObject.container.frame.height); // We try to see if it fits in the visible area.
if (volumeBarPointB1.y < canvas.chartSpace.viewport.visibleArea.topLeft.y && frameHeightInViewPort > visibleHeight * 2 / 3) {
if (volumeBarPointB1.y < canvas.chartingSpace.viewport.visibleArea.topLeft.y && frameHeightInViewPort > visibleHeight * 2 / 3) {
calculateSells(coordinateSystem, visibleHeight); // We snap it to the view port.
/* Now we set the real value of y. */
volumeBarPointB1.y = canvas.chartSpace.viewport.visibleArea.topLeft.y;
volumeBarPointB2.y = canvas.chartSpace.viewport.visibleArea.topLeft.y + stairs.firstAmount * 2 * coordinateSystem.scale.y;
volumeBarPointB3.y = canvas.chartSpace.viewport.visibleArea.topLeft.y + stairs.lastAmount * 2 * coordinateSystem.scale.y;
volumeBarPointB4.y = canvas.chartSpace.viewport.visibleArea.topLeft.y;
volumeBarPointB1.y = canvas.chartingSpace.viewport.visibleArea.topLeft.y;
volumeBarPointB2.y = canvas.chartingSpace.viewport.visibleArea.topLeft.y + stairs.firstAmount * 2 * coordinateSystem.scale.y;
volumeBarPointB3.y = canvas.chartingSpace.viewport.visibleArea.topLeft.y + stairs.lastAmount * 2 * coordinateSystem.scale.y;
volumeBarPointB4.y = canvas.chartingSpace.viewport.visibleArea.topLeft.y;
}
}
@@ -638,10 +638,10 @@
if (stairs.type === 'buy') {
volumeBarPointA1 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumeBarPointA1);
volumeBarPointA2 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumeBarPointA2);
volumeBarPointA3 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumeBarPointA3);
volumeBarPointA4 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumeBarPointA4);
volumeBarPointA1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumeBarPointA1);
volumeBarPointA2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumeBarPointA2);
volumeBarPointA3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumeBarPointA3);
volumeBarPointA4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumeBarPointA4);
volumeBarPointA1 = thisObject.fitFunction(volumeBarPointA1);
volumeBarPointA2 = thisObject.fitFunction(volumeBarPointA2);
@@ -650,10 +650,10 @@
} else {
volumeBarPointB1 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumeBarPointB1);
volumeBarPointB2 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumeBarPointB2);
volumeBarPointB3 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumeBarPointB3);
volumeBarPointB4 = canvas.chartSpace.viewport.fitIntoVisibleArea(volumeBarPointB4);
volumeBarPointB1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumeBarPointB1);
volumeBarPointB2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumeBarPointB2);
volumeBarPointB3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumeBarPointB3);
volumeBarPointB4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(volumeBarPointB4);
volumeBarPointB1 = thisObject.fitFunction(volumeBarPointB1);
volumeBarPointB2 = thisObject.fitFunction(volumeBarPointB2);
@@ -68,8 +68,8 @@
/* Stop listening to the necesary events. */
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -117,8 +117,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -308,8 +308,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -390,8 +390,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -484,14 +484,14 @@
if (currentRecord === undefined) { return; }
if (currentRecord.conditionsNames === undefined) { return; }
if (canvas.designerSpace.workspace === undefined) { return; }
if (canvas.designSpace.workspace === undefined) { return; }
/* We will get now the designer trading system */
let designerTradingSystem
let fileTradingSystem = currentRecord.conditionsNames;
for (let i = 0; i < canvas.designerSpace.workspace.workspaceNode.rootNodes.length; i++) {
let rootNode = canvas.designerSpace.workspace.workspaceNode.rootNodes[i]
for (let i = 0; i < canvas.designSpace.workspace.workspaceNode.rootNodes.length; i++) {
let rootNode = canvas.designSpace.workspace.workspaceNode.rootNodes[i]
if (rootNode.type === 'Definition') {
if (rootNode.tradingSystem.id === fileTradingSystem.id) {
designerTradingSystem = rootNode.tradingSystem
@@ -54,7 +54,7 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
fileSequence.eventHandler.stopListening(filesUpdatedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
@@ -90,7 +90,7 @@
recalculate();
filesUpdatedEventSubscriptionId = fileSequence.eventHandler.listenToEvent("Files Updated", onFilesUpdated); // Only the first sequence is supported right now.
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
onMouseOverEventSuscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver)
/* Ready for when dimmension changes. */
@@ -370,9 +370,9 @@
point = coordinateSystem.transformThisPoint(point);
point = transformThisPoint(point, thisObject.container);
if (point.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || point.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) { continue; }
if (point.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) { continue; }
point = canvas.chartSpace.viewport.fitIntoVisibleArea(point);
point = canvas.chartingSpace.viewport.fitIntoVisibleArea(point);
point = thisObject.fitFunction(point);
let isCurrentRecord = false;
@@ -410,17 +410,17 @@
point1 = coordinateSystem.transformThisPoint(point1);
point1 = transformThisPoint(point1, thisObject.container);
point1 = canvas.chartSpace.viewport.fitIntoVisibleArea(point1);
point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1);
point1 = thisObject.fitFunction(point1);
point2 = coordinateSystem.transformThisPoint(point2);
point2 = transformThisPoint(point2, thisObject.container);
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point2 = thisObject.fitFunction(point2);
point3 = coordinateSystem.transformThisPoint(point3);
point3 = transformThisPoint(point3, thisObject.container);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
point3 = thisObject.fitFunction(point3);
let diff = point2.x - point3.x;
@@ -429,8 +429,8 @@
currentRecord.timeFrame = diff
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
point2 = thisObject.fitFunction(point2);
point3 = thisObject.fitFunction(point3);
@@ -485,17 +485,17 @@
point1 = coordinateSystem.transformThisPoint(point1);
point1 = transformThisPoint(point1, thisObject.container);
point1 = canvas.chartSpace.viewport.fitIntoVisibleArea(point1);
point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1);
point1 = thisObject.fitFunction(point1);
point2 = coordinateSystem.transformThisPoint(point2);
point2 = transformThisPoint(point2, thisObject.container);
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point2 = thisObject.fitFunction(point2);
point3 = coordinateSystem.transformThisPoint(point3);
point3 = transformThisPoint(point3, thisObject.container);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
point3 = thisObject.fitFunction(point3);
let diff = point2.x - point3.x;
@@ -504,8 +504,8 @@
currentRecord.timeFrame = diff
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
point2 = thisObject.fitFunction(point2);
point3 = thisObject.fitFunction(point3);
@@ -558,17 +558,17 @@
point1 = coordinateSystem.transformThisPoint(point1);
point1 = transformThisPoint(point1, thisObject.container);
point1 = canvas.chartSpace.viewport.fitIntoVisibleArea(point1);
point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1);
point1 = thisObject.fitFunction(point1);
point2 = coordinateSystem.transformThisPoint(point2);
point2 = transformThisPoint(point2, thisObject.container);
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point2 = thisObject.fitFunction(point2);
point3 = coordinateSystem.transformThisPoint(point3);
point3 = transformThisPoint(point3, thisObject.container);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
point3 = thisObject.fitFunction(point3);
let diff = point2.x - point3.x;
@@ -577,8 +577,8 @@
currentRecord.timeFrame = diff
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
point2 = thisObject.fitFunction(point2);
point3 = thisObject.fitFunction(point3);
@@ -632,17 +632,17 @@
point1 = coordinateSystem.transformThisPoint(point1);
point1 = transformThisPoint(point1, thisObject.container);
point1 = canvas.chartSpace.viewport.fitIntoVisibleArea(point1);
point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1);
point1 = thisObject.fitFunction(point1);
point2 = coordinateSystem.transformThisPoint(point2);
point2 = transformThisPoint(point2, thisObject.container);
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point2 = thisObject.fitFunction(point2);
point3 = coordinateSystem.transformThisPoint(point3);
point3 = transformThisPoint(point3, thisObject.container);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
point3 = thisObject.fitFunction(point3);
let diff = point2.x - point3.x;
@@ -651,8 +651,8 @@
currentRecord.timeFrame = diff
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
point2 = thisObject.fitFunction(point2);
point3 = thisObject.fitFunction(point3);
@@ -704,7 +704,7 @@
browserCanvasContext.arc(point.x, point.y, currentRadius, 0, Math.PI * 2, true);
browserCanvasContext.closePath();
if (point.x < canvas.chartSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else {
if (point.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else {
browserCanvasContext.fill();
}
@@ -724,7 +724,7 @@
browserCanvasContext.arc(point.x, point.y, radius, 0, Math.PI * 2, true);
browserCanvasContext.closePath();
if (point.x < canvas.chartSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else {
if (point.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else {
browserCanvasContext.fill();
}
@@ -755,12 +755,12 @@
point1 = coordinateSystem.transformThisPoint(point1);
point1 = transformThisPoint(point1, thisObject.container);
point1 = canvas.chartSpace.viewport.fitIntoVisibleArea(point1);
point1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point1);
point1 = thisObject.fitFunction(point1);
point2 = coordinateSystem.transformThisPoint(point2);
point2 = transformThisPoint(point2, thisObject.container);
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point2 = thisObject.fitFunction(point2);
browserCanvasContext.beginPath();
@@ -40,8 +40,8 @@ function newAAMastersPlottersTradingSimulationSimulationExecutionSimulationExecu
thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL;
thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * 2.5;
thisObject.container.frame.position.x = canvas.chartSpace.viewport.visibleArea.topLeft.x + thisObject.container.frame.width * 4;
thisObject.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.topRight.y;
thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topLeft.x + thisObject.container.frame.width * 4;
thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.topRight.y;
panelTabButton = newPanelTabButton()
panelTabButton.parentContainer = thisObject.container
@@ -150,8 +150,8 @@ function newAAMastersPlottersTradingSimulationSimulationExecutionSimulationExecu
point2.y = point2.y - diff;
point3.y = point3.y - diff;
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
browserCanvasContext.beginPath();
@@ -210,8 +210,8 @@ function newAAMastersPlottersTradingSimulationSimulationExecutionSimulationExecu
point2.y = point2.y + diff;
point3.y = point3.y + diff;
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
browserCanvasContext.beginPath();
@@ -268,8 +268,8 @@ function newAAMastersPlottersTradingSimulationSimulationExecutionSimulationExecu
point2.y = point2.y - diff;
point3.y = point3.y - diff;
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
browserCanvasContext.beginPath();
@@ -326,8 +326,8 @@ function newAAMastersPlottersTradingSimulationSimulationExecutionSimulationExecu
point2.y = point2.y + diff;
point3.y = point3.y + diff;
point2 = canvas.chartSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartSpace.viewport.fitIntoVisibleArea(point3);
point2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point2);
point3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(point3);
browserCanvasContext.beginPath();
@@ -366,7 +366,7 @@ function newAAMastersPlottersTradingSimulationSimulationExecutionSimulationExecu
browserCanvasContext.arc(point.x, point.y, currentRadius, 0, Math.PI * 2, true);
browserCanvasContext.closePath();
if (point.x < canvas.chartSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else {
if (point.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else {
browserCanvasContext.fill();
}
browserCanvasContext.setLineDash([0, 0])
@@ -384,7 +384,7 @@ function newAAMastersPlottersTradingSimulationSimulationExecutionSimulationExecu
browserCanvasContext.arc(point.x, point.y, radius, 0, Math.PI * 2, true);
browserCanvasContext.closePath();
if (point.x < canvas.chartSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else {
if (point.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 50 || point.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 50) {/*we leave this history without fill. */ } else {
browserCanvasContext.fill();
}
browserCanvasContext.setLineDash([0, 0])
@@ -71,8 +71,8 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -128,8 +128,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -146,7 +146,7 @@
})
for (let i = 1; i < 15; i++) {
let strategyImage = canvas.designerSpace.iconByUiObjectType.get('Strategy');
let strategyImage = canvas.designSpace.iconByUiObjectType.get('Strategy');
strategyImages.push(strategyImage);
}
@@ -344,8 +344,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -427,8 +427,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -521,17 +521,17 @@
recordPoint3 = transformThisPoint(recordPoint3, thisObject.container);
recordPoint4 = transformThisPoint(recordPoint4, thisObject.container);
if (recordPoint2.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || recordPoint1.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (recordPoint2.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || recordPoint1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
continue;
}
recordPoint3.y = recordPoint1.y + 2000;
recordPoint4.y = recordPoint1.y + 2000;
recordPoint1 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint1);
recordPoint2 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint2);
recordPoint3 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint3);
recordPoint4 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint4);
recordPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint1);
recordPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint2);
recordPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint3);
recordPoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint4);
recordPoint1 = thisObject.fitFunction(recordPoint1, undefined, 30);
recordPoint2 = thisObject.fitFunction(recordPoint2, undefined, 30);
@@ -71,8 +71,8 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -126,8 +126,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -337,8 +337,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -414,8 +414,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -504,13 +504,13 @@
recordPoint2 = transformThisPoint(recordPoint2, thisObject.container);
recordPoint3 = transformThisPoint(recordPoint3, thisObject.container);
if (recordPoint2.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || recordPoint1.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (recordPoint2.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || recordPoint1.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
continue;
}
recordPoint1 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint1);
recordPoint2 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint2);
recordPoint3 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint3);
recordPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint1);
recordPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint2);
recordPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint3);
recordPoint1 = thisObject.fitFunction(recordPoint1);
recordPoint2 = thisObject.fitFunction(recordPoint2);
@@ -580,17 +580,17 @@
point.y = recordPoint3.y - 100
}
point = canvas.chartSpace.viewport.fitIntoVisibleArea(point);
point = canvas.chartingSpace.viewport.fitIntoVisibleArea(point);
point = thisObject.fitFunction(point, undefined, 50);
if (
recordPoint3.x < canvas.chartSpace.viewport.visibleArea.topLeft.x + 250
recordPoint3.x < canvas.chartingSpace.viewport.visibleArea.topLeft.x + 250
||
recordPoint3.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x - 250
recordPoint3.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x - 250
||
recordPoint3.y > canvas.chartSpace.viewport.visibleArea.bottomRight.y - 150
recordPoint3.y > canvas.chartingSpace.viewport.visibleArea.bottomRight.y - 150
||
recordPoint3.y < canvas.chartSpace.viewport.visibleArea.topLeft.y + 150
recordPoint3.y < canvas.chartingSpace.viewport.visibleArea.topLeft.y + 150
) {
// we do not write any text
} else {
@@ -71,8 +71,8 @@
/* Stop listening to the necesary events. */
thisObject.container.eventHandler.stopListening(onMouseOverEventSuscriptionId)
canvas.chartSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(zoomChangedEventSubscriptionId);
canvas.chartingSpace.viewport.eventHandler.stopListening(offsetChangedEventSubscriptionId);
canvas.eventHandler.stopListening(dragFinishedEventSubscriptionId);
thisObject.container.eventHandler.stopListening(dimmensionsChangedEventSubscriptionId)
marketFiles.eventHandler.stopListening(marketFilesUpdatedEventSubscriptionId);
@@ -130,8 +130,8 @@
/* Listen to the necesary events. */
zoomChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
zoomChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Zoom Changed", onViewportZoomChanged);
offsetChangedEventSubscriptionId = canvas.chartingSpace.viewport.eventHandler.listenToEvent("Position Changed", onViewportPositionChanged);
dragFinishedEventSubscriptionId = canvas.eventHandler.listenToEvent("Drag Finished", onDragFinished);
marketFilesUpdatedEventSubscriptionId = marketFiles.eventHandler.listenToEvent("Files Updated", onMarketFilesUpdated);
dailyFilesUpdatedEventSubscriptionId = dailyFiles.eventHandler.listenToEvent("Files Updated", onDailyFilesUpdated);
@@ -149,9 +149,9 @@
/* Loading a few icons */
imageStopLossPhase = canvas.designerSpace.iconByUiObjectType.get('Stop');
imageTakeProfitPhase = canvas.designerSpace.iconByUiObjectType.get('Phase');
imageRecord = canvas.designerSpace.iconByUiObjectType.get('Trading System');
imageStopLossPhase = canvas.designSpace.iconByUiObjectType.get('Stop');
imageTakeProfitPhase = canvas.designSpace.iconByUiObjectType.get('Phase');
imageRecord = canvas.designSpace.iconByUiObjectType.get('Trading System');
callBackFunction();
@@ -327,8 +327,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -428,8 +428,8 @@
let daysOnSides = getSideDays(timeFrame);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let leftDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topLeft, thisObject.container, coordinateSystem);
let rightDate = getDateFromPointAtBrowserCanvas(canvas.chartingSpace.viewport.visibleArea.topRight, thisObject.container, coordinateSystem);
let dateDiff = rightDate.valueOf() - leftDate.valueOf();
@@ -627,16 +627,16 @@
recordPoint9 = transformThisPoint(recordPoint9, thisObject.container);
recordPoint10 = transformThisPoint(recordPoint10, thisObject.container);
recordPoint1 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint1);
recordPoint2 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint2);
recordPoint3 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint3);
recordPoint4 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint4);
recordPoint5 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint5);
recordPoint6 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint6);
recordPoint7 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint7);
recordPoint8 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint8);
recordPoint9 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint9);
recordPoint10 = canvas.chartSpace.viewport.fitIntoVisibleArea(recordPoint10);
recordPoint1 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint1);
recordPoint2 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint2);
recordPoint3 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint3);
recordPoint4 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint4);
recordPoint5 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint5);
recordPoint6 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint6);
recordPoint7 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint7);
recordPoint8 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint8);
recordPoint9 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint9);
recordPoint10 = canvas.chartingSpace.viewport.fitIntoVisibleArea(recordPoint10);
recordPoint1 = thisObject.fitFunction(recordPoint1);
recordPoint2 = thisObject.fitFunction(recordPoint2);
@@ -671,7 +671,7 @@
y: 0
}
imagePosition = canvas.chartSpace.viewport.fitIntoVisibleArea(imagePosition)
imagePosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(imagePosition)
imagePosition = thisObject.fitFunction(imagePosition, undefined, 0, 0, imageSize)
if (imageRecord.canDrawIcon === true) {
@@ -683,7 +683,7 @@
browserCanvasContext.restore();
}
if (recordPoint5.x < canvas.chartSpace.viewport.visibleArea.bottomLeft.x || recordPoint5.x > canvas.chartSpace.viewport.visibleArea.bottomRight.x) {
if (recordPoint5.x < canvas.chartingSpace.viewport.visibleArea.bottomLeft.x || recordPoint5.x > canvas.chartingSpace.viewport.visibleArea.bottomRight.x) {
continue;
}
@@ -748,14 +748,14 @@
y: recordPoint6.y - imageSize * 1.25 + yOffset
}
imagePosition = canvas.chartSpace.viewport.fitIntoVisibleArea(imagePosition)
imagePosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(imagePosition)
imagePosition = thisObject.fitFunction(imagePosition, undefined, 0, 0, imageSize)
let labelPosition = {
x: recordPoint6.x - imageSize / 2 - 3,
y: recordPoint6.y - imageSize * 1.5 + yOffset * 2
}
labelPosition = canvas.chartSpace.viewport.fitIntoVisibleArea(labelPosition)
labelPosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(labelPosition)
labelPosition = thisObject.fitFunction(labelPosition, undefined, 30)
if (imageStopLossPhase.canDrawIcon === true && stopLossPhase > -1) {
@@ -789,14 +789,14 @@
x: recordPoint10.x - imageSize * 2 / 3,
y: recordPoint10.y + imageSize / 4 - yOffset
}
imagePosition = canvas.chartSpace.viewport.fitIntoVisibleArea(imagePosition)
imagePosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(imagePosition)
imagePosition = thisObject.fitFunction(imagePosition, undefined, 0, 0, imageSize)
labelPosition = {
x: recordPoint10.x - imageSize * 1 / 3,
y: recordPoint10.y + imageSize * 1.9 - yOffset * 2
}
labelPosition = canvas.chartSpace.viewport.fitIntoVisibleArea(labelPosition)
labelPosition = canvas.chartingSpace.viewport.fitIntoVisibleArea(labelPosition)
labelPosition = thisObject.fitFunction(labelPosition, undefined, 30)
if (imageTakeProfitPhase.canDrawIcon === true && takeProfitPhase > -1) {
@@ -31,8 +31,8 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation
thisObject.container.frame.width = UI_PANEL.WIDTH.NORMAL * 1;
thisObject.container.frame.height = UI_PANEL.HEIGHT.NORMAL * 2.5;
thisObject.container.frame.position.x = canvas.chartSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 1;
thisObject.container.frame.position.y = canvas.chartSpace.viewport.visibleArea.topRight.y;
thisObject.container.frame.position.x = canvas.chartingSpace.viewport.visibleArea.topRight.x - thisObject.container.frame.width * 1;
thisObject.container.frame.position.y = canvas.chartingSpace.viewport.visibleArea.topRight.y;
panelTabButton = newPanelTabButton()
panelTabButton.parentContainer = thisObject.container
+1 -1
View File
@@ -1 +1 @@
{"type":"Workspace","name":"My Workspace","rootNodes":[{"type":"Network","name":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","dataStorage":{"type":"Data Storage","name":"New Data Storage","sessionIndependentData":{"type":"Session Independent Data","name":"New Session Independent Data","singleMarketData":[{"type":"Single Market Data","name":"Poloniex BTC/USDT","dataProducts":[{"type":"Data Product","name":"Candles","id":"55e735a5-60c9-4e2d-a582-a6c6eddf3502","savedPayload":{"position":{"x":21874.292166697058,"y":29963.544080527405},"targetPosition":{"x":21481.213679589873,"y":29402.169822672073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Candles","id":"36ae2d5d-6734-4526-b2f8-31c89a0c4fc1"}}},{"type":"Data Product","name":"Volumes","id":"ffaf5a8e-12d6-4040-922d-57845eb3377c","savedPayload":{"position":{"x":21770.838804369636,"y":30023.272907115715},"targetPosition":{"x":21481.213679589873,"y":29402.169822672073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"b2d5ba69-67ac-490f-9e74-28239b35a92e"}}},{"type":"Data Product","name":"Candle-Stairs","id":"e1c46e1f-09d1-46a2-b738-e761b4e04cd9","savedPayload":{"position":{"x":21658.585329183163,"y":30064.129830776532},"targetPosition":{"x":21481.213679589873,"y":29402.169822672073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Candle-Stairs","id":"642474e9-da61-4168-97dc-7f7869bebc02"}}},{"type":"Data Product","name":"Volume-Stairs","id":"eefaf182-ffe4-457e-a7fa-f43dfabdc086","savedPayload":{"position":{"x":21540.942506178184,"y":30084.87343455902},"targetPosition":{"x":21481.213679589873,"y":29402.169822672073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Volume-Stairs","id":"846e9572-c4d6-4c7e-942e-c82402c5ecea"}}},{"type":"Data Product","name":"Bollinger Bands","id":"3576cfd0-1774-4094-b8a0-66e182fc4c41","savedPayload":{"position":{"x":21421.484853001562,"y":30084.87343455902},"targetPosition":{"x":21481.213679589873,"y":29402.169822672073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","id":"4dfde44c-0bbf-4204-91de-ce99ecba4cf2","savedPayload":{"position":{"x":21303.842029996584,"y":30064.129830776532},"targetPosition":{"x":21481.213679589873,"y":29402.169822672073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}},{"type":"Data Product","name":"Bollinger Channels Objects","id":"6986bcb1-119c-48c9-a00b-d046e9e07951","savedPayload":{"position":{"x":21191.588554810114,"y":30023.272907115715},"targetPosition":{"x":21481.213679589873,"y":29402.169822672073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"85098ab8-a125-49f1-b24d-416c2090c7a0","savedPayload":{"position":{"x":21088.13519248269,"y":29963.544080527405},"targetPosition":{"x":21481.213679589873,"y":29402.169822672073},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}}],"id":"49a747b4-2eb7-41d6-b0e2-493f43ceed44","savedPayload":{"position":{"x":21481.213679589873,"y":29402.169822672073},"targetPosition":{"x":21481.213679589873,"y":28716.858393897463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4},"uiObject":{},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"d4098b73-7e25-434e-8fd9-342393cbb400"}}},{"type":"Single Market Data","name":"Kraken ETH/BTC","dataProducts":[{"type":"Data Product","name":"Candles","id":"fce50098-d674-4006-94ad-cce46f3d59a4","savedPayload":{"position":{"x":21048.079251220588,"y":30033.138046837903},"targetPosition":{"x":21178.00071348869,"y":29346.48660572473},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed"Line truncated
{"type":"Workspace","name":"My Workspace","rootNodes":[{"type":"Network","name":"Superalgos","networkNodes":[{"type":"Network Node","name":"My Computer","dataStorage":{"type":"Data Storage","name":"New Data Storage","sessionIndependentData":{"type":"Session Independent Data","name":"New Session Independent Data","singleMarketData":[{"type":"Single Market Data","name":"Poloniex BTC/USDT","dataProducts":[{"type":"Data Product","name":"Candles","id":"55e735a5-60c9-4e2d-a582-a6c6eddf3502","savedPayload":{"position":{"x":21874.494367674444,"y":29964.185380096318},"targetPosition":{"x":21481.213679589873,"y":29402.52234931817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Candles","id":"36ae2d5d-6734-4526-b2f8-31c89a0c4fc1"}}},{"type":"Data Product","name":"Volumes","id":"ffaf5a8e-12d6-4040-922d-57845eb3377c","savedPayload":{"position":{"x":21770.987788568025,"y":30023.944931406306},"targetPosition":{"x":21481.213679589873,"y":29402.52234931817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Volumes","id":"b2d5ba69-67ac-490f-9e74-28239b35a92e"}}},{"type":"Data Product","name":"Candle-Stairs","id":"e1c46e1f-09d1-46a2-b738-e761b4e04cd9","savedPayload":{"position":{"x":21658.67656979308,"y":30064.822872014545},"targetPosition":{"x":21481.213679589873,"y":29402.52234931817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Candle-Stairs","id":"642474e9-da61-4168-97dc-7f7869bebc02"}}},{"type":"Data Product","name":"Volume-Stairs","id":"eefaf182-ffe4-457e-a7fa-f43dfabdc086","savedPayload":{"position":{"x":21540.97323089986,"y":30085.577146380892},"targetPosition":{"x":21481.213679589873,"y":29402.52234931817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Volume-Stairs","id":"846e9572-c4d6-4c7e-942e-c82402c5ecea"}}},{"type":"Data Product","name":"Bollinger Bands","id":"3576cfd0-1774-4094-b8a0-66e182fc4c41","savedPayload":{"position":{"x":21421.454128279885,"y":30085.577146380892},"targetPosition":{"x":21481.213679589873,"y":29402.52234931817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Bollinger Bands","id":"29088877-8d63-4217-8d34-8742afc262f4"}}},{"type":"Data Product","name":"Percentage Bandwidth","id":"4dfde44c-0bbf-4204-91de-ce99ecba4cf2","savedPayload":{"position":{"x":21303.750789386668,"y":30064.822872014545},"targetPosition":{"x":21481.213679589873,"y":29402.52234931817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Percentage Bandwidth","id":"3b7885a0-cd72-4a3f-a38b-3dc8c47bd068"}}},{"type":"Data Product","name":"Bollinger Channels Objects","id":"6986bcb1-119c-48c9-a00b-d046e9e07951","savedPayload":{"position":{"x":21191.43957061172,"y":30023.944931406306},"targetPosition":{"x":21481.213679589873,"y":29402.52234931817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Bollinger Channels Objects","id":"1f111f72-624f-4166-9f99-ab8d785d5267"}}},{"type":"Data Product","name":"Bollinger Sub-Channels Objects","id":"85098ab8-a125-49f1-b24d-416c2090c7a0","savedPayload":{"position":{"x":21087.932991505302,"y":29964.185380096318},"targetPosition":{"x":21481.213679589873,"y":29402.52234931817},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":3,"distanceToParent":3},"uiObject":{},"referenceParent":{"type":"Product Definition","name":"Bollinger Sub-Channels Objects","id":"080c87fc-4546-4482-ab11-180a33f6d9ab"}}}],"id":"49a747b4-2eb7-41d6-b0e2-493f43ceed44","savedPayload":{"position":{"x":21481.213679589873,"y":29402.52234931817},"targetPosition":{"x":21481.213679589873,"y":28716.858393897463},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"angleToParent":2,"distanceToParent":4},"uiObject":{},"referenceParent":{"type":"Market","name":"BTC/USDT","id":"d4098b73-7e25-434e-8fd9-342393cbb400"}}},{"type":"Single Market Data","name":"Kraken ETH/BTC","dataProducts":[{"type":"Data Product","name":"Candles","id":"fce50098-d674-4006-94ad-cce46f3d59a4","savedPayload":{"position":{"x":21043.238614484988,"y":30047.848564462507},"targetPosition":{"x":21174.61205692785,"y":29353.523223578955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":true,"aLine truncated
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

+22 -22
View File
@@ -26,7 +26,7 @@ function newAppLoader() {
modulesArray = ['UserEcosystem.js']
modulesArray = modulesArray.concat([
'ChartsSpace/Viewport.js',
'ChartingSpace/Viewport.js',
'Globals.js',
'Ecosystem.js',
@@ -34,25 +34,25 @@ function newAppLoader() {
'AppSchema.js',
'MQService',
'ChartsSpace/EdgeEditor.js',
'ChartsSpace/ChartUtilities.js',
'ChartsSpace/PlottersManager.js',
'ChartsSpace/TimelineChart.js',
'ChartsSpace/TimeMachine.js',
'ChartsSpace/CoordinateSystem.js',
'ChartingSpace/EdgeEditor.js',
'ChartingSpace/ChartUtilities.js',
'ChartingSpace/PlottersManager.js',
'ChartingSpace/TimelineChart.js',
'ChartingSpace/TimeMachine.js',
'ChartingSpace/CoordinateSystem.js',
'DesignerSpace/Workspace/Workspace.js',
'DesignerSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js',
'DesignerSpace/Workspace/FunctionLibraries/ChainAttachDetach.js',
'DesignerSpace/Workspace/FunctionLibraries/ReferenceAttachDetach.js',
'DesignerSpace/Workspace/FunctionLibraries/NodeDeleter.js',
'DesignerSpace/Workspace/FunctionLibraries/ProtocolNode.js',
'DesignerSpace/Workspace/FunctionLibraries/NodeCloning.js',
'DesignerSpace/Workspace/FunctionLibraries/NodeChildren.js',
'DesignerSpace/Workspace/FunctionLibraries/TaskFunctions.js',
'DesignerSpace/Workspace/FunctionLibraries/SessionFunctions.js',
'DesignerSpace/Workspace/FunctionLibraries/ShortcutKeys.js',
'DesignerSpace/Workspace/FunctionLibraries/OnFocus.js',
'DesignSpace/Workspace/Workspace.js',
'DesignSpace/Workspace/FunctionLibraries/UiObjectsFromNodes.js',
'DesignSpace/Workspace/FunctionLibraries/ChainAttachDetach.js',
'DesignSpace/Workspace/FunctionLibraries/ReferenceAttachDetach.js',
'DesignSpace/Workspace/FunctionLibraries/NodeDeleter.js',
'DesignSpace/Workspace/FunctionLibraries/ProtocolNode.js',
'DesignSpace/Workspace/FunctionLibraries/NodeCloning.js',
'DesignSpace/Workspace/FunctionLibraries/NodeChildren.js',
'DesignSpace/Workspace/FunctionLibraries/TaskFunctions.js',
'DesignSpace/Workspace/FunctionLibraries/SessionFunctions.js',
'DesignSpace/Workspace/FunctionLibraries/ShortcutKeys.js',
'DesignSpace/Workspace/FunctionLibraries/OnFocus.js',
'Utilities/RoundedCornersBackground.js',
@@ -68,9 +68,9 @@ function newAppLoader() {
'Spaces/CockpitSpace.js',
'Spaces/TopSpace.js',
'Spaces/PanelsSpace.js',
'Spaces/ChartSpace.js',
'Spaces/ChartingSpace.js',
'Spaces/FloatingSpace.js',
'Spaces/DesignerSpace.js',
'Spaces/DesignSpace.js',
'Files/SingleFile.js',
'Files/FileCloud.js',
@@ -122,7 +122,7 @@ function newAppLoader() {
'Container.js',
'Utilities.js',
'Dashboard.js'
'PostLoader.js'
])
modulesArray = modulesArray.concat(plotters)
+7 -7
View File
@@ -237,31 +237,31 @@ function onBrowserRequest (request, response) {
}
break
case 'DesignerSpace': // This means the DesignerSpace folder.
case 'DesignSpace': // This means the DesignSpace folder.
{
if (requestParameters[3] === undefined) {
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignerSpace/' + requestParameters[2], response)
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2], response)
return
}
if (requestParameters[4] === undefined) {
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignerSpace/' + requestParameters[2] + '/' + requestParameters[3], response)
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2] + '/' + requestParameters[3], response)
return
}
if (requestParameters[5] === undefined) {
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignerSpace/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response)
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/DesignSpace/' + requestParameters[2] + '/' + requestParameters[3] + '/' + requestParameters[4], response)
return
}
}
break
case 'ControlsToolBox': // This means the DesignerSpace folder.
case 'ControlsToolBox': // This means the DesignSpace folder.
{
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/ControlsToolBox/' + requestParameters[2], response)
}
break
case 'Utilities': // This means the DesignerSpace folder.
case 'Utilities': // This means the DesignSpace folder.
{
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/Utilities/' + requestParameters[2], response)
}
@@ -334,7 +334,7 @@ function onBrowserRequest (request, response) {
}
break
case 'ChartsSpace':
case 'ChartingSpace':
{
respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response)
}
+1 -1
View File
@@ -30,7 +30,7 @@ dataset_definition: "A dataset definition contains a configuration file that def
record_definition: "The record definition is where indicators define how many fields, what fields and in which order those fields will be stored in each record."
record: "A record is the compendium of information stored for each period of time, including the start and end datetime of the period along with the properties that provide the information the indicator is meant to generate."
record_property: "A record is the compendium of information stored for each period of time, including the start and end datetime of the period along with the properties that provide the information the indicator is meant to generate."
formula: "In the context of a record definition, formulas are used to assign a value to the property, usually in the form of a variable declared in the calculation or data building procedure."
+1 -1
View File
@@ -30,7 +30,7 @@ dataset_definition: "A dataset definition contains a configuration file that def
record_definition: "The record definition is where indicators define how many fields, what fields and in which order those fields will be stored in each record."
record: "A record is the compendium of information stored for each period of time, including the start and end datetime of the period along with the properties that provide the information the indicator is meant to generate."
record_property: "A record is the compendium of information stored for each period of time, including the start and end datetime of the period along with the properties that provide the information the indicator is meant to generate."
formula: "In the context of a record definition, formulas are used to assign a value to the property, usually in the form of a variable declared in the calculation or data building procedure."
+17 -7
View File
@@ -271,14 +271,24 @@ entries:
output: web
class: childItem
# - title: Product definition
# url: /suite-product-definition.html
# output: web
# class: childItem
- title: Product definition
url: /suite-product-definition.html
output: web
class: childItem
# - title: Input-to-output cycle
# url: /suite-input-to-output-cycle.html
# output: web
- title: Plotters
url: /suite-plotters.html
output: web
- title: Plotter Panel
url: /suite-plotter-panel.html
output: web
class: childItem
- title: Shapes
url: /suite-shapes.html
output: web
class: childItem
# - title: Datasets
# url: /suite-datasets.html
+1 -1
View File
@@ -75,7 +75,7 @@ Those actions are performed recursively for each record, and the graphics are pl
<!--------------------------------------------- ADDING starts -->
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
To add a plotter, select *Add Plotter* on the data mine node menu. An indicator bot is created along with the basic structure of nodes required to define it.
<!--------------------------------------------- ADDING ends -->
+18
View File
@@ -0,0 +1,18 @@
---
title: Plotter Panel
summary: "A plotter panel allows building panels with numerical representations of data."
sidebar: suite_sidebar
permalink: suite-plotter-panel.html
toc: false
---
{% include /data_mine/plotter-panel.md heading="##" icon="150-" adding="####" configuring="" starting="" content="yes" definition="bold" table="yes" more="yes"%}
<table class='hierarchyTable'><thead><tr><th><a href='#plotter-panel' data-toggle='tooltip' data-original-title='{{site.data.data_mine.plotter_panel}}'><img src='images/icons/plotter-panel.png' /><br />Plotter Panel</a></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr></thead><tbody>
<tr><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#panel-data' data-toggle='tooltip' data-original-title='{{site.data.data_mine.panel_data}}'><img src='images/icons/panel-data.png' /><br />Panel Data</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#data-formula' data-toggle='tooltip' data-original-title='{{site.data.data_mine.data_formula}}'><img src='images/icons/data-formula.png' /><br />Data Formula</a></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>
{% include /data_mine/panel-data.md heading="##" icon="150-" adding="####" configuring="####" starting="" content="yes" definition="bold" table="yes" more="yes"%}
{% include /data_mine/data-formula.md heading="###" icon="" adding="#####" configuring="" starting="" content="no" definition="yes" table="yes" more="yes"%}
+21
View File
@@ -0,0 +1,21 @@
---
title: Plotters
summary: "Plotters read data products created by bots and map certain coordinate points to use them as vertices for polygons, which are assigned styles to create graphic representations of the underlying data."
sidebar: suite_sidebar
permalink: suite-plotters.html
toc: false
---
{% include /data_mine/plotter.md heading="" icon="150-" adding="####" configuring="" starting="" content="yes" definition="bold" table="yes" more="yes" %}
<table class='hierarchyTable'><thead><tr><th><a href='#plotter' data-toggle='tooltip' data-original-title='{{site.data.data_mine.plotter}}'><img src='images/icons/plotter.png' /><br />Plotter</a></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr></thead><tbody>
<tr><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#plotter-module' data-toggle='tooltip' data-original-title='{{site.data.data_mine.plotter_module}}'><img src='images/icons/plotter-module.png' /><br />Plotter Module</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#plotter-panel' data-toggle='tooltip' data-original-title='{{site.data.data_mine.plotter_panel}}'><img src='images/icons/plotter-panel.png' /><br />Plotter Panel</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#shapes' data-toggle='tooltip' data-original-title='{{site.data.data_mine.shapes}}'><img src='images/icons/shapes.png' /><br />Shapes</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>
{% include /data_mine/plotter-module.md heading="##" icon="150-" adding="####" configuring="####" starting="" content="yes" definition="bold" table="yes" more="yes"%}
{% include /data_mine/plotter-panel.md heading="###" icon="" adding="" configuring="" starting="" content="no" definition="yes" table="yes" more="no"%}
{% include /data_mine/shapes.md heading="###" icon="" adding="" configuring="" starting="" content="no" definition="yes" table="yes" more="no"%}
+27 -171
View File
@@ -1,190 +1,46 @@
---
title: Product Definition
summary: ""
summary: "The product definition is the compilation of configurations, references, and JavaScript code that make up the data product."
sidebar: suite_sidebar
permalink: suite-product-definition.html
toc: false
---
## Introduction
{% include /data_mine/product-definition.md heading="" icon="150-" adding="####" configuring="####" starting="" content="yes" definition="bold" table="yes" more="yes" %}
Now that we have covered processes definitions, let's go back to the top level structure and do the same with the structure of *products definitions*.
<table class='hierarchyTable'><thead><tr><th><a href='#product-definition' data-toggle='tooltip' data-original-title='{{site.data.data_mine.product_definition}}'><img src='images/icons/product-definition.png' /><br />Product Definition</a></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr></thead><tbody>
<tr><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#dataset-definition' data-toggle='tooltip' data-original-title='{{site.data.data_mine.dataset_definition}}'><img src='images/icons/dataset-definition.png' /><br />Dataset Definition</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#record-definition' data-toggle='tooltip' data-original-title='{{site.data.data_mine.record_definition}}'><img src='images/icons/record-definition.png' /><br />Record Definition</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#record-property' data-toggle='tooltip' data-original-title='{{site.data.data_mine.record_property}}'><img src='images/icons/record-property.png' /><br />Record Property</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-line.png' /></td><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#formula' data-toggle='tooltip' data-original-title='{{site.data.data_mine.formula}}'><img src='images/icons/formula.png' /><br />Formula</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#calculations-procedure' data-toggle='tooltip' data-original-title='{{site.data.data_mine.calculations_procedure}}'><img src='images/icons/calculations-procedure.png' /><br />Calculations Procedure</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#procedure-loop' data-toggle='tooltip' data-original-title='{{site.data.data_mine.procedure_loop}}'><img src='images/icons/procedure-loop.png' /><br />Procedure Loop</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#javascript-code' data-toggle='tooltip' data-original-title='{{site.data.data_mine.javascript_code}}'><img src='images/icons/javascript-code.png' /><br />JavaScript Code</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#procedure-initialization' data-toggle='tooltip' data-original-title='{{site.data.data_mine.procedure_initialization}}'><img src='images/icons/procedure-initialization.png' /><br />Procedure Initialization</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-line.png' /></td><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#javascript-code' data-toggle='tooltip' data-original-title='{{site.data.data_mine.javascript_code}}'><img src='images/icons/javascript-code.png' /><br />JavaScript Code</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#data-building-procedure' data-toggle='tooltip' data-original-title='{{site.data.data_mine.data_building_procedure}}'><img src='images/icons/data-building-procedure.png' /><br />Data Building Procedure</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#procedure-loop' data-toggle='tooltip' data-original-title='{{site.data.data_mine.procedure_loop}}'><img src='images/icons/procedure-loop.png' /><br />Procedure Loop</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#javascript-code' data-toggle='tooltip' data-original-title='{{site.data.data_mine.javascript_code}}'><img src='images/icons/javascript-code.png' /><br />JavaScript Code</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#procedure-initialization' data-toggle='tooltip' data-original-title='{{site.data.data_mine.procedure_initialization}}'><img src='images/icons/procedure-initialization.png' /><br />Procedure Initialization</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#javascript-code' data-toggle='tooltip' data-original-title='{{site.data.data_mine.javascript_code}}'><img src='images/icons/javascript-code.png' /><br />JavaScript Code</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>
We will take a look into Paula's Bollinger Standard Channels product and explore the three main definitions required: *records definition*, *dataset definitions*, *calculation procedures* and *data building procedure*.
| Records Definition | Dataset Definition | Calculations Procedure | Data Building Procedure |
| :---: | :---: | :---: | :---: |
| ![record-definition](https://user-images.githubusercontent.com/13994516/69095231-2efab600-0a52-11ea-84e0-595c5597b15c.png) | ![dataset-definition](https://user-images.githubusercontent.com/13994516/69095229-2efab600-0a52-11ea-9279-25547dfe8bf1.png) | ![calculations-procedure](https://user-images.githubusercontent.com/13994516/69095232-2efab600-0a52-11ea-9ce4-759cc38cadc7.png) | ![data-building-procedure](https://user-images.githubusercontent.com/13994516/69166812-265abc00-0af4-11ea-859c-299fa6ffc793.png)
But first, let's take a look at the image below, showing a piece of configuration available within the main *product definition* node.
[![Indicators-Product-Definition-01](https://user-images.githubusercontent.com/13994516/69140177-4a050e80-0ac2-11ea-8374-114ca00a0d08.gif)](https://user-images.githubusercontent.com/13994516/69140177-4a050e80-0ac2-11ea-8374-114ca00a0d08.gif)
{% include /data_mine/dataset-definition.md heading="##" icon="150-" adding="###" configuring="###" starting="" content="yes" definition="bold" table="yes" more="yes" %}
```js
{
"codeName": "Bollinger-Standard-Channels",
"singularVariableName": "bollingerStandardChannel",
"pluralVariableName": "bollingerStandardChannels"
}
```
{% include /data_mine/record-definition.md heading="##" icon="150-" adding="###" configuring="" starting="" content="yes" definition="bold" table="yes" more="yes" %}
* ```codeName``` is the name of the product as it is used within the bot's code.
{% include /data_mine/record-property.md heading="###" icon="" adding="#####" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes" %}
* ```singularVariableName``` is the singular form of the name of the variable representing the product, as it will later be used on strategies (*i.e.:* ```bollingerChannel.direction```, where *bollingerChannel* is the name of the product as defined in its configuration and *direction* is the name of the property, as you will see later on in the Records Definition section).
{% include /data_mine/formula.md heading="####" icon="" adding="######" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes" %}
* ```pluralVariableName``` is the plural form of the variable.
{% include /data_mine/calculations-procedure.md heading="##" icon="150-" adding="###" configuring="" starting="" content="yes" definition="bold" table="yes" more="yes" %}
> **NOTE:** Remember that names set in configuration files are the ones used in the bot's code, not the label that may be set directly over the node. You may use a descriptive name on the label as a personal reference if you wish, but it will never be used in the code.
{% include /data_mine/procedure-loop.md heading="###" icon="" adding="#####" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes" %}
## Records Definition
{% include /data_mine/javascript-code.md heading="####" icon="" adding="######" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes" %}
This is where indicators define how many fields, what fields and in which order those fields will be stored in each record.
{% include /data_mine/procedure-initialization.md heading="###" icon="" adding="#####" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes" %}
| Record Property |
| :---: |
| ![record-property](https://user-images.githubusercontent.com/13994516/69135300-35704880-0ab9-11ea-8f40-aacdc6334047.png) |
Records may have as many properties as required. Remember that the order in which record properties are defined around the parent *record definition* node is the order in which they are stored in the actual record.
Record properties have an internal configuration:
```js
{
"codeName": "begin",
"isString": false,
"isCalculated": true
}
```
* ```codeName``` is the name of the record as it is used in the bot's code. Most record definitions will have a *begin* date and an *end* date.
* ```isString``` determines if the field is a text string or if, in turn, is a numeric field. Dates are stored in the *epoch* format, which is numeric. The reason why this configuration is important is because fields which are strings need to be stored between "double quotes".
* ```isCalculated``` determines if the field is stored in the dataset or if, instead, is calculated at a later stage, as explained in the *input to output cycle* earlier. A value *true* means that the record is not stored. In the case ```isCaculated``` is not defined in the configuration, it is assumed to be false.
[![Indicators-Record-Definitions-01](https://user-images.githubusercontent.com/13994516/69139160-3ce72000-0ac0-11ea-9566-a259c9ea6194.gif)](https://user-images.githubusercontent.com/13994516/69139160-3ce72000-0ac0-11ea-9566-a259c9ea6194.gif)
The image above shows the four different record properties defined for Paula's Bollinger Standard Channels product.
You will notice some *record properties* may have a formula attached. **In this context, formulas are used to assign a value to the property.**
The formula may act in slightly different ways depending on the ```isCaculated``` attribute in the *property definition* configuration:
* When a property is calculated (```"isCalculated": true```), the formula assigns to the property a value that is calculated in the *calculations procedure* (we will study this procedure further down this explantion). Even if the property is not stored in the dataset, it is made available as a *calculated property* to other bots that may have the dataset as input.
* When a property is not calculated (```"isCalculated": false``` or the attribute is not defined in the configuration) the formula is applied in the *data building procedure* (we will get to that later on too).
[![Indicators-Record-Property-Formulas-01](https://user-images.githubusercontent.com/13994516/69168829-a6365580-0af7-11ea-8583-f39a19a6465b.gif)](https://user-images.githubusercontent.com/13994516/69168829-a6365580-0af7-11ea-8583-f39a19a6465b.gif)
The image above shows Chris' Bollinger Band product *record definitions*. Notice how the first five properties have no formula while the last two remaining properties do have formulas. These last two properties are calculated.
## Dataset Definition
Datasets are defined via a configuration script that contains roughly the following information:
```js
{
"codeName": "Multi-Period-Market",
"type": "Market Files",
"validPeriods": [ "24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs" ],
"filePath": "AAMasters/AAPaula.1.0/AACloud.1.1/@Exchange/dataSet.V1/Output/Bollinger-Standard-Channels/Multi-Period-Market/@Period",
"fileName": "@AssetA_@AssetB.json"
}
```
The code is pretty much self explanatory:
* ```codeName``` is the name of the dataset as used within the code.
* ```type``` refers to the type of dataset as described in the [Outputs](outputs#types-of-datasets) section.
* ```validPeriods``` refers to the timeperiods covered in the dataset.
* ```filePath``` sets the path on which files will be stored.
* ```fileName``` sets the name of the files that constitute the dataset.
[![Indicators-Dataset-Definitions-Links-01](https://user-images.githubusercontent.com/13994516/69176546-324f7980-0b06-11ea-91cb-1b421f62d466.gif)](https://user-images.githubusercontent.com/13994516/69176546-324f7980-0b06-11ea-91cb-1b421f62d466.gif)
The image above shows the reference that needs to be present between the *dataset definition* and the corresponding *output dataset* defined as the *process output*.
## Calculations Procedure
The calculations procedure is where the processing of calculated properties takes place.
| Procedure Initialization | Procedure Loop |
| :---: | :---: |
| ![procedure-initialization](https://user-images.githubusercontent.com/13994516/69167799-d1b84080-0af5-11ea-9012-be9298397ec4.png) | ![procedure-loop](https://user-images.githubusercontent.com/13994516/69167802-d1b84080-0af5-11ea-9880-2dc4c5c5e744.png) |
The procedure has two structure of nodes:
* **Procedure initialization** allows running a piece of code before the recursive process starts, and it is mostly used to initialize variables.
* **Procedure loop** holds the code that will be applied to calculate the properties for each record in a recursive manner.
Let's take Chris' Bollinger Bands *calculation procedure* as an example.
The code for its *procedure initialization* is:
```js
variable.lastMovingAverage = 0
variable.SIDE_TOLERANCE = 0.5 * system.timePeriod / system.ONE_DAY_IN_MILISECONDS
variable.SMALL_SLOPE = 1.0 * system.timePeriod / system.ONE_DAY_IN_MILISECONDS
variable.MEDIUM_SLOPE = 2.0 * system.timePeriod / system.ONE_DAY_IN_MILISECONDS
variable.HIGH_SLOPE = 4.0 * system.timePeriod / system.ONE_DAY_IN_MILISECONDS
```
As you may be able to gather from the code snippet above, five different variables are being initialized with simple calculations.
The code for the *procedure loop* section is:
```js
if (variable.lastMovingAverage > product.bollingerBand.movingAverage) { variable.direction = "Down" }
if (variable.lastMovingAverage < product.bollingerBand.movingAverage) { variable.direction = "Up" }
if (variable.lastMovingAverage === product.bollingerBand.movingAverage) { variable.direction = "Side" }
variable.delta = Math.abs(product.bollingerBand.movingAverage - variable.lastMovingAverage)
variable.slope = "Extreme"
if (variable.delta < product.bollingerBand.movingAverage * variable.HIGH_SLOPE / 100) { variable.slope = "Steep" }
if (variable.delta < product.bollingerBand.movingAverage * variable.MEDIUM_SLOPE / 100) { variable.slope = "Medium" }
if (variable.delta < product.bollingerBand.movingAverage * variable.SMALL_SLOPE / 100) { variable.slope = "Gentle" }
if (variable.delta < product.bollingerBand.movingAverage * variable.SIDE_TOLERANCE / 100) { variable.slope = "Side" }
variable.lastMovingAverage = product.bollingerBand.movingAverage
```
As you may see, the first block of code determines the direction of the channel (Down, Up or Side), while the second section determines the inclination of the slope of the Moving Average (Extreme, Steep, Medium, Gentle, side).
## Data Building Procedure
The *data building procedure* is the section in which the operations the bot will perform on the input dataset are defined. These operations should result in the values of the properties previously defined.
| Procedure Initialization | Procedure Loop |
| :---: | :---: |
| ![procedure-initialization](https://user-images.githubusercontent.com/13994516/69167799-d1b84080-0af5-11ea-9012-be9298397ec4.png) | ![procedure-loop](https://user-images.githubusercontent.com/13994516/69167802-d1b84080-0af5-11ea-9880-2dc4c5c5e744.png) |
As you may figure, the *data building procedure* works pretty much like the *calculations procedure*, with a *procedure initialization* structure of nodes and a *procedure loop* structure of nodes.
Let's take a peek at the code Paula uses to build the Bollinger Standard Channels out of the Bollinger Bands dataset offered by Chris.
Procedure initialization:
```js
variable.period = 1
```
Procedure loop:
```js
if (record.previous !== undefined) {
if (record.current.direction === record.previous.direction) {
variable.period++
} else {
variable.period = 1
}
}
```
Simple right?
Indeed. You may recall that the Bollinger Standard Channel product has four different *record properties* defined: *begin* and *end*, which are dates taken directly from the input data source, *direction*, which is handed by Chris as a calculated property, and *period*, which is all Paula needs to calculate to build this new dataset.
{% include /data_mine/data-building-procedure.md heading="##" icon="150-" adding="###" configuring="" starting="" content="yes" definition="bold" table="yes" more="yes" %}
+43
View File
@@ -0,0 +1,43 @@
---
title: Shapes
summary: "Shapes define coordinate points to use as vertex for polygons, which are assigned styles."
sidebar: suite_sidebar
permalink: suite-shapes.html
toc: false
---
{% include /data_mine/shapes.md heading="" icon="150-" adding="####" configuring="" starting="" content="yes" definition="bold" table="yes" more="yes"%}
<table class='hierarchyTable'><thead><tr><th><a href='#shapes' data-toggle='tooltip' data-original-title='{{site.data.data_mine.shapes}}'><img src='images/icons/shapes.png' /><br />Shapes</a></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr></thead><tbody>
<tr><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#chart-points' data-toggle='tooltip' data-original-title='{{site.data.data_mine.chart_points}}'><img src='images/icons/chart-points.png' /><br />Chart Points</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#point' data-toggle='tooltip' data-original-title='{{site.data.data_mine.point}}'><img src='images/icons/point.png' /><br />Point</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-line.png' /></td><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#point-formula' data-toggle='tooltip' data-original-title='{{site.data.data_mine.point_formula}}'><img src='images/icons/point-formula.png' /><br />Point Formula</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#polygon' data-toggle='tooltip' data-original-title='{{site.data.data_mine.polygon}}'><img src='images/icons/polygon.png' /><br />Polygon</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#polygon-vertex' data-toggle='tooltip' data-original-title='{{site.data.data_mine.polygon_vertex}}'><img src='images/icons/polygon-vertex.png' /><br />Polygon Vertex</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#polygon-border' data-toggle='tooltip' data-original-title='{{site.data.data_mine.polygon_border}}'><img src='images/icons/polygon-border.png' /><br />Polygon Border</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#style' data-toggle='tooltip' data-original-title='{{site.data.data_mine.style}}'><img src='images/icons/style.png' /><br />Style</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-line.png' /></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#style-condition' data-toggle='tooltip' data-original-title='{{site.data.data_mine.style_condition}}'><img src='images/icons/style-condition.png' /><br />Style Condition</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-line.png' /></td><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#style' data-toggle='tooltip' data-original-title='{{site.data.data_mine.style}}'><img src='images/icons/style.png' /><br />Style</a></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#polygon-body' data-toggle='tooltip' data-original-title='{{site.data.data_mine.polygon_body}}'><img src='images/icons/polygon-body.png' /><br />Polygon Body</a></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td><img src='images/icons/tree-connector-fork.png' /></td><td><a href='#style' data-toggle='tooltip' data-original-title='{{site.data.data_mine.style}}'><img src='images/icons/style.png' /><br />Style</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#style-condition' data-toggle='tooltip' data-original-title='{{site.data.data_mine.style_condition}}'><img src='images/icons/style-condition.png' /><br />Style Condition</a></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>
<tr><td></td><td></td><td></td><td><img src='images/icons/tree-connector-elbow.png' /></td><td><a href='#style' data-toggle='tooltip' data-original-title='{{site.data.data_mine.style}}'><img src='images/icons/style.png' /><br />Style</a></td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>
{% include /data_mine/chart-points.md heading="##" icon="150-" adding="####" configuring="" starting="" content="yes" definition="bold" table="yes" more="yes"%}
{% include /data_mine/point.md heading="####" icon="" adding="#####" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes"%}
{% include /data_mine/point-formula.md heading="#####" icon="" adding="######" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes"%}
{% include /data_mine/polygon.md heading="##" icon="150-" adding="####" configuring="" starting="" content="yes" definition="bold" table="yes" more="yes"%}
{% include /data_mine/polygon-vertex.md heading="###" icon="" adding="#####" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes"%}
{% include /data_mine/polygon-border.md heading="###" icon="" adding="#####" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes"%}
{% include /data_mine/style.md heading="#####" icon="" adding="######" configuring="######" starting="" content="yes" definition="bold" table="yes" more="yes"%}
{% include /data_mine/style-condition.md heading="#####" icon="" adding="######" configuring="####" starting="" content="yes" definition="bold" table="yes" more="yes"%}
{% include /data_mine/polygon-body.md heading="###" icon="" adding="#####" configuring="" starting="" content="yes" definition="yes" table="yes" more="yes"%}