package ru.khasang.cachoeira.view.mainwindow.diagram.tables;
import javafx.beans.property.DoubleProperty;
import javafx.geometry.Pos;
import javafx.scene.control.TreeTableCell;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import ru.khasang.cachoeira.model.ITask;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Locale;
public class TaskTableView<S> extends AbstractTableView<S> {
public TaskTableView(DoubleProperty horizontalScrollValue, DoubleProperty verticalScrollValue) {
this.horizontalScrollValue = horizontalScrollValue;
this.verticalScrollValue = verticalScrollValue;
}
@Override
public void createTable() {
TreeTableColumn<S, String> taskNameColumn = new TreeTableColumn<>("Name");
TreeTableColumn<S, LocalDate> taskStartDateColumn = new TreeTableColumn<>("Start Date");
TreeTableColumn<S, LocalDate> taskFinishDateColumn = new TreeTableColumn<>("Finish Date");
TreeTableColumn<S, Integer> taskDurationColumn = new TreeTableColumn<>("Duration");
TreeTableColumn<S, Integer> taskDonePercentColumn = new TreeTableColumn<>("Progress");
TreeTableColumn<S, Double> taskCostColumn = new TreeTableColumn<>("Cost");
taskNameColumn.setCellValueFactory(cellData -> {
ITask task = (ITask) cellData.getValue().getValue();
return task.nameProperty();
});
taskStartDateColumn.setCellValueFactory(cellData -> {
ITask task = (ITask) cellData.getValue().getValue();
return task.startDateProperty();
});
taskFinishDateColumn.setCellValueFactory(cellData -> {
ITask task = (ITask) cellData.getValue().getValue();
return task.finishDateProperty();
});
taskDurationColumn.setCellValueFactory(cellData -> {
ITask task = (ITask) cellData.getValue().getValue();
return task.durationProperty().asObject();
});
taskDonePercentColumn.setCellValueFactory(cellData -> {
ITask task = (ITask) cellData.getValue().getValue();
return task.donePercentProperty().asObject();
});
taskCostColumn.setCellValueFactory(cellData -> {
ITask task = (ITask) cellData.getValue().getValue();
return task.costProperty().asObject();
});
taskDurationColumn.setVisible(false);
taskDonePercentColumn.setVisible(false);
taskCostColumn.setVisible(false);
// Форматируем столбцы
taskStartDateColumn.setCellFactory(column -> getTreeTableCell());
taskFinishDateColumn.setCellFactory(column -> getTreeTableCell());
taskNameColumn.setStyle("-fx-alignment: CENTER-LEFT");
taskDurationColumn.setStyle("-fx-alignment: CENTER-LEFT");
taskDonePercentColumn.setStyle("-fx-alignment: CENTER-LEFT");
taskCostColumn.setStyle("-fx-alignment: CENTER-LEFT");
this.getColumns().addAll(Arrays.asList(taskNameColumn, taskStartDateColumn, taskFinishDateColumn, taskDurationColumn, taskDonePercentColumn, taskCostColumn));
this.setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY);
this.setShowRoot(false);
}
private TreeTableCell<S, LocalDate> getTreeTableCell() {
return new TreeTableCell<S, LocalDate>() {
@Override
protected void updateItem(LocalDate date, boolean empty) {
super.updateItem(date, empty);
this.setAlignment(Pos.CENTER);
if (empty) {
this.setText(null);
this.setGraphic(null);
} else {
String dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.getDefault()).format(date);
this.setText(dateFormatter);
}
}
};
}
}