package ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import ru.khasang.cachoeira.viewcontroller.MainWindowController;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.dateline.DateLine;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.gridlayer.GridLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.labelslayer.TaskBarLabelsLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.objectslayer.ObjectsLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.relationlayer.RelationsLayer;
import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.selectedobjectlayer.SelectedObjectLayer;
public abstract class AbstractGanttPlan extends VBox {
protected ObjectsLayer objectsLayer;
protected MainWindowController controller;
public void initGanttDiagram() {
this.getChildren().addAll(createGanttPlan(
createDateLine(),
createGridLayer(),
createObjectsLayer()));
}
/**
* Создаем диаграмму из кусков
*
* @param dateLine Передаем параметр со шкалой дат (createDateLine())
* @param gridLayer Передаем параметр с сеткой на заднем плане диаграммы (createGridLayer)
* @param objectsLayer Передаем параметр со слоем на котором находятся объекты (createObjectsLayer)
* @return Возвращает ScrollPane, который уже добавляем в чилдрены к экземпляру этого класса (this.getChildren.add(createGanttPlan())
*/
private ScrollPane createGanttPlan(DateLine dateLine,
GridLayer gridLayer,
ScrollPane objectsLayer) {
StackPane stackPane = new StackPane(gridLayer, objectsLayer);
VBox.setVgrow(stackPane, Priority.ALWAYS);
VBox vBox = new VBox(dateLine, stackPane);
VBox.setVgrow(dateLine, Priority.NEVER);
ScrollPane horizontalScrollPane = new ScrollPane(vBox);
horizontalScrollPane.setFitToHeight(true);
horizontalScrollPane.getStyleClass().add("edge-to-edge"); //убирает синюю границу вокруг скроллпэйна
horizontalScrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
horizontalScrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
VBox.setVgrow(horizontalScrollPane, Priority.ALWAYS);
// Связываем горизонтальные скроллы с вкладок Задачи и Ресурсы
horizontalScrollPane.hvalueProperty().bindBidirectional(controller.ganttHorizontalScrollValueProperty());
return horizontalScrollPane;
}
/**
* Метод создает слой с сеткой
*/
protected abstract GridLayer createGridLayer();
/**
* Метод создает слой для объектов диаграммы
*/
protected abstract ScrollPane createObjectsLayer();
/**
* Метод создает шкалу с датами
*/
protected abstract DateLine createDateLine();
public ObjectsLayer getObjectsLayer() {
return objectsLayer;
}
public abstract RelationsLayer getRelationsLayer();
public abstract TaskBarLabelsLayer getLabelsLayer();
public abstract SelectedObjectLayer getSelectedObjectLayer();
}