431 }
432 }
433 if (shouldAnimate()) animate(keyFrames.toArray(new KeyFrame[keyFrames.size()]));
434 }
435 private void updateDefaultColorIndex(final Series<X,Y> series) {
436 int clearIndex = seriesColorMap.get(series);
437 series.getNode().getStyleClass().remove(DEFAULT_COLOR+clearIndex);
438 for (int j=0; j < series.getData().size(); j++) {
439 final Node node = series.getData().get(j).getNode();
440 if(node!=null) {
441 node.getStyleClass().remove(DEFAULT_COLOR+clearIndex);
442 }
443 }
444 }
445
446 @Override protected void seriesRemoved(final Series<X,Y> series) {
447 updateDefaultColorIndex(series);
448 // remove all symbol nodes
449 seriesYMultiplierMap.remove(series);
450 if (shouldAnimate()) {
451 // create list of all nodes we need to fade out
452 final List<Node> nodes = new ArrayList<Node>();
453 nodes.add(series.getNode());
454 if (getCreateSymbols()) { // RT-22124
455 // done need to fade the symbols if createSymbols is false
456 for (Data<X,Y> d: series.getData()) nodes.add(d.getNode());
457 }
458 // fade out old and symbols
459 KeyValue[] startValues = new KeyValue[nodes.size()];
460 KeyValue[] endValues = new KeyValue[nodes.size()];
461 for (int j=0; j < nodes.size(); j++) {
462 startValues[j] = new KeyValue(nodes.get(j).opacityProperty(),1);
463 endValues[j] = new KeyValue(nodes.get(j).opacityProperty(),0);
464 }
465 seriesRemoveTimeline = new Timeline();
466 seriesRemoveTimeline.getKeyFrames().addAll(
467 new KeyFrame(Duration.ZERO,startValues),
468 new KeyFrame(Duration.millis(900), actionEvent -> {
469 getPlotChildren().removeAll(nodes);
470 removeSeriesFromDisplay(series);
471 },endValues)
472 );
473 seriesRemoveTimeline.play();
474 } else {
475 getPlotChildren().remove(series.getNode());
476 for (Data<X,Y> d:series.getData()) getPlotChildren().remove(d.getNode());
477 removeSeriesFromDisplay(series);
478 }
479 }
480
481 /** @inheritDoc */
482 @Override protected void layoutPlotChildren() {
483 List<LineTo> constructedPath = new ArrayList<>(getDataSize());
484 for (int seriesIndex=0; seriesIndex < getDataSize(); seriesIndex++) {
485 Series<X,Y> series = getData().get(seriesIndex);
486 final DoubleProperty seriesYAnimMultiplier = seriesYMultiplierMap.get(series);
487 if(series.getNode() instanceof Path) {
488 final ObservableList<PathElement> seriesLine = ((Path)series.getNode()).getElements();
489 seriesLine.clear();
490 constructedPath.clear();
491 for (Iterator<Data<X, Y>> it = getDisplayedDataIterator(series); it.hasNext(); ) {
492 Data<X, Y> item = it.next();
|
431 }
432 }
433 if (shouldAnimate()) animate(keyFrames.toArray(new KeyFrame[keyFrames.size()]));
434 }
435 private void updateDefaultColorIndex(final Series<X,Y> series) {
436 int clearIndex = seriesColorMap.get(series);
437 series.getNode().getStyleClass().remove(DEFAULT_COLOR+clearIndex);
438 for (int j=0; j < series.getData().size(); j++) {
439 final Node node = series.getData().get(j).getNode();
440 if(node!=null) {
441 node.getStyleClass().remove(DEFAULT_COLOR+clearIndex);
442 }
443 }
444 }
445
446 @Override protected void seriesRemoved(final Series<X,Y> series) {
447 updateDefaultColorIndex(series);
448 // remove all symbol nodes
449 seriesYMultiplierMap.remove(series);
450 if (shouldAnimate()) {
451 seriesRemoveTimeline = new Timeline(createSeriesRemoveTimeLine(series, 900));
452 seriesRemoveTimeline.play();
453 } else {
454 getPlotChildren().remove(series.getNode());
455 for (Data<X,Y> d:series.getData()) getPlotChildren().remove(d.getNode());
456 removeSeriesFromDisplay(series);
457 }
458 }
459
460 /** @inheritDoc */
461 @Override protected void layoutPlotChildren() {
462 List<LineTo> constructedPath = new ArrayList<>(getDataSize());
463 for (int seriesIndex=0; seriesIndex < getDataSize(); seriesIndex++) {
464 Series<X,Y> series = getData().get(seriesIndex);
465 final DoubleProperty seriesYAnimMultiplier = seriesYMultiplierMap.get(series);
466 if(series.getNode() instanceof Path) {
467 final ObservableList<PathElement> seriesLine = ((Path)series.getNode()).getElements();
468 seriesLine.clear();
469 constructedPath.clear();
470 for (Iterator<Data<X, Y>> it = getDisplayedDataIterator(series); it.hasNext(); ) {
471 Data<X, Y> item = it.next();
|