package ru.khasang.cachoeira.viewcontroller.mainwindowcontrollers.propertiesmodules; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.ListChangeListener; import ru.khasang.cachoeira.model.IResource; import ru.khasang.cachoeira.model.ITask; import ru.khasang.cachoeira.viewcontroller.MainWindowController; import ru.khasang.cachoeira.viewcontroller.mainwindowcontrollers.propertiesmodules.objects.TaskCheckBoxCell; import ru.khasang.cachoeira.view.mainwindow.properties.modules.IModule; import ru.khasang.cachoeira.view.mainwindow.properties.modules.ResourceAssignedTasks; public class ResourceAssignedTasksModuleController implements ModuleController { private final ResourceAssignedTasks module; private final MainWindowController controller; @SuppressWarnings("FieldCanBeLocal") private ChangeListener<IResource> resourceChangeListener; @SuppressWarnings("FieldCanBeLocal") private ListChangeListener<ITask> taskListChangeListener; public ResourceAssignedTasksModuleController(IModule module, MainWindowController controller) { this.module = (ResourceAssignedTasks) module; this.controller = controller; } @Override public void initModule() { // set disable when selected resource is null module.disableProperty().bind(controller.selectedResourceProperty().isNull()); // table view things module.setItems(controller.getProject().getTaskList()); module.getTaskNameColumn().setCellValueFactory(cell -> cell.getValue().nameProperty()); // init listeners resourceChangeListener = this::refreshCheckBoxColumn; taskListChangeListener = this::refreshCheckBoxColumn; // set listeners, when selected resource or project task list has changed refresh checkbox column controller.selectedResourceProperty().addListener(resourceChangeListener); controller.getProject().getTaskList().addListener(taskListChangeListener); } private void refreshCheckBoxColumn(ObservableValue<? extends IResource> observableValue, IResource oldResource, IResource newResource) { refreshCheckBoxColumn(newResource); } private void refreshCheckBoxColumn(ListChangeListener.Change<? extends ITask> change) { while (change.next()) { refreshCheckBoxColumn(controller.getSelectedResource()); } } private void refreshCheckBoxColumn(IResource selectedResource) { if (selectedResource != null) { module.getTaskCheckboxColumn().setCellFactory(cellData -> new TaskCheckBoxCell(controller)); } } }