started adding a segmented list
diff --git a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java
index 2f9ba78..937a195 100644
--- a/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java
+++ b/bundles/runtime/org.eclipse.fx.core/src/org/eclipse/fx/core/bindings/FXBindings.java
@@ -33,26 +33,6 @@
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-import javafx.beans.binding.Binding;
-import javafx.beans.binding.BooleanExpression;
-import javafx.beans.binding.ListBinding;
-import javafx.beans.binding.ObjectBinding;
-import javafx.beans.binding.StringBinding;
-import javafx.beans.property.BooleanProperty;
-import javafx.beans.property.DoubleProperty;
-import javafx.beans.property.FloatProperty;
-import javafx.beans.property.IntegerProperty;
-import javafx.beans.property.LongProperty;
-import javafx.beans.property.Property;
-import javafx.beans.property.SimpleIntegerProperty;
-import javafx.beans.property.StringProperty;
-import javafx.beans.value.ObservableBooleanValue;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.FXCollections;
-import javafx.collections.ListChangeListener;
-import javafx.collections.ListChangeListener.Change;
-import javafx.collections.ObservableList;
-
import org.eclipse.fx.core.Status;
import org.eclipse.fx.core.Subscription;
import org.eclipse.fx.core.ThreadSynchronize;
@@ -71,6 +51,25 @@
import org.eclipse.fx.core.bindings.internal.SyncObjectBinding;
import org.eclipse.fx.core.bindings.internal.TenaryBinding;
+import javafx.beans.binding.Binding;
+import javafx.beans.binding.ListBinding;
+import javafx.beans.binding.ObjectBinding;
+import javafx.beans.binding.StringBinding;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.FloatProperty;
+import javafx.beans.property.IntegerProperty;
+import javafx.beans.property.LongProperty;
+import javafx.beans.property.Property;
+import javafx.beans.property.SimpleIntegerProperty;
+import javafx.beans.property.StringProperty;
+import javafx.beans.value.ObservableBooleanValue;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ListChangeListener;
+import javafx.collections.ListChangeListener.Change;
+import javafx.collections.ObservableList;
+
/**
* Collection of JavaFX bean bindings.
*
@@ -112,6 +111,82 @@
}
}
+// public static <E> ObservableList<ObservableList<E>> segmentedList(int segmentSize, ObservableList<E> list) {
+// ObservableList<ObservableList<E>> rv = FXCollections.observableArrayList();
+//
+// ObservableList<E> v = null;
+// for( int i = 0; i < list.size(); i++ ) {
+// if( i % segmentSize == 0 ) {
+// rv.add(v = FXCollections.observableArrayList());
+// }
+// if( v != null ) {
+// v.add(list.get(i));
+// }
+// }
+//
+// list.addListener( (Change<? extends E> c) -> {
+// while( c.next() ) {
+// if( c.wasReplaced() || c.wasRemoved() ) {
+// for( int i = 0; i < c.getAddedSize(); i++ ) {
+// int ii = i + c.getFrom();
+// int listIndex = ii / segmentSize;
+// ObservableList<E> target;
+// if( rv.size() == listIndex ) {
+// rv.add(target = FXCollections.observableArrayList());
+// } else {
+// target = rv.get(listIndex);
+// }
+//
+// if( target.size() == ii % segmentSize ) {
+// target.add(c.getAddedSubList().get(i));
+// } else {
+// target.set(ii % segmentSize, c.getAddedSubList().get(i));
+// }
+// }
+//
+// if( c.getAddedSize() < c.getRemovedSize() ) {
+// int removeIdx = -1;
+// for( int i = 0; i < c.getRemovedSize() - c.getAddedSize(); i++ ) {
+// int ii = i + c.getFrom() + c.getAddedSize();
+// int listIndex = ii / segmentSize;
+// if( removeIdx == -1 ) {
+// if( ii % segmentSize == 0 ) {
+// removeIdx = listIndex;
+// } else {
+// rv.get(listIndex).remove(ii % segmentSize);
+// }
+// }
+// }
+//
+// if( removeIdx != -1 ) {
+// List<ObservableList<E>> subList = rv.subList(removeIdx, rv.size());
+// List<ObservableList<E>> tmp = new ArrayList<>(subList);
+// subList.clear();
+// tmp.forEach( List::clear );
+// }
+// }
+// } else if( c.wasAdded() ) {
+// for( int i = 0; i < c.getAddedSize(); i++ ) {
+// int ii = i + c.getFrom();
+// int listIndex = ii / segmentSize;
+// ObservableList<E> target;
+// if( rv.size() == listIndex ) {
+// rv.add(target = FXCollections.observableArrayList());
+// } else {
+// target = rv.get(listIndex);
+// }
+//
+// if( target.size() == ii % segmentSize ) {
+// target.add(c.getAddedSubList().get(i));
+// }
+// }
+// }
+// }
+// });
+//
+// return rv;
+// }
+
/**
* Create a concatenated list similar to
* {@link FXCollections#concat(ObservableList...)}