package ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.selectedobjectlayer.backgroundtaskbar; import javafx.beans.value.ChangeListener; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import ru.khasang.cachoeira.model.ITask; import ru.khasang.cachoeira.viewcontroller.MainWindowController; import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.labelslayer.label.TaskBarLabel; import ru.khasang.cachoeira.view.mainwindow.diagram.ganttplan.objectslayer.taskbar.TaskBar; public abstract class BackgroundTaskBar extends Rectangle { private final TaskBar taskBar; @SuppressWarnings("FieldCanBeLocal") private ChangeListener<ITask> selectedTaskListener; private MainWindowController controller; public BackgroundTaskBar(TaskBar taskBar, TaskBarLabel taskLabel, MainWindowController controller) { this.taskBar = taskBar; this.controller = controller; this.setArcHeight(10); this.setArcWidth(10); this.layoutXProperty().bind(taskBar.layoutXProperty().subtract(10)); this.widthProperty().bind(taskBar.widthProperty().add(20).add(taskLabel.widthProperty())); this.layoutYProperty().bind(taskBar.layoutYProperty()); this.heightProperty().bind(taskBar.heightProperty()); this.setSelected(true); this.setListener(); } public void setListener() { selectedTaskListener = (observable, oldValue, newValue) -> { if (newValue != null && taskBar.getTask().equals(newValue)) { this.setSelected(true); } if (newValue == null || !taskBar.getTask().equals(newValue)) { this.setSelected(false); } }; controller.selectedTaskProperty().addListener(selectedTaskListener); } public void setSelected(boolean enabled) { if (enabled) { this.setStroke(Color.valueOf("#03A9F4")); this.setFill(Color.valueOf("#e4f6ff")); } else { this.setStroke(Color.TRANSPARENT); this.setFill(Color.TRANSPARENT); } } public TaskBar getTaskBar() { return taskBar; } }