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 */
|