java-lib-fw/src/main/java/de/synolo/lib/fw/utils/MultipleSelectionModelWrapp...

108 lines
2.4 KiB
Java

package de.synolo.lib.fw.utils;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.MultipleSelectionModel;
public class MultipleSelectionModelWrapper<T> extends MultipleSelectionModel<T>{
private ObservableList<T> items;
private ObservableList<Integer> indices = FXCollections.observableArrayList();
private ObservableList<T> selectedItems = FXCollections.observableArrayList();
public MultipleSelectionModelWrapper(ObservableList<T> list) {
this.items = list;
}
@Override
public ObservableList<Integer> getSelectedIndices() { return this.indices; }
@Override
public ObservableList<T> getSelectedItems() { return this.selectedItems; }
@Override
public void selectIndices(int index, int... indices) {
select(index);
for(int idx : indices)
select(idx);
}
@Override
public void selectAll() {
clearSelection();
for(int i = 0; i < this.items.size(); i++) {
this.selectedItems.add(this.items.get(i));
this.indices.add(i);
}
}
@Override
public void selectFirst() {
clearSelection();
select(0);
}
@Override
public void selectLast() {
clearSelection();
select(this.items.size()-1);
}
@Override
public void clearAndSelect(int index) {
clearSelection();
select(index);
}
@Override
public void select(int index) {
if(index < this.items.size() && index >= 0) {
T item = this.items.get(index);
if(!this.selectedItems.contains(item)) {
this.selectedItems.add(item);
this.indices.add(index);
}
}
}
@Override
public void select(T obj) {
if(this.items.contains(obj) && !this.selectedItems.contains(obj)) {
int index = this.items.indexOf(obj);
this.selectedItems.add(obj);
this.indices.add(index);
}
}
@Override
public void clearSelection(int index) {
if(this.indices.contains(index)) {
T item = this.items.get(index);
this.selectedItems.remove(item);
this.indices.remove(index);
}
}
@Override
public void clearSelection() {
this.indices.clear();
this.selectedItems.clear();
}
@Override
public boolean isSelected(int index) { return this.indices.contains(index); }
@Override
public boolean isEmpty() { return this.selectedItems.isEmpty(); }
@Override
public void selectPrevious() {
int index = this.indices.get(this.indices.size()-1);
select(index-1);
}
@Override
public void selectNext() {
int index = this.indices.get(this.indices.size()-1);
select(index+1);
}
}