372 Data<X,Y> item = series.getData().get(j);
373 final Node symbol = createSymbol(series, seriesIndex, item, j);
374 if (symbol != null) {
375 if (shouldAnimate()) symbol.setOpacity(0);
376 getPlotChildren().add(symbol);
377 if (shouldAnimate()) {
378 // fade in new symbol
379 keyFrames.add(new KeyFrame(Duration.ZERO, new KeyValue(symbol.opacityProperty(), 0)));
380 keyFrames.add(new KeyFrame(Duration.millis(200), new KeyValue(symbol.opacityProperty(), 1)));
381 }
382 }
383 }
384 if (shouldAnimate()) animate(keyFrames.toArray(new KeyFrame[keyFrames.size()]));
385 }
386
387 @Override protected void seriesRemoved(final Series<X,Y> series) {
388 // remove series Y multiplier
389 seriesYMultiplierMap.remove(series);
390 // remove all symbol nodes
391 if (shouldAnimate()) {
392 // create list of all nodes we need to fade out
393 final List<Node> nodes = new ArrayList<Node>();
394 nodes.add(series.getNode());
395 for (Data<X,Y> d: series.getData()) nodes.add(d.getNode());
396 // fade out old and symbols
397 if (getCreateSymbols()) {
398 KeyValue[] startValues = new KeyValue[nodes.size()];
399 KeyValue[] endValues = new KeyValue[nodes.size()];
400 for (int j=0; j < nodes.size(); j++) {
401 startValues[j] = new KeyValue(nodes.get(j).opacityProperty(),1);
402 endValues[j] = new KeyValue(nodes.get(j).opacityProperty(),0);
403 }
404 Timeline tl = new Timeline();
405 tl.getKeyFrames().addAll(
406 new KeyFrame(Duration.ZERO,startValues),
407 new KeyFrame(Duration.millis(400), actionEvent -> {
408 getPlotChildren().removeAll(nodes);
409 removeSeriesFromDisplay(series);
410 },endValues)
411 );
412 tl.play();
413 } else {
414 Timeline tl = new Timeline();
415 tl.getKeyFrames().addAll(
416 new KeyFrame(Duration.millis(400), actionEvent -> {
417 getPlotChildren().removeAll(nodes);
418 removeSeriesFromDisplay(series);
419 })
420 );
421 tl.play();
422 }
423 } else {
424 getPlotChildren().remove(series.getNode());
425 for (Data<X,Y> d:series.getData()) getPlotChildren().remove(d.getNode());
426 removeSeriesFromDisplay(series);
427 }
428 }
429
430 /** @inheritDoc */
431 @Override protected void updateAxisRange() {
432 // This override is necessary to update axis range based on cumulative Y value for the
433 // Y axis instead of the normal way where max value in the data range is used.
434 final Axis<X> xa = getXAxis();
435 final Axis<Y> ya = getYAxis();
436 if (xa.isAutoRanging()) {
437 List xData = new ArrayList<Number>();
438 for(Series<X,Y> series : getData()) {
439 for(Data<X,Y> data: series.getData()) {
440 xData.add(data.getXValue());
441 }
442 }
|
372 Data<X,Y> item = series.getData().get(j);
373 final Node symbol = createSymbol(series, seriesIndex, item, j);
374 if (symbol != null) {
375 if (shouldAnimate()) symbol.setOpacity(0);
376 getPlotChildren().add(symbol);
377 if (shouldAnimate()) {
378 // fade in new symbol
379 keyFrames.add(new KeyFrame(Duration.ZERO, new KeyValue(symbol.opacityProperty(), 0)));
380 keyFrames.add(new KeyFrame(Duration.millis(200), new KeyValue(symbol.opacityProperty(), 1)));
381 }
382 }
383 }
384 if (shouldAnimate()) animate(keyFrames.toArray(new KeyFrame[keyFrames.size()]));
385 }
386
387 @Override protected void seriesRemoved(final Series<X,Y> series) {
388 // remove series Y multiplier
389 seriesYMultiplierMap.remove(series);
390 // remove all symbol nodes
391 if (shouldAnimate()) {
392 Timeline tl = new Timeline(createSeriesRemoveTimeLine(series, 400));
393 tl.play();
394 } else {
395 getPlotChildren().remove(series.getNode());
396 for (Data<X,Y> d:series.getData()) getPlotChildren().remove(d.getNode());
397 removeSeriesFromDisplay(series);
398 }
399 }
400
401 /** @inheritDoc */
402 @Override protected void updateAxisRange() {
403 // This override is necessary to update axis range based on cumulative Y value for the
404 // Y axis instead of the normal way where max value in the data range is used.
405 final Axis<X> xa = getXAxis();
406 final Axis<Y> ya = getYAxis();
407 if (xa.isAutoRanging()) {
408 List xData = new ArrayList<Number>();
409 for(Series<X,Y> series : getData()) {
410 for(Data<X,Y> data: series.getData()) {
411 xData.add(data.getXValue());
412 }
413 }
|