Files
Superalgos/CanvasApp/FloatingSpace/ConditionEditor.js
T

846 lines
29 KiB
JavaScript

function newConditionEditor () {
const MODULE_NAME = 'Condition Editor'
let thisObject = {
isVisibleFunction: undefined,
visible: false,
imagePathOK: undefined,
imagePathNOT_OK: undefined,
container: undefined,
payload: undefined,
deactivate: deactivate,
activate: activate,
physics: physics,
drawBackground: drawBackground,
drawForeground: drawForeground,
getContainer: getContainer,
finalize: finalize,
initialize: initialize
}
thisObject.container = newContainer()
thisObject.container.initialize(MODULE_NAME, 'Circle')
thisObject.container.isClickeable = false
thisObject.container.isDraggeable = false
thisObject.container.detectMouseOver = false
thisObject.container.frame.radius = 750
thisObject.container.frame.containerName = MODULE_NAME
let isMouseOver = false
let operationPicker
let operatorA
let operatorB
return thisObject
function finalize () {
thisObject.container.finalize()
thisObject.container = undefined
thisObject.payload = undefined
thisObject.isVisibleFunction = undefined
operationPicker = undefined
operatorA = undefined
operatorB = undefined
}
function initialize () {
}
function activate (payload) {
thisObject.visible = true
thisObject.payload = payload
thisObject.payload.uiObject.setErrorMessage('', 0)
operatorA = {}
operatorB = {}
scanDataMines()
initializePickers()
loadFromCode()
EDITOR_ON_FOCUS = true
}
function deactivate () {
convertToCode()
finalizePickers()
if (thisObject.visible === true) {
thisObject.visible = false
}
EDITOR_ON_FOCUS = false
}
function convertToCode () {
if (operatorA === undefined || operatorB === undefined || operationPicker === undefined) { return }
// chart.at01hs.bollingerSubChannel.previous.previous.slope=== "Extreme"
let code = ''
code = code + 'chart.at' + operatorA.timeFramePicker.getSelected().replace('-', '')
code = code + '.' + operatorA.productPicker.getSelected()
insertWhen(operatorA)
code = code + '.' + operatorA.propertyPicker.getSelected()
switch (operationPicker.getSelected()) {
case 'Greater Than': {
code = code + ' > '
break
}
case 'Less Than': {
code = code + ' < '
break
}
case 'Greater or Equal Than': {
code = code + ' >= '
break
}
case 'Less or Equal Than': {
code = code + ' <= '
break
}
case 'Equal To': {
code = code + ' === '
break
}
}
if (operationPicker.getSelected() === 'Equal To') {
code = code + '"' + operatorA.valuePicker.getSelected() + '"'
} else {
code = code + 'chart.at' + operatorB.timeFramePicker.getSelected().replace('-', '')
code = code + '.' + operatorB.productPicker.getSelected()
insertWhen(operatorB)
code = code + '.' + operatorB.propertyPicker.getSelected()
}
thisObject.payload.node.code = code
function insertWhen (operator) {
switch (operator.whenPicker.getSelected()) {
case 'Current': {
return
}
case '1 Previous': {
code = code + '.previous'
return
}
case '2 Previous': {
code = code + '.previous.previous'
return
}
case '3 Previous': {
code = code + '.previous.previous.previous'
return
}
case '4 Previous': {
code = code + '.previous.previous.previous.previous'
return
}
case '5 Previous': {
code = code + '.previous.previous.previous.previous.previous'
return
}
}
}
}
function loadFromCode () {
if (thisObject.payload.node.code === undefined || thisObject.payload.node.code === '') { return }
let code = thisObject.payload.node.code
let codeA
let codeB
if (code.indexOf(' > ') > 0) {
let codeArray = code.split(' > ')
codeA = codeArray[0]
codeB = codeArray[1]
operationPicker.setSelected(undefined, undefined, undefined, 0)
}
if (code.indexOf(' < ') > 0) {
let codeArray = code.split(' < ')
codeA = codeArray[0]
codeB = codeArray[1]
operationPicker.setSelected(undefined, undefined, undefined, 1)
}
if (code.indexOf(' >= ') > 0) {
let codeArray = code.split(' >= ')
codeA = codeArray[0]
codeB = codeArray[1]
operationPicker.setSelected(undefined, undefined, undefined, 2)
}
if (code.indexOf(' <= ') > 0) {
let codeArray = code.split(' <= ')
codeA = codeArray[0]
codeB = codeArray[1]
operationPicker.setSelected(undefined, undefined, undefined, 3)
}
if (code.indexOf(' === ') > 0) {
let codeArray = code.split(' === ')
codeA = codeArray[0]
codeB = codeArray[1]
operationPicker.setSelected(undefined, undefined, undefined, 4)
}
let codeAArray = codeA.split('.')
let codeBArray = codeB.split('.')
updatePickers(operatorA, codeAArray)
updatePickers(operatorB, codeBArray)
function updatePickers (operator, codeArray) {
let codeTimeFrame = codeArray[1].substring(2, 4) + '-' + codeArray[1].substring(4, 7)
let codeProduct = codeArray[2]
/* Parse When */
let propertyDisplacement = 0
let codeWhen = 'Current'
if (codeArray[3] === 'previous') {
propertyDisplacement++
codeWhen = '1 Previous'
}
if (codeArray[4] === 'previous') {
propertyDisplacement++
codeWhen = '2 Previous'
}
if (codeArray[5] === 'previous') {
propertyDisplacement++
codeWhen = '3 Previous'
}
if (codeArray[6] === 'previous') {
propertyDisplacement++
codeWhen = '4 Previous'
}
if (codeArray[7] === 'previous') {
propertyDisplacement++
codeWhen = '5 Previous'
}
operator.whenPicker.setSelected(undefined, undefined, undefined, propertyDisplacement)
let codeProperty = codeArray[3 + propertyDisplacement]
let codeValue = codeBArray[0].replace('"', '').replace('"', '')
let dataMines = Object.keys(operator.selector)
for (let i = 0; i < dataMines.length; i++) {
let dataMine = dataMines[i]
let dataMineObject = operator.selector[dataMine]
let bots = Object.keys(dataMineObject)
for (let j = 0; j < bots.length; j++) {
let bot = bots[j]
let botObject = dataMineObject[bot]
let products = Object.keys(botObject)
for (let k = 0; k < products.length; k++) {
let product = products[k]
let productObject = botObject[product]
if (codeProduct === product) {
operator.dataMinePicker.setSelected(dataMines, operator.selector, undefined, i)
operator.botPicker.setSelected(bots, dataMineObject, operator.selector, j)
operator.productPicker.setSelected(products, botObject, dataMineObject, k)
let properties = Object.keys(productObject.properties)
for (let m = 0; m < properties.length; m++) {
let property = properties[m]
let propertyObject = productObject.properties[property]
if (codeProperty === property) {
operator.propertyPicker.setSelected(properties, productObject.properties, botObject, m)
let values = propertyObject.possibleValues
for (let n = 0; n < values.length; n++) {
let value = values[n]
let valueObject = propertyObject[value]
if (codeValue === value) {
operator.valuePicker.setSelected(values, propertyObject, productObject, n)
}
}
}
}
let timeFrames = productObject.validTimeFrames
for (let m = 0; m < timeFrames.length; m++) {
let timeFrame = timeFrames[m]
let timeFrameObject = productObject.validTimeFrames[timeFrame]
if (codeTimeFrame === timeFrame) {
operator.timeFramePicker.setSelected(timeFrames, productObject, botObject, m)
}
}
}
}
}
}
}
}
function scanDataMines () {
let selector = {}
let workspace = canvas.designSpace.workspace.workspaceNode
for (let i = 0; i < workspace.rootNodes.length; i++) {
let rootNode = workspace.rootNodes[i]
if (rootNode.type !== 'Data Mine') { continue }
let dataMine = rootNode
let dataMineName = loadPropertyFromNodeConfig(dataMine.payload, 'codeName')
selector[dataMineName] = {}
let bots = dataMine.sensorBots.concat(dataMine.indicatorBots)
for (let j = 0; j < bots.length; j++) {
let bot = bots[j]
let botName = loadPropertyFromNodeConfig(bot.payload, 'codeName')
let selectorDataMine = selector[dataMineName]
selectorDataMine[botName] = {}
for (let k = 0; k < bot.products.length; k++) {
let product = bot.products[k]
let productName = loadPropertyFromNodeConfig(product.payload, 'singularVariableName')
if (productName === undefined) { continue }
let selectorProduct = selectorDataMine[botName]
selectorProduct[productName] = {
properties: {}
}
if (product.record === undefined) { continue }
for (let m = 0; m < product.record.properties.length; m++) {
let property = product.record.properties[m]
let propertyName = loadPropertyFromNodeConfig(property.payload, 'codeName')
let selectorProperty = selectorProduct[productName]
selectorProperty = selectorProperty.properties
selectorProperty[propertyName] = {}
let possibleValues = loadPropertyFromNodeConfig(property.payload, 'possibleValues')
if (possibleValues === undefined) { possibleValues = [] }
let selectorPossibleValue = selectorProperty[propertyName]
selectorPossibleValue.possibleValues = possibleValues
}
let allPossibleTimeFrames = []
for (let m = 0; m < product.datasets.length; m++) {
let dataset = product.datasets[m]
let validTimeFrames = loadPropertyFromNodeConfig(dataset.payload, 'validTimeFrames')
if (validTimeFrames !== undefined) {
allPossibleTimeFrames = allPossibleTimeFrames.concat(validTimeFrames)
}
}
let selectorValidTimeFrames = selectorProduct[productName]
selectorValidTimeFrames.validTimeFrames = allPossibleTimeFrames
let productKeys = Object.keys(selectorProduct[productName])
if (productKeys.length === 0) {
selectorProduct[productName] = undefined
}
}
let botKeys = Object.keys(selectorDataMine[botName])
if (botKeys.length === 0) {
selectorDataMine[botName] = undefined
}
}
let dataMineKeys = Object.keys(selector[dataMineName])
if (dataMineKeys.length === 0) {
selector[dataMineName] = undefined
}
}
operatorA.selector = JSON.parse(JSON.stringify(selector))
operatorB.selector = JSON.parse(JSON.stringify(selector))
}
function initializePickers () {
initializeOperator(operatorA, -1)
initializeOperator(operatorB, 1)
operationPicker = newPicker()
operationPicker.name = 'Data Mine'
operationPicker.container.connectToParent(thisObject.container)
operationPicker.container.frame.position.x = 0 - operationPicker.container.frame.width / 2
operationPicker.container.frame.position.y = 0 - operationPicker.container.frame.height / 2
current = ['Greater Than', 'Less Than', 'Greater or Equal Than', 'Less or Equal Than', 'Equal To']
operationPicker.initialize(current, current)
operationPicker.eventSuscriptionId = operationPicker.container.eventHandler.listenToEvent('onParentChanged', onParentChanged)
}
function initializeOperator (operator, ySign) {
let properties
let parent
let current
operator.whenPicker = newPicker()
operator.whenPicker.name = 'When'
operator.whenPicker.container.connectToParent(thisObject.container)
operator.whenPicker.container.frame.position.x = 0 - operator.whenPicker.container.frame.width / 2 - operator.whenPicker.container.frame.width * 0.5
operator.whenPicker.container.frame.position.y = 0 - operator.whenPicker.container.frame.height / 2 + operator.whenPicker.container.frame.height * ySign
current = ['Current', '1 Previous', '2 Previous', '3 Previous', '4 Previous', '5 Previous']
operator.whenPicker.initialize(current, current)
operator.whenPicker.visible = true
operator.dataMinePicker = newPicker()
operator.dataMinePicker.name = 'Data Mine'
operator.dataMinePicker.container.connectToParent(thisObject.container)
operator.dataMinePicker.container.frame.position.x = 0 - operator.dataMinePicker.container.frame.width / 2 - operator.dataMinePicker.container.frame.width * 2.5
operator.dataMinePicker.container.frame.position.y = 0 - operator.dataMinePicker.container.frame.height / 2 + operator.dataMinePicker.container.frame.height * ySign
current = operator.selector
properties = Object.keys(current)
operator.dataMinePicker.initialize(properties, current)
parent = current
operator.dataMinePicker.visible = true
operator.botPicker = newPicker()
operator.botPicker.name = 'Bot'
operator.botPicker.container.connectToParent(thisObject.container)
operator.botPicker.container.frame.position.x = 0 - operator.botPicker.container.frame.width / 2 - operator.botPicker.container.frame.width * 1.5
operator.botPicker.container.frame.position.y = 0 - operator.botPicker.container.frame.height / 2 + operator.dataMinePicker.container.frame.height * ySign
current = parent[properties[0]]
properties = Object.keys(current)
operator.botPicker.initialize(properties, current, parent)
parent = current
operator.botPicker.visible = true
operator.productPicker = newPicker()
operator.productPicker.name = 'Product'
operator.productPicker.container.connectToParent(thisObject.container)
operator.productPicker.container.frame.position.x = 0 - operator.productPicker.container.frame.width / 2 + operator.productPicker.container.frame.width * 0.5
operator.productPicker.container.frame.position.y = 0 - operator.productPicker.container.frame.height / 2 + operator.dataMinePicker.container.frame.height * ySign
current = parent[properties[0]]
properties = Object.keys(current)
operator.productPicker.initialize(properties, current, parent)
parent = current
operator.productPicker.visible = true
let productParent = parent
let productProperties = properties
operator.propertyPicker = newPicker()
operator.propertyPicker.name = 'Property'
operator.propertyPicker.container.connectToParent(thisObject.container)
operator.propertyPicker.container.frame.position.x = 0 - operator.propertyPicker.container.frame.width / 2 + operator.propertyPicker.container.frame.width * 1.5
operator.propertyPicker.container.frame.position.y = 0 - operator.propertyPicker.container.frame.height / 2 + operator.dataMinePicker.container.frame.height * ySign
current = productParent[productProperties[0]]
current = current.properties
properties = Object.keys(current)
operator.propertyPicker.initialize(properties, current, productParent, 'properties')
parent = current
operator.propertyPicker.visible = true
operator.valuePicker = newPicker()
operator.valuePicker.name = 'Value'
operator.valuePicker.container.connectToParent(thisObject.container)
operator.valuePicker.container.frame.position.x = 0 - operator.valuePicker.container.frame.width / 2
operator.valuePicker.container.frame.position.y = 0 - operator.valuePicker.container.frame.height / 2 + operator.valuePicker.container.frame.height * 1
current = parent[properties[0]]
properties = current.possibleValues
operator.valuePicker.initialize(properties, current, parent, 'possibleValues')
parent = current
operator.valuePicker.visible = false
operator.timeFramePicker = newPicker()
operator.timeFramePicker.name = 'Time Frame'
operator.timeFramePicker.container.connectToParent(thisObject.container)
operator.timeFramePicker.container.frame.position.x = 0 - operator.timeFramePicker.container.frame.width / 2 + operator.timeFramePicker.container.frame.width * 2.5
operator.timeFramePicker.container.frame.position.y = 0 - operator.timeFramePicker.container.frame.height / 2 + operator.timeFramePicker.container.frame.height * ySign
current = productParent[productProperties[0]]
properties = current.validTimeFrames
operator.timeFramePicker.initialize(properties, current, productParent, 'validTimeFrames')
parent = current
operator.timeFramePicker.visible = true
operator.botPicker.eventSuscriptionId = operator.dataMinePicker.container.eventHandler.listenToEvent('onParentChanged', operator.botPicker.onParentChanged)
operator.productPicker.eventSuscriptionId = operator.botPicker.container.eventHandler.listenToEvent('onParentChanged', operator.productPicker.onParentChanged)
operator.propertyPicker.eventSuscriptionId = operator.productPicker.container.eventHandler.listenToEvent('onParentChanged', operator.propertyPicker.onParentChanged)
operator.valuePicker.eventSuscriptionId = operator.propertyPicker.container.eventHandler.listenToEvent('onParentChanged', operator.valuePicker.onParentChanged)
operator.timeFramePicker.eventSuscriptionId = operator.productPicker.container.eventHandler.listenToEvent('onParentChanged', operator.timeFramePicker.onParentChanged)
}
function finalizePickers () {
finalizeOperator(operatorA)
finalizeOperator(operatorB)
operatorA = undefined
operatorB = undefined
if (operationPicker !== undefined) {
operationPicker.container.eventHandler.stopListening(operationPicker.eventSuscriptionId)
operationPicker.finalize()
operationPicker = undefined
}
}
function finalizeOperator (operator) {
if (operator === undefined) { return }
if (operator.whenPicker !== undefined) {
operator.whenPicker.finalize()
operator.whenPicker = undefined
}
if (operator.dataMinePicker !== undefined) {
operator.dataMinePicker.container.eventHandler.stopListening(operator.botPicker.eventSuscriptionId)
operator.dataMinePicker.finalize()
operator.dataMinePicker = undefined
}
if (operator.botPicker !== undefined) {
operator.botPicker.container.eventHandler.stopListening(operator.productPicker.eventSuscriptionId)
operator.botPicker.finalize()
operator.botPicker = undefined
}
if (operator.productPicker !== undefined) {
operator.productPicker.container.eventHandler.stopListening(operator.propertyPicker.eventSuscriptionId)
operator.productPicker.container.eventHandler.stopListening(operator.timeFramePicker.eventSuscriptionId)
operator.productPicker.finalize()
operator.productPicker = undefined
}
if (operator.propertyPicker !== undefined) {
operator.propertyPicker.container.eventHandler.stopListening(operator.valuePicker.eventSuscriptionId)
operator.propertyPicker.finalize()
operator.propertyPicker = undefined
}
if (operator.valuePicker !== undefined) {
operator.valuePicker.finalize()
operator.valuePicker = undefined
}
if (operator.timeFramePicker !== undefined) {
operator.timeFramePicker.finalize()
operator.timeFramePicker = undefined
}
}
function onParentChanged (event) {
if (event.selected === 4) {
// this means Equal To
operatorA.valuePicker.visible = true
operatorB.whenPicker.visible = false
operatorB.dataMinePicker.visible = false
operatorB.botPicker.visible = false
operatorB.productPicker.visible = false
operatorB.propertyPicker.visible = false
operatorB.timeFramePicker.visible = false
} else {
operatorA.valuePicker.visible = false
operatorB.whenPicker.visible = true
operatorB.dataMinePicker.visible = true
operatorB.botPicker.visible = true
operatorB.productPicker.visible = true
operatorB.propertyPicker.visible = true
operatorB.timeFramePicker.visible = true
}
}
function getContainer (point) {
let container
if (thisObject.visible === true) {
if (operationPicker !== undefined) {
container = operationPicker.getContainer(point)
if (container !== undefined) { return container }
}
if (operatorA !== undefined) {
if (operatorA.whenPicker !== undefined) {
if (operatorA.whenPicker.visible === true) {
container = operatorA.whenPicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorA.dataMinePicker !== undefined) {
if (operatorA.dataMinePicker.visible === true) {
container = operatorA.dataMinePicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorA.botPicker !== undefined) {
if (operatorA.botPicker.visible === true) {
container = operatorA.botPicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorA.productPicker !== undefined) {
if (operatorA.productPicker.visible === true) {
container = operatorA.productPicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorA.propertyPicker !== undefined) {
if (operatorA.propertyPicker.visible === true) {
container = operatorA.propertyPicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorA.valuePicker !== undefined) {
if (operatorA.valuePicker.visible === true) {
container = operatorA.valuePicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorA.timeFramePicker !== undefined) {
if (operatorA.timeFramePicker.visible === true) {
container = operatorA.timeFramePicker.getContainer(point)
if (container !== undefined) { return container }
}
}
}
if (operatorB !== undefined) {
if (operatorB.whenPicker !== undefined) {
if (operatorB.whenPicker.visible === true) {
container = operatorB.whenPicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorB.dataMinePicker !== undefined) {
if (operatorB.dataMinePicker.visible === true) {
container = operatorB.dataMinePicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorB.botPicker !== undefined) {
if (operatorB.botPicker.visible === true) {
container = operatorB.botPicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorB.productPicker !== undefined) {
if (operatorB.productPicker.visible === true) {
container = operatorB.productPicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorB.propertyPicker !== undefined) {
if (operatorB.propertyPicker.visible === true) {
container = operatorB.propertyPicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorB.valuePicker !== undefined) {
if (operatorB.valuePicker.visible === true) {
container = operatorB.valuePicker.getContainer(point)
if (container !== undefined) { return container }
}
}
if (operatorB.timeFramePicker !== undefined) {
if (operatorB.timeFramePicker.visible === true) {
container = operatorB.timeFramePicker.getContainer(point)
if (container !== undefined) { return container }
}
}
}
if (thisObject.container.frame.isThisPointHere(point, true) === true) {
return thisObject.container
} else {
return undefined
}
}
}
function physics () {
thisObjectphysics()
operatorsPhysics(operatorA)
operatorsPhysics(operatorB)
if (operationPicker !== undefined) {
operationPicker.physics()
}
}
function selectionPhysics () {
}
function operatorsPhysics (operator) {
if (operator === undefined) { return }
if (operator.whenPicker !== undefined) {
operator.whenPicker.physics()
}
if (operator.dataMinePicker !== undefined) {
operator.dataMinePicker.physics()
}
if (operator.botPicker !== undefined) {
operator.botPicker.physics()
}
if (operator.productPicker !== undefined) {
operator.productPicker.physics()
}
if (operator.propertyPicker !== undefined) {
operator.propertyPicker.physics()
}
if (operator.valuePicker !== undefined) {
operator.valuePicker.physics()
}
if (operator.timeFramePicker !== undefined) {
operator.timeFramePicker.physics()
}
}
function thisObjectphysics () {
}
function drawBackground () {
thisObjectDrawBackground()
childrenDrawBackground()
}
function childrenDrawBackground () {
operatorDrawBackground(operatorA)
operatorDrawBackground(operatorB)
if (operationPicker !== undefined) {
operationPicker.drawBackground()
}
}
function operatorDrawBackground (operator) {
if (operator === undefined) { return }
if (operator.whenPicker !== undefined) {
if (operator.whenPicker.visible === true) {
operator.whenPicker.drawBackground()
}
}
if (operator.dataMinePicker !== undefined) {
if (operator.dataMinePicker.visible === true) {
operator.dataMinePicker.drawBackground()
}
}
if (operator.botPicker !== undefined) {
if (operator.botPicker.visible === true) {
operator.botPicker.drawBackground()
}
}
if (operator.productPicker !== undefined) {
if (operator.productPicker.visible === true) {
operator.productPicker.drawBackground()
}
}
if (operator.propertyPicker !== undefined) {
if (operator.propertyPicker.visible === true) {
operator.propertyPicker.drawBackground()
}
}
if (operator.valuePicker !== undefined) {
if (operator.valuePicker.visible === true) {
operator.valuePicker.drawBackground()
}
}
if (operator.timeFramePicker !== undefined) {
if (operator.timeFramePicker.visible === true) {
operator.timeFramePicker.drawBackground()
}
}
}
function thisObjectDrawBackground () {
if (thisObject.visible === true) {
let position = {
x: 0,
y: 0
}
position = thisObject.container.frame.frameThisPoint(position)
let radius = thisObject.container.frame.radius
browserCanvasContext.beginPath()
browserCanvasContext.arc(position.x, position.y, radius + 3, 0, Math.PI * 2, true)
browserCanvasContext.closePath()
browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + 1 + ')'
browserCanvasContext.fill()
browserCanvasContext.beginPath()
browserCanvasContext.arc(position.x, position.y, radius, 0, Math.PI * 2, true)
browserCanvasContext.closePath()
browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.GREY + ', ' + 1 + ')'
browserCanvasContext.fill()
}
}
function drawForeground () {
thisObjectDrawForeground()
childrenDrawForeground()
}
function childrenDrawForeground () {
operatorDrawForeground(operatorA)
operatorDrawForeground(operatorB)
if (operationPicker !== undefined) {
operationPicker.drawForeground()
}
}
function operatorDrawForeground (operator) {
if (operator === undefined) { return }
if (operator.whenPicker !== undefined) {
if (operator.whenPicker.visible === true) {
operator.whenPicker.drawForeground()
}
}
if (operator.dataMinePicker !== undefined) {
if (operator.dataMinePicker.visible === true) {
operator.dataMinePicker.drawForeground()
}
}
if (operator.botPicker !== undefined) {
if (operator.botPicker.visible === true) {
operator.botPicker.drawForeground()
}
}
if (operator.productPicker !== undefined) {
if (operator.productPicker.visible === true) {
operator.productPicker.drawForeground()
}
}
if (operator.propertyPicker !== undefined) {
if (operator.propertyPicker.visible === true) {
operator.propertyPicker.drawForeground()
}
}
if (operator.valuePicker !== undefined) {
if (operator.valuePicker.visible === true) {
operator.valuePicker.drawForeground()
}
}
if (operator.timeFramePicker !== undefined) {
if (operator.timeFramePicker.visible === true) {
operator.timeFramePicker.drawForeground()
}
}
}
function thisObjectDrawForeground () {
}
}