diff --git a/desktop/src/main/java/bisq/desktop/main/market/trades/charts/price/CandleStickChart.java b/desktop/src/main/java/bisq/desktop/main/market/trades/charts/price/CandleStickChart.java index 6380ebada30..673f501faaf 100644 --- a/desktop/src/main/java/bisq/desktop/main/market/trades/charts/price/CandleStickChart.java +++ b/desktop/src/main/java/bisq/desktop/main/market/trades/charts/price/CandleStickChart.java @@ -70,9 +70,6 @@ import java.util.Iterator; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * A candlestick chart is a style of bar-chart used primarily to describe price movements of a security, derivative, * or currency over time. @@ -81,7 +78,6 @@ * extra value property using a CandleStickExtraValues object. */ public class CandleStickChart extends XYChart { - private static final Logger log = LoggerFactory.getLogger(CandleStickChart.class); private final StringConverter priceStringConverter; @@ -162,8 +158,7 @@ protected void dataItemChanged(XYChart.Data item) { @Override protected void dataItemAdded(XYChart.Series series, int itemIndex, XYChart.Data item) { Node candle = createCandle(getData().indexOf(series), item, itemIndex); - if (getPlotChildren().contains(candle)) - getPlotChildren().remove(candle); + getPlotChildren().remove(candle); if (shouldAnimate()) { candle.setOpacity(0); @@ -195,10 +190,14 @@ protected void dataItemRemoved(XYChart.Data item, XYChart.Series // fade out old candle FadeTransition ft = new FadeTransition(Duration.millis(500), node); ft.setToValue(0); - ft.setOnFinished((ActionEvent actionEvent) -> getPlotChildren().remove(node)); + ft.setOnFinished((ActionEvent actionEvent) -> { + getPlotChildren().remove(node); + removeDataItemFromDisplay(series, item); + }); ft.play(); } else { getPlotChildren().remove(node); + removeDataItemFromDisplay(series, item); } } @@ -206,7 +205,7 @@ protected void dataItemRemoved(XYChart.Data item, XYChart.Series protected void seriesAdded(XYChart.Series series, int seriesIndex) { // handle any data already in series for (int j = 0; j < series.getData().size(); j++) { - XYChart.Data item = series.getData().get(j); + XYChart.Data item = series.getData().get(j); Node candle = createCandle(seriesIndex, item, j); if (!getPlotChildren().contains(candle)) { @@ -256,12 +255,16 @@ protected void seriesRemoved(XYChart.Series series) { ft.setOnFinished((ActionEvent actionEvent) -> { getPlotChildren().remove(seriesPath); seriesPath.getElements().clear(); + removeSeriesFromDisplay(series); }); ft.play(); } else { getPlotChildren().remove(seriesPath); seriesPath.getElements().clear(); + removeSeriesFromDisplay(series); } + } else { + removeSeriesFromDisplay(series); } } @@ -273,7 +276,7 @@ protected void seriesRemoved(XYChart.Series series) { * @param itemIndex The index of the data item in the series * @return New candle node to represent the give data item */ - private Node createCandle(int seriesIndex, final XYChart.Data item, int itemIndex) { + private Node createCandle(int seriesIndex, final XYChart.Data item, int itemIndex) { Node candle = item.getNode(); // check if candle has already been created if (candle instanceof Candle) { diff --git a/desktop/src/main/java/bisq/desktop/main/market/trades/charts/volume/VolumeChart.java b/desktop/src/main/java/bisq/desktop/main/market/trades/charts/volume/VolumeChart.java index e80b071e342..12e61790b07 100644 --- a/desktop/src/main/java/bisq/desktop/main/market/trades/charts/volume/VolumeChart.java +++ b/desktop/src/main/java/bisq/desktop/main/market/trades/charts/volume/VolumeChart.java @@ -18,9 +18,10 @@ package bisq.desktop.main.market.trades.charts.volume; import bisq.desktop.main.market.trades.charts.CandleData; -import bisq.desktop.main.market.trades.charts.price.CandleStickChart; import javafx.animation.FadeTransition; +import javafx.animation.KeyFrame; +import javafx.animation.Timeline; import javafx.scene.Node; import javafx.scene.chart.Axis; @@ -36,11 +37,7 @@ import java.util.Iterator; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - public class VolumeChart extends XYChart { - private static final Logger log = LoggerFactory.getLogger(CandleStickChart.class); private final StringConverter toolTipStringConverter; @@ -91,8 +88,7 @@ protected void dataItemChanged(XYChart.Data item) { @Override protected void dataItemAdded(XYChart.Series series, int itemIndex, XYChart.Data item) { Node volumeBar = createCandle(getData().indexOf(series), item, itemIndex); - if (getPlotChildren().contains(volumeBar)) - getPlotChildren().remove(volumeBar); + getPlotChildren().remove(volumeBar); if (shouldAnimate()) { volumeBar.setOpacity(0); @@ -111,17 +107,21 @@ protected void dataItemRemoved(XYChart.Data item, XYChart.Series if (shouldAnimate()) { FadeTransition ft = new FadeTransition(Duration.millis(500), node); ft.setToValue(0); - ft.setOnFinished((ActionEvent actionEvent) -> getPlotChildren().remove(node)); + ft.setOnFinished((ActionEvent actionEvent) -> { + getPlotChildren().remove(node); + removeDataItemFromDisplay(series, item); + }); ft.play(); } else { getPlotChildren().remove(node); + removeDataItemFromDisplay(series, item); } } @Override protected void seriesAdded(XYChart.Series series, int seriesIndex) { for (int j = 0; j < series.getData().size(); j++) { - XYChart.Data item = series.getData().get(j); + XYChart.Data item = series.getData().get(j); Node volumeBar = createCandle(seriesIndex, item, j); if (shouldAnimate()) { volumeBar.setOpacity(0); @@ -148,9 +148,14 @@ protected void seriesRemoved(XYChart.Series series) { getPlotChildren().remove(volumeBar); } } + if (shouldAnimate()) { + new Timeline(new KeyFrame(Duration.millis(500), event -> removeSeriesFromDisplay(series))).play(); + } else { + removeSeriesFromDisplay(series); + } } - private Node createCandle(int seriesIndex, final XYChart.Data item, int itemIndex) { + private Node createCandle(int seriesIndex, final XYChart.Data item, int itemIndex) { Node volumeBar = item.getNode(); if (volumeBar instanceof VolumeBar) { ((VolumeBar) volumeBar).setSeriesAndDataStyleClasses("series" + seriesIndex, "data" + itemIndex);