/** * Copyright [2014] [Christian Loehnert] * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.ks.idnadrev.overview; import de.ks.BaseController; import de.ks.activity.ActivityHint; import de.ks.fxcontrols.cell.ConvertingListCell; import de.ks.idnadrev.entity.Task; import de.ks.idnadrev.task.work.WorkOnTaskActivity; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; import javafx.scene.Node; import javafx.scene.control.ListView; import javafx.scene.control.MultipleSelectionModel; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.input.KeyCode; import java.net.URL; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ResourceBundle; public class OverviewScheduledController extends BaseController<OverviewModel> { private final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_TIME; @FXML protected TableView<Task> scheduledTasks; @FXML protected TableColumn<Task, String> name; @FXML protected TableColumn<Task, String> startTime; @FXML protected TableColumn<Task, String> endTime; @FXML protected ListView<Task> proposedTasks; @Override public void initialize(URL location, ResourceBundle resources) { proposedTasks.setCellFactory(v -> new ConvertingListCell<>(c -> c.getName())); name.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getName())); startTime.setCellValueFactory(this::convertStartTime); endTime.setCellValueFactory(this::convertEndTime); name.prefWidthProperty().bind(proposedTasks.widthProperty().subtract(startTime.widthProperty()).subtract(endTime.widthProperty())); registerHandlers(scheduledTasks, scheduledTasks.getSelectionModel()); registerHandlers(proposedTasks, proposedTasks.getSelectionModel()); } private void registerHandlers(Node node, MultipleSelectionModel<Task> selectionModel) { Runnable run = () -> { Task selectedItem = selectionModel.getSelectedItem(); if (selectedItem != null) { startWork(selectedItem); } }; node.setOnMouseClicked(e -> { if (e.getClickCount() > 1) { run.run(); } }); node.setOnKeyReleased(e -> { if (e.getCode() == KeyCode.ENTER) { run.run(); } }); } private void startWork(Task task) { ActivityHint activityHint = new ActivityHint(WorkOnTaskActivity.class, controller.getCurrentActivityId()); activityHint.setDataSourceHint(() -> task); controller.startOrResume(activityHint); } protected ObservableValue<String> convertStartTime(TableColumn.CellDataFeatures<Task, String> param) { LocalTime scheduledTime = param.getValue().getSchedule().getScheduledTime(); if (scheduledTime != null) { return new SimpleStringProperty(scheduledTime.format(formatter)); } else { return new SimpleStringProperty(); } } protected ObservableValue<String> convertEndTime(TableColumn.CellDataFeatures<Task, String> param) { Task task = param.getValue(); LocalTime scheduledTime = task.getSchedule().getScheduledTime(); if (scheduledTime != null) { scheduledTime = scheduledTime.plus(task.getEstimatedTime()); return new SimpleStringProperty(scheduledTime.format(formatter)); } else { return new SimpleStringProperty(); } } @Override protected void onRefresh(OverviewModel model) { super.onRefresh(model); proposedTasks.getItems().clear(); proposedTasks.getItems().addAll(model.getProposedTasks()); scheduledTasks.getItems().clear(); scheduledTasks.getItems().addAll(model.getScheduledTasks()); } }