108 lines
2.4 KiB
Java
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);
|
|
}
|
|
|
|
|
|
|
|
}
|