package ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.StackPane;
import ru.khasang.cachoeira.viewcontroller.MainWindowController;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.dateline.DateLine;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.dateline.TaskGanttPlanDateLine;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.gridlayer.GridLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.gridlayer.TaskGanttPlanGridLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.labelslayer.TaskBarLabelsLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.labelslayer.TaskGanttPlanTaskBarLabelsLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.objectslayer.TaskGanttPlanObjectsLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.relationlayer.RelationsLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.relationlayer.TaskGanttPlanRelationsLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.selectedobjectlayer.SelectedObjectLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.selectedobjectlayer.TaskGanttPlanSelectedObjectLayer;
public class TaskGanttPlan extends AbstractGanttPlan {
private RelationsLayer relationsLayer;
private TaskBarLabelsLayer labelsLayer;
private SelectedObjectLayer selectedObjectLayer;
public TaskGanttPlan(MainWindowController controller) {
this.controller = controller;
}
@Override
protected GridLayer createGridLayer() {
return new TaskGanttPlanGridLayer(controller);
}
@Override
protected ScrollPane createObjectsLayer() {
// Слой на котором отображаются метки задач
objectsLayer = new TaskGanttPlanObjectsLayer(controller);
// Слой на котором отображаются связи между задачами
relationsLayer = new TaskGanttPlanRelationsLayer();
relationsLayer.setListeners(controller);
// Слой на котором отображаются ресурсы привязанные к задачам
labelsLayer = new TaskGanttPlanTaskBarLabelsLayer();
// Слой на котором отображается выделенная в данный момент задача
selectedObjectLayer = new TaskGanttPlanSelectedObjectLayer();
StackPane stackPane = new StackPane(selectedObjectLayer, labelsLayer, relationsLayer, objectsLayer);
// Запихиваем слой объектов в скролл пэйн
ScrollPane verticalScrollPane = new ScrollPane(stackPane);
verticalScrollPane.setFitToWidth(true);
verticalScrollPane.getStylesheets().add(this.getClass().getResource("/css/scrollpane.css").toExternalForm()); //делаем вертикальный скроллпэйн прозрачным
// Синхронизируем вертикальный скролл слоя объектов cо скроллом таблицы задач
verticalScrollPane.vvalueProperty().bindBidirectional(controller.taskVerticalScrollValueProperty());
return verticalScrollPane;
}
@Override
protected DateLine createDateLine() {
DateLine dateLine = new TaskGanttPlanDateLine(controller);
dateLine.initDateLine(
controller.getProject().getStartDate(),
controller.getProject().getFinishDate(),
controller.getZoomMultiplier());
dateLine.setListeners(
controller.getProject().startDateProperty(),
controller.getProject().finishDateProperty(),
controller.zoomMultiplierProperty());
return dateLine;
}
@Override
public RelationsLayer getRelationsLayer() {
return relationsLayer;
}
@Override
public TaskBarLabelsLayer getLabelsLayer() {
return labelsLayer;
}
@Override
public SelectedObjectLayer getSelectedObjectLayer() {
return selectedObjectLayer;
}
}