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.ITask;
import ru.khasang.cachoeira.viewcontroller.MainWindowController;
import ru.khasang.cachoeira.viewcontroller.mainwindowcontrollers.propertiesmodules.objects.ResourceCheckBoxCell;
import ru.khasang.cachoeira.view.mainwindow.properties.modules.IModule;
import ru.khasang.cachoeira.view.mainwindow.properties.modules.TaskAssignedResources;
public class TaskAssignedResourcesModuleController implements ModuleController {
private final TaskAssignedResources module;
private final MainWindowController controller;
@SuppressWarnings("FieldCanBeLocal")
private ChangeListener<ITask> taskChangeListener;
@SuppressWarnings("FieldCanBeLocal")
private ListChangeListener<ITask> taskListChangeListener;
public TaskAssignedResourcesModuleController(IModule module, MainWindowController controller) {
this.module = (TaskAssignedResources) module;
this.controller = controller;
}
@Override
public void initModule() {
// set disable when selected task is null
module.disableProperty().bind(controller.selectedTaskProperty().isNull());
// table view things
module.setItems(controller.getProject().getResourceList());
module.getResourceNameColumn().setCellValueFactory(cell -> cell.getValue().nameProperty());
// init listeners
taskChangeListener = this::refreshCheckBoxColumn;
taskListChangeListener = this::refreshCheckBoxColumn;
// set listeners, when selected resource or project task list has changed refresh checkbox column
controller.selectedTaskProperty().addListener(taskChangeListener);
controller.getProject().getTaskList().addListener(taskListChangeListener);
}
private void refreshCheckBoxColumn(ObservableValue<? extends ITask> observableValue,
ITask oldTask,
ITask newTask) {
refreshCheckBoxColumn(newTask);
}
private void refreshCheckBoxColumn(ListChangeListener.Change<? extends ITask> change) {
while (change.next()) {
refreshCheckBoxColumn(controller.getSelectedTask());
}
}
private void refreshCheckBoxColumn(ITask selectedTask) {
if (selectedTask != null) {
module.getResourceCheckboxColumn().setCellFactory(cellData -> new ResourceCheckBoxCell(controller));
}
}
}