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