From b2ff763c80757d3adfcc6254cb7aff7f7e359736 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 15 Dec 2019 22:46:29 +0100 Subject: [PATCH] BUG FIXED with Zooming and the new Plotter module --- ChartsSpace/ViewPort.js | 2 ++ Panels/TimeControlPanel.js | 10 ++++++---- Plotter.js | 17 +++++++++++++++-- Scales/TimePeriodScale.js | 26 ++++++++++++++------------ 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/ChartsSpace/ViewPort.js b/ChartsSpace/ViewPort.js index b96904c80..129fe0071 100644 --- a/ChartsSpace/ViewPort.js +++ b/ChartsSpace/ViewPort.js @@ -290,6 +290,8 @@ function newViewPort () { x: 0, y: 0 } + + thisObject.eventHandler.raiseEvent('Zoom Changed') } function zoomFontSize (baseSize, level) { diff --git a/Panels/TimeControlPanel.js b/Panels/TimeControlPanel.js index 2f650b65c..55d1baa11 100644 --- a/Panels/TimeControlPanel.js +++ b/Panels/TimeControlPanel.js @@ -58,7 +58,9 @@ function newTimeControlPanel () { } function onZoomChanged (event) { - timePeriod = recalculatePeriod(event.newLevel) + if (event !== undefined) { // it is undefined when the level is just being animated. + timePeriod = recalculatePeriod(event.newLevel) + } } function getContainer (point) { @@ -115,7 +117,7 @@ function newTimeControlPanel () { labelPoint = thisObject.container.frame.frameThisPoint(labelPoint) - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)' browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) @@ -132,7 +134,7 @@ function newTimeControlPanel () { labelPoint = thisObject.container.frame.frameThisPoint(labelPoint) - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)' browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) @@ -151,7 +153,7 @@ function newTimeControlPanel () { labelPoint = thisObject.container.frame.frameThisPoint(labelPoint) - browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY browserCanvasContext.fillStyle = 'rgba(60, 60, 60, 0.50)' browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) } diff --git a/Plotter.js b/Plotter.js index a5f4c93b5..2cb4bb394 100644 --- a/Plotter.js +++ b/Plotter.js @@ -59,6 +59,7 @@ function newPlotter () { let marketFilesUpdatedEventSubscriptionId let dailyFilesUpdatedEventSubscriptionId + let logged = false return thisObject function finalize () { @@ -177,7 +178,7 @@ function newPlotter () { try { if (timePeriod !== pTimePeriod) { timePeriod = pTimePeriod - + mustRecalculateDataPoints = true if (timePeriod >= _1_HOUR_IN_MILISECONDS) { let newMarketFile = marketFiles.getFile(pTimePeriod) @@ -408,6 +409,14 @@ function newPlotter () { leftDate = new Date(leftDate.valueOf() - dateDiff * 1.5) rightDate = new Date(rightDate.valueOf() + dateDiff * 1.5) + for (let i = 0; i < records.length; i++) { + let record = records[i] + record.fillStyle = undefined + record.strokeStyle = undefined + record.dataPoints = undefined + record.previous = undefined + records[i] = {} + } records = [] /* Transform the current file content into an array of JSON objects */ @@ -428,7 +437,6 @@ function newPlotter () { function recalculateScale () { try { if (timeLineCoordinateSystem.maxValue > 0) { return } // Already calculated. - /* First we calculate the default scale */ let minValue = { x: MIN_PLOTABLE_DATE.valueOf(), @@ -531,6 +539,9 @@ function newPlotter () { /* We use the datapoints already calculated. */ dataPoints = record.dataPoints } else { + if (logged === false) { + logged = true + } /* Only calculate the datapoints for this record, if we have not calculate it before. */ for (let k = 0; k < productDefinition.referenceParent.shapes.chartPoints.length; k++) { let chartPoints = productDefinition.referenceParent.shapes.chartPoints[k] @@ -747,6 +758,7 @@ function newPlotter () { } mustRecalculateDataPoints = false + logged = false } catch (err) { if (ERROR_LOG === true) { logger.write('[ERROR] plotChart -> err = ' + err.stack) } } @@ -754,6 +766,7 @@ function newPlotter () { function onZoomChanged (event) { try { + mustRecalculateDataPoints = true recalculate() } catch (err) { if (ERROR_LOG === true) { logger.write('[ERROR] onZoomChanged -> err = ' + err.stack) } diff --git a/Scales/TimePeriodScale.js b/Scales/TimePeriodScale.js index 16cc50755..8909eeac7 100644 --- a/Scales/TimePeriodScale.js +++ b/Scales/TimePeriodScale.js @@ -83,21 +83,23 @@ function newTimePeriodScale () { } function onZoomChanged (event) { - let currentTimePeriod = thisObject.timePeriod - let timePeriod = recalculatePeriod(event.newLevel) - if (timePeriod !== currentTimePeriod) { - for (let i = 0; i < timePeriodsMasterArray.length; i++) { - let timePeriodArray = timePeriodsMasterArray[i] - for (let j = 0; j < timePeriodArray.length; j++) { - let record = timePeriodArray[j] - if (timePeriod === record[0]) { - filePeriodIndex = i - timePeriodIndex = j + if (event !== undefined) { // it is undefined when the level is just being animated. + let currentTimePeriod = thisObject.timePeriod + let timePeriod = recalculatePeriod(event.newLevel) + if (timePeriod !== currentTimePeriod) { + for (let i = 0; i < timePeriodsMasterArray.length; i++) { + let timePeriodArray = timePeriodsMasterArray[i] + for (let j = 0; j < timePeriodArray.length; j++) { + let record = timePeriodArray[j] + if (timePeriod === record[0]) { + filePeriodIndex = i + timePeriodIndex = j + } } } + saveObjectState() + newTimePeriod() } - saveObjectState() - newTimePeriod() } }