< prev index next >

modules/controls/src/main/java/javafx/scene/chart/XYChart.java

Print this page
rev 9945 : 8089755: AreaChart area color change when series is removed


 120         while (c.next()) {
 121             // RT-12069, linked list pointers should update when list is permutated.
 122             if (c.wasPermutated()) {
 123                 displayedSeries.sort((o1, o2) -> series.indexOf(o2) - series.indexOf(o1));
 124 
 125             }
 126 
 127             if (c.getRemoved().size() > 0) updateLegend();
 128 
 129             Set<Series<X, Y>> dupCheck = new HashSet<>(displayedSeries);
 130             dupCheck.removeAll(c.getRemoved());
 131             for (Series<X, Y> d : c.getAddedSubList()) {
 132                 if (!dupCheck.add(d)) {
 133                     throw new IllegalArgumentException("Duplicate series added");
 134                 }
 135             }
 136 
 137             for (Series<X,Y> s : c.getRemoved()) {
 138                 s.setToRemove = true;
 139                 seriesRemoved(s);
 140                 int idx = seriesColorMap.remove(s);
 141                 colorBits.clear(idx);
 142             }
 143 
 144             for(int i=c.getFrom(); i<c.getTo() && !c.wasPermutated(); i++) {
 145                 final Series<X,Y> s = c.getList().get(i);
 146                 // add new listener to data
 147                 s.setChart(XYChart.this);
 148                 if (s.setToRemove) {
 149                     s.setToRemove = false;
 150                     s.getChart().seriesBeingRemovedIsAdded(s);
 151                 }
 152                 // update linkedList Pointers for series
 153                 displayedSeries.add(s);
 154                 // update default color style class
 155                 int nextClearBit = colorBits.nextClearBit(0);
 156                 colorBits.set(nextClearBit, true);
 157                 s.defaultColorStyleClass = DEFAULT_COLOR+(nextClearBit%8);
 158                 seriesColorMap.put(s, nextClearBit%8);
 159                 // inform sub-classes of series added
 160                 seriesAdded(s, i);
 161             }


 866     }
 867 
 868     /**
 869      * Computes the size of series linked list
 870      * @return size of series linked list
 871      */
 872     int getSeriesSize() {
 873         return displayedSeries.size();
 874     }
 875 
 876     /**
 877      * This should be called from seriesRemoved() when you are finished with any animation for deleting the series from
 878      * the chart. It will remove the series from showing up in the Iterator returned by getDisplayedSeriesIterator().
 879      *
 880      * @param series The series to remove
 881      */
 882     protected final void removeSeriesFromDisplay(Series<X, Y> series) {
 883         if (series != null) series.setToRemove = false;
 884         series.setChart(null);
 885         displayedSeries.remove(series);


 886     }
 887 
 888     /**
 889      * XYChart maintains a list of all series currently displayed this includes all current series + any series that
 890      * have recently been deleted that are in the process of being faded(animated) out. This creates and returns a
 891      * iterator over that list. This is what implementations of XYChart should use when plotting data.
 892      *
 893      * @return iterator over currently displayed series
 894      */
 895     protected final Iterator<Series<X,Y>> getDisplayedSeriesIterator() {
 896         return Collections.unmodifiableList(displayedSeries).iterator();
 897     }
 898 
 899     /**
 900      * Creates an array of KeyFrames for fading out nodes representing a series
 901      *
 902      * @param series The series to remove
 903      * @param fadeOutTime Time to fade out, in milliseconds
 904      * @return array of two KeyFrames from zero to fadeOutTime
 905      */




 120         while (c.next()) {
 121             // RT-12069, linked list pointers should update when list is permutated.
 122             if (c.wasPermutated()) {
 123                 displayedSeries.sort((o1, o2) -> series.indexOf(o2) - series.indexOf(o1));
 124 
 125             }
 126 
 127             if (c.getRemoved().size() > 0) updateLegend();
 128 
 129             Set<Series<X, Y>> dupCheck = new HashSet<>(displayedSeries);
 130             dupCheck.removeAll(c.getRemoved());
 131             for (Series<X, Y> d : c.getAddedSubList()) {
 132                 if (!dupCheck.add(d)) {
 133                     throw new IllegalArgumentException("Duplicate series added");
 134                 }
 135             }
 136 
 137             for (Series<X,Y> s : c.getRemoved()) {
 138                 s.setToRemove = true;
 139                 seriesRemoved(s);


 140             }
 141 
 142             for(int i=c.getFrom(); i<c.getTo() && !c.wasPermutated(); i++) {
 143                 final Series<X,Y> s = c.getList().get(i);
 144                 // add new listener to data
 145                 s.setChart(XYChart.this);
 146                 if (s.setToRemove) {
 147                     s.setToRemove = false;
 148                     s.getChart().seriesBeingRemovedIsAdded(s);
 149                 }
 150                 // update linkedList Pointers for series
 151                 displayedSeries.add(s);
 152                 // update default color style class
 153                 int nextClearBit = colorBits.nextClearBit(0);
 154                 colorBits.set(nextClearBit, true);
 155                 s.defaultColorStyleClass = DEFAULT_COLOR+(nextClearBit%8);
 156                 seriesColorMap.put(s, nextClearBit%8);
 157                 // inform sub-classes of series added
 158                 seriesAdded(s, i);
 159             }


 864     }
 865 
 866     /**
 867      * Computes the size of series linked list
 868      * @return size of series linked list
 869      */
 870     int getSeriesSize() {
 871         return displayedSeries.size();
 872     }
 873 
 874     /**
 875      * This should be called from seriesRemoved() when you are finished with any animation for deleting the series from
 876      * the chart. It will remove the series from showing up in the Iterator returned by getDisplayedSeriesIterator().
 877      *
 878      * @param series The series to remove
 879      */
 880     protected final void removeSeriesFromDisplay(Series<X, Y> series) {
 881         if (series != null) series.setToRemove = false;
 882         series.setChart(null);
 883         displayedSeries.remove(series);
 884         int idx = seriesColorMap.remove(series);
 885         colorBits.clear(idx);
 886     }
 887 
 888     /**
 889      * XYChart maintains a list of all series currently displayed this includes all current series + any series that
 890      * have recently been deleted that are in the process of being faded(animated) out. This creates and returns a
 891      * iterator over that list. This is what implementations of XYChart should use when plotting data.
 892      *
 893      * @return iterator over currently displayed series
 894      */
 895     protected final Iterator<Series<X,Y>> getDisplayedSeriesIterator() {
 896         return Collections.unmodifiableList(displayedSeries).iterator();
 897     }
 898 
 899     /**
 900      * Creates an array of KeyFrames for fading out nodes representing a series
 901      *
 902      * @param series The series to remove
 903      * @param fadeOutTime Time to fade out, in milliseconds
 904      * @return array of two KeyFrames from zero to fadeOutTime
 905      */


< prev index next >