From b7e18200834d37ea9fb5b5693519c346791c654c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hallvard=20Tr=C3=A6tteberg?= <hal@ntnu.no> Date: Tue, 15 Sep 2020 12:07:43 +0000 Subject: [PATCH] (De)aktivering av knapper og penere liste-elementer (#4) --- .../main/java/todolist/ui/TodoController.java | 29 +++++++++++++++++-- .../java/todolist/ui/TodoItemListCell.java | 19 ++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 todolist/src/main/java/todolist/ui/TodoItemListCell.java diff --git a/todolist/src/main/java/todolist/ui/TodoController.java b/todolist/src/main/java/todolist/ui/TodoController.java index e51791a..9a94231 100644 --- a/todolist/src/main/java/todolist/ui/TodoController.java +++ b/todolist/src/main/java/todolist/ui/TodoController.java @@ -1,11 +1,13 @@ package todolist.ui; +import java.util.Collection; import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import javafx.fxml.FXML; +import javafx.scene.control.Button; import javafx.scene.control.ListView; import javafx.scene.control.TextField; import todolist.core.TodoItem; @@ -48,11 +50,23 @@ public class TodoController { @FXML ListView<TodoItem> todoListView; + @FXML + Button deleteTodoItemButton; + + @FXML + Button checkTodoItemButton; + + private Collection<Button> selectionButtons; + @FXML public void initialize() { + selectionButtons = List.of(deleteTodoItemButton, checkTodoItemButton); // kobler data til list-controll updateTodoListView(); + updateTodoListButtons(); todoList.addTodoListListener(todoList -> updateTodoListView()); + todoListView.setCellFactory(listView -> new TodoItemListCell()); + todoListView.getSelectionModel().selectedItemProperty().addListener((prop, oldValue, newValue) -> updateTodoListButtons()); } protected void updateTodoListView() { @@ -62,13 +76,22 @@ public class TodoController { viewList.addAll(todoList.getCheckedTodoItems()); } + private void updateTodoListButtons() { + boolean disable = todoListView.getSelectionModel().getSelectedItem() == null; + for (Button button : selectionButtons) { + button.setDisable(disable); + } + } + @FXML public void handleNewTodoItemAction() { - TodoItem item = new TodoItem(); + TodoItem item = todoList.createTodoItem(); item.setText(newTodoItemText.getText()); todoList.addTodoItem(item); } + + @FXML public void handleDeleteItemAction() { TodoItem item = todoListView.getSelectionModel().getSelectedItem(); @@ -80,6 +103,8 @@ public class TodoController { @FXML public void handleCheckItemAction() { TodoItem item = todoListView.getSelectionModel().getSelectedItem(); - item.setChecked(true); + if (item != null) { + item.setChecked(true); + } } } diff --git a/todolist/src/main/java/todolist/ui/TodoItemListCell.java b/todolist/src/main/java/todolist/ui/TodoItemListCell.java new file mode 100644 index 0000000..e50a2c7 --- /dev/null +++ b/todolist/src/main/java/todolist/ui/TodoItemListCell.java @@ -0,0 +1,19 @@ +package todolist.ui; + +import javafx.scene.control.ListCell; +import todolist.core.TodoItem; + +public class TodoItemListCell extends ListCell<TodoItem> { + + @Override + protected void updateItem(TodoItem item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null) { + setText(null); + setGraphic(null); + } else { + setText((item.isChecked() ? "v" : "-") + " " + item.getText()); + setGraphic(null); + } + } +} -- GitLab