package de.synolo.lib.fw.utils; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.control.MultipleSelectionModel; public class MultipleSelectionModelWrapper extends MultipleSelectionModel{ private ObservableList items; private ObservableList indices = FXCollections.observableArrayList(); private ObservableList selectedItems = FXCollections.observableArrayList(); public MultipleSelectionModelWrapper(ObservableList list) { this.items = list; } @Override public ObservableList getSelectedIndices() { return this.indices; } @Override public ObservableList 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); } }