385 ));
386 }
387 for (int j=0; j<series.getData().size(); j++) {
388 Data<X,Y> item = series.getData().get(j);
389 final Node symbol = createSymbol(series, seriesIndex, item, j);
390 if (symbol != null) {
391 if (shouldAnimate()) {
392 symbol.setOpacity(0);
393 getPlotChildren().add(symbol);
394 // fade in new symbol
395 keyFrames.add(new KeyFrame(Duration.ZERO, new KeyValue(symbol.opacityProperty(), 0)));
396 keyFrames.add(new KeyFrame(Duration.millis(200), new KeyValue(symbol.opacityProperty(), 1)));
397 }
398 else {
399 getPlotChildren().add(symbol);
400 }
401 }
402 }
403 if (shouldAnimate()) animate(keyFrames.toArray(new KeyFrame[keyFrames.size()]));
404 }
405 private void updateDefaultColorIndex(final Series<X,Y> series) {
406 int clearIndex = seriesColorMap.get(series);
407 Path seriesLine = (Path)((Group)series.getNode()).getChildren().get(1);
408 Path fillPath = (Path)((Group)series.getNode()).getChildren().get(0);
409 if (seriesLine != null) {
410 seriesLine.getStyleClass().remove(DEFAULT_COLOR+clearIndex);
411 }
412 if (fillPath != null) {
413 fillPath.getStyleClass().remove(DEFAULT_COLOR+clearIndex);
414 }
415 for (int j=0; j < series.getData().size(); j++) {
416 final Node node = series.getData().get(j).getNode();
417 if(node!=null) {
418 node.getStyleClass().remove(DEFAULT_COLOR+clearIndex);
419 }
420 }
421 }
422 @Override protected void seriesRemoved(final Series<X,Y> series) {
423 updateDefaultColorIndex(series);
424 // remove series Y multiplier
425 seriesYMultiplierMap.remove(series);
426 // remove all symbol nodes
427 if (shouldAnimate()) {
428 Timeline tl = new Timeline(createSeriesRemoveTimeLine(series, 400));
429 tl.play();
430 } else {
431 getPlotChildren().remove(series.getNode());
432 for (Data<X,Y> d:series.getData()) getPlotChildren().remove(d.getNode());
433 removeSeriesFromDisplay(series);
434 }
435 }
436
437 /** @inheritDoc */
438 @Override protected void layoutPlotChildren() {
439 List<LineTo> constructedPath = new ArrayList<>(getDataSize());
440 for (int seriesIndex=0; seriesIndex < getDataSize(); seriesIndex++) {
441 Series<X, Y> series = getData().get(seriesIndex);
442 DoubleProperty seriesYAnimMultiplier = seriesYMultiplierMap.get(series);
443 double lastX = 0;
|
385 ));
386 }
387 for (int j=0; j<series.getData().size(); j++) {
388 Data<X,Y> item = series.getData().get(j);
389 final Node symbol = createSymbol(series, seriesIndex, item, j);
390 if (symbol != null) {
391 if (shouldAnimate()) {
392 symbol.setOpacity(0);
393 getPlotChildren().add(symbol);
394 // fade in new symbol
395 keyFrames.add(new KeyFrame(Duration.ZERO, new KeyValue(symbol.opacityProperty(), 0)));
396 keyFrames.add(new KeyFrame(Duration.millis(200), new KeyValue(symbol.opacityProperty(), 1)));
397 }
398 else {
399 getPlotChildren().add(symbol);
400 }
401 }
402 }
403 if (shouldAnimate()) animate(keyFrames.toArray(new KeyFrame[keyFrames.size()]));
404 }
405
406 @Override protected void seriesRemoved(final Series<X,Y> series) {
407 // remove series Y multiplier
408 seriesYMultiplierMap.remove(series);
409 // remove all symbol nodes
410 if (shouldAnimate()) {
411 Timeline tl = new Timeline(createSeriesRemoveTimeLine(series, 400));
412 tl.play();
413 } else {
414 getPlotChildren().remove(series.getNode());
415 for (Data<X,Y> d:series.getData()) getPlotChildren().remove(d.getNode());
416 removeSeriesFromDisplay(series);
417 }
418 }
419
420 /** @inheritDoc */
421 @Override protected void layoutPlotChildren() {
422 List<LineTo> constructedPath = new ArrayList<>(getDataSize());
423 for (int seriesIndex=0; seriesIndex < getDataSize(); seriesIndex++) {
424 Series<X, Y> series = getData().get(seriesIndex);
425 DoubleProperty seriesYAnimMultiplier = seriesYMultiplierMap.get(series);
426 double lastX = 0;
|