352 lines
7.9 KiB
JavaScript
352 lines
7.9 KiB
JavaScript
|
|
function newDesignSpace () {
|
|
const MODULE_NAME = 'Designe Space'
|
|
let thisObject = {
|
|
sidePanel: undefined,
|
|
container: undefined,
|
|
iconCollection: undefined,
|
|
iconByUiObjectType: undefined,
|
|
workspace: undefined,
|
|
physics: physics,
|
|
draw: draw,
|
|
getContainer: getContainer,
|
|
makeVisible: makeVisible,
|
|
makeInvisible: makeInvisible,
|
|
initialize: initialize
|
|
}
|
|
|
|
let container = newContainer()
|
|
container.initialize()
|
|
thisObject.container = container
|
|
|
|
container.isDraggeable = false
|
|
|
|
thisObject.iconCollection = new Map()
|
|
thisObject.iconByUiObjectType = new Map()
|
|
|
|
return thisObject
|
|
|
|
function initialize () {
|
|
loadIconCollection()
|
|
buildIconByUiObjectTypeMap()
|
|
|
|
thisObject.workspace = newWorkspace()
|
|
thisObject.workspace.initialize()
|
|
}
|
|
|
|
function buildIconByUiObjectTypeMap () {
|
|
/* Take types-icons relationships defined at the schema */
|
|
for (let i = 0; i < APP_SCHEMA_ARRAY.length; i++) {
|
|
let nodeDefinition = APP_SCHEMA_ARRAY[i]
|
|
let iconName = nodeDefinition.icon
|
|
if (iconName !== undefined) {
|
|
let icon = thisObject.iconCollection.get(iconName)
|
|
thisObject.iconByUiObjectType.set(nodeDefinition.type, icon)
|
|
}
|
|
}
|
|
}
|
|
|
|
function loadIconCollection () {
|
|
const iconsNames = [
|
|
'analysis',
|
|
'analysis-1',
|
|
'approve',
|
|
'attach',
|
|
'attractive',
|
|
'pyramid',
|
|
'brainstorming',
|
|
'broken-link',
|
|
'chat',
|
|
'chronometer',
|
|
'compass',
|
|
'competition',
|
|
'content',
|
|
'design-tool',
|
|
'grid',
|
|
'headphones',
|
|
'html',
|
|
'image',
|
|
'layout',
|
|
'loading',
|
|
'login',
|
|
'pantone',
|
|
'paper-plane',
|
|
'photo-camera',
|
|
'piggy-bank',
|
|
'pipette',
|
|
'pixel',
|
|
'placeholder',
|
|
'planning',
|
|
'promotion',
|
|
'pyramid',
|
|
'quality',
|
|
'responsive',
|
|
'schedule',
|
|
'search',
|
|
'security',
|
|
'settings',
|
|
'sitemap',
|
|
'startup',
|
|
'support',
|
|
'tap',
|
|
'menu-fix-pinned',
|
|
'menu-fix-unpinned',
|
|
'targeting',
|
|
'task',
|
|
'testing',
|
|
'text',
|
|
'timeline',
|
|
'tools',
|
|
'delete',
|
|
'upload',
|
|
'vector',
|
|
'video-player',
|
|
'menu-mobility-freeze',
|
|
'menu-mobility-unfreeze',
|
|
'menu-tree-minus',
|
|
'menu-tree-plus',
|
|
'menu-backup',
|
|
'menu-share',
|
|
'stop',
|
|
'stage-open',
|
|
'stage-close',
|
|
'stage-trigger',
|
|
'stage-trigger-trigger-on',
|
|
'stage-trigger-trigger-off',
|
|
'stage-trigger-take-position',
|
|
'menu-tensor-fixed-angles',
|
|
'menu-tensor-free-angles',
|
|
'stage-open-position-size',
|
|
'stage-open-take-profit',
|
|
'stage-open-postion-rate',
|
|
'session-live-trading',
|
|
'session-paper-trading',
|
|
'session-backtesting',
|
|
'session-forward-testing',
|
|
'network',
|
|
'network-node',
|
|
'bot-trading',
|
|
'layer-manager',
|
|
'process',
|
|
'bot-indicator',
|
|
'bot-sensor',
|
|
'time-period',
|
|
'data-mine',
|
|
'procedure-loop',
|
|
'calculations-procedure',
|
|
'data-building-procedure',
|
|
'procedure-initialization',
|
|
'process-definition',
|
|
'output-dataset',
|
|
'data-dependency',
|
|
'product-definition',
|
|
'plotter-module',
|
|
'status-dependency',
|
|
'record-property',
|
|
'record-definition',
|
|
'plotter',
|
|
'plotter-panel',
|
|
'dataset-definition',
|
|
'status-report',
|
|
'execution-finished-event',
|
|
'process-dependencies',
|
|
'process-output',
|
|
'social-bot',
|
|
'execution-started-event',
|
|
'shapes',
|
|
'chart-point',
|
|
'style',
|
|
'chart-points',
|
|
'shapes-polygon-vertex',
|
|
'shapes-polygon-border',
|
|
'shapes-polygon-body',
|
|
'chart-point-formula',
|
|
'style-condition',
|
|
'shapes-polygon',
|
|
'data-entry',
|
|
'data-formula',
|
|
'clone',
|
|
'exchange-account-asset',
|
|
'exchange-account-key',
|
|
'user-keys',
|
|
'user-assets',
|
|
'asset',
|
|
'exchange-accounts',
|
|
'user-account',
|
|
'market',
|
|
'exchange-assets',
|
|
'crypto-exchanges',
|
|
'crypto-exchange',
|
|
'exchange-markets',
|
|
'charting-space',
|
|
'time-line-chart',
|
|
'time-frame-scale',
|
|
'time-scale',
|
|
'rate-scale',
|
|
'time-machine',
|
|
'data-product',
|
|
'single-market-data',
|
|
'data-storage',
|
|
'dataset',
|
|
'viewport',
|
|
'bitfinex',
|
|
'binance',
|
|
'kucoin',
|
|
'bittrex',
|
|
'kraken',
|
|
'poloniex',
|
|
'upbit',
|
|
'monero',
|
|
'tether',
|
|
'tron',
|
|
'stellar',
|
|
'qtum',
|
|
'neo',
|
|
'litecoin',
|
|
'ethereum-classic',
|
|
'ethereum',
|
|
'eos',
|
|
'dash',
|
|
'cardano',
|
|
'bitcoin-cash',
|
|
'bitcoin',
|
|
'binance-coin',
|
|
'trend',
|
|
'oscillator',
|
|
'moving-average',
|
|
'histogram',
|
|
'band',
|
|
'volume',
|
|
'candles',
|
|
'bitmex',
|
|
'liquid',
|
|
'hitbtc',
|
|
'us-dollar',
|
|
'distance-to-parent-200',
|
|
'distance-to-parent-150',
|
|
'distance-to-parent-100',
|
|
'distance-to-parent-050',
|
|
'distance-to-parent-025',
|
|
'distance-to-parent-000',
|
|
'angle-to-parent-360',
|
|
'angle-to-parent-180',
|
|
'angle-to-parent-090',
|
|
'angle-to-parent-045',
|
|
'angle-to-parent-000',
|
|
'data-mining',
|
|
'initial-definition',
|
|
'next-phase-event',
|
|
'testing-environment',
|
|
'production-environment',
|
|
'task-manager',
|
|
'session-based-data',
|
|
'session-independent-data',
|
|
'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',
|
|
'mouse-pointer',
|
|
'mouse-left-click',
|
|
'mouse-right-click',
|
|
'mouse-wheel-up',
|
|
'mouse-wheel-down',
|
|
'mouse-wheel-click',
|
|
'key-alt',
|
|
'key-shift',
|
|
'key-ctrl',
|
|
'hand-drag',
|
|
'key-down',
|
|
'key-left',
|
|
'key-right',
|
|
'key-up',
|
|
'master-script',
|
|
'scripts-library',
|
|
'super-action',
|
|
'super-scripts',
|
|
'template-script',
|
|
'template-structure',
|
|
'template-target',
|
|
'delink',
|
|
'detach',
|
|
'help',
|
|
'key-a',
|
|
'key-m',
|
|
'key-r',
|
|
'arrangement-horizontal-top',
|
|
'arrangement-convex',
|
|
'arrangement-horizontal-bottom',
|
|
'arrangement-vertical-right',
|
|
'arrangement-vertical-left',
|
|
'arrangement-concave',
|
|
'move-to-phase-event',
|
|
'open-execution',
|
|
'move-order',
|
|
'market-order',
|
|
'limit-order',
|
|
'execution-algorithm',
|
|
'cancel-order'
|
|
]
|
|
|
|
for (let i = 0; i < iconsNames.length; i++) {
|
|
let name = iconsNames[i]
|
|
loadImage(name)
|
|
}
|
|
|
|
function loadImage (name) {
|
|
const PATH = 'Images/Icons/style-01/'
|
|
let image = new Image()
|
|
image.onload = onImageLoad
|
|
image.fileName = name
|
|
|
|
function onImageLoad () {
|
|
image.canDrawIcon = true
|
|
}
|
|
image.src = window.canvasApp.urlPrefix + PATH + name + '.png'
|
|
thisObject.iconCollection.set(name, image)
|
|
}
|
|
}
|
|
|
|
function physics () {
|
|
thisObject.workspace.physics()
|
|
}
|
|
|
|
function makeVisible () {
|
|
visible = true
|
|
}
|
|
|
|
function makeInvisible () {
|
|
visible = false
|
|
}
|
|
|
|
function getContainer (point) {
|
|
let container
|
|
|
|
if (thisObject.sidePanel !== undefined) {
|
|
container = thisObject.sidePanel.getContainer(point)
|
|
if (container !== undefined) {
|
|
container.space = 'Design Space'
|
|
return container
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
function draw () {
|
|
if (canWeDraw === false) { return }
|
|
if (thisObject.sidePanel !== undefined) {
|
|
thisObject.sidePanel.draw()
|
|
}
|
|
if (thisObject.workspace !== undefined) {
|
|
thisObject.workspace.draw()
|
|
}
|
|
}
|
|
}
|