package com.dooapp.fxform.view.factory.impl;
import javafx.beans.binding.Bindings;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.collections.transformation.FilteredList;
import javafx.scene.control.Pagination;
import javafx.scene.control.TableView;
import java.util.function.Predicate;
/**
* User: Antoine Mischler <antoine@dooapp.com>
* Date: 25/02/2016
* Time: 11:10
*/
public class PaginatedTableView extends Pagination {
private final ListProperty items = new SimpleListProperty<>();
private final TableView tableView;
private IntegerProperty itemsByPage = new SimpleIntegerProperty(10);
public TableView getTableView() {
return tableView;
}
public PaginatedTableView(TableView tableView) {
this.tableView = tableView;
pageCountProperty().bind(Bindings.size(items).divide(itemsByPage));
FilteredList filteredList = items.filtered(o -> true);
tableView.setItems(filteredList);
setPageFactory(page -> {
filteredList.setPredicate(new Predicate() {
@Override
public boolean test(Object o) {
return items.indexOf(o) >= page * getItemsByPage() && items.indexOf(o) < (page + 1) * getItemsByPage();
}
});
return tableView;
});
}
public Object getItems() {
return items.get();
}
public ListProperty itemsProperty() {
return items;
}
public void setItems(Object items) {
this.items.set(items);
}
public int getItemsByPage() {
return itemsByPage.get();
}
public IntegerProperty itemsByPageProperty() {
return itemsByPage;
}
public void setItemsByPage(int itemsByPage) {
this.itemsByPage.set(itemsByPage);
}
}