Commit 994befb1 authored by Hallvard Trætteberg's avatar Hallvard Trætteberg
Browse files

Observerbar list (og elementer) (#4)

parent de0db904
......@@ -5,20 +5,34 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class TodoList implements Iterable<TodoItem> {
public class TodoList implements Iterable<TodoListItem> {
private List<TodoItem> items = new ArrayList<>();
private List<TodoListItem> items = new ArrayList<>();
public TodoItem createTodoItem() {
return new TodoListItem(this);
}
public void addTodoItem(TodoItem item) {
items.add(item);
TodoListItem todoListItem = null;
if (item instanceof TodoListItem) {
todoListItem = (TodoListItem) item;
} else {
todoListItem = new TodoListItem(this);
todoListItem.setText(item.getText());
todoListItem.setChecked(item.isChecked());
}
items.add(todoListItem);
fireTodoListChanged();
}
public void removeTodoItem(TodoItem item) {
items.remove(item);
fireTodoListChanged();
}
@Override
public Iterator<TodoItem> iterator() {
public Iterator<TodoListItem> iterator() {
return items.iterator();
}
......@@ -47,4 +61,26 @@ public class TodoList implements Iterable<TodoItem> {
public Collection<TodoItem> getUncheckedTodoItems() {
return getTodoItems(false);
}
// støtte for lytting
private Collection<TodoListListener> todoListListeners = new ArrayList<>();
public void addTodoListListener(TodoListListener listener) {
todoListListeners.add(listener);
}
public void removeTodoListListener(TodoListListener listener) {
todoListListeners.remove(listener);
}
protected void fireTodoListChanged(TodoItem item) {
fireTodoListChanged();
}
protected void fireTodoListChanged() {
for (TodoListListener listener : todoListListeners) {
listener.todoListChanged(this);
}
}
}
package todolist.core;
public class TodoListItem extends TodoItem {
private final TodoList todoList;
public TodoListItem(TodoList todoList) {
this.todoList = todoList;
}
@Override
public void setText(String text) {
String oldText = getText();
super.setText(text);
if (oldText != text || oldText != null && ! (oldText.equals(text))) {
todoList.fireTodoListChanged(this);
}
}
@Override
public void setChecked(boolean checked) {
boolean oldChecked = isChecked();
super.setChecked(checked);
if (oldChecked != checked) {
todoList.fireTodoListChanged(this);
}
}
}
\ No newline at end of file
package todolist.core;
public interface TodoListListener {
public void todoListChanged(TodoList list);
}
......@@ -14,8 +14,20 @@ import todolist.json.TodoModule;
public class TodoController {
private final static String todoListWithTwoItems =
"{\"items\":[{\"text\":\"item2\",\"checked\":true},{\"text\":\"item1\",\"checked\":false},{\"text\":\"item3\",\"checked\":true}]}";
private final static String todoListWithTwoItems = """
{
"items": [
{
"text": "item1",
"checked" : false
},
{
"text": "item2",
"checked" : true
}
]
}
""";
private TodoList todoList;
private ObjectMapper mapper = new ObjectMapper();
......@@ -40,6 +52,7 @@ public class TodoController {
public void initialize() {
// kobler data til list-controll
updateTodoListView();
todoList.addTodoListListener(todoList -> updateTodoListView());
}
protected void updateTodoListView() {
......@@ -54,7 +67,6 @@ public class TodoController {
TodoItem item = new TodoItem();
item.setText(newTodoItemText.getText());
todoList.addTodoItem(item);
updateTodoListView();
}
@FXML
......@@ -62,7 +74,6 @@ public class TodoController {
TodoItem item = todoListView.getSelectionModel().getSelectedItem();
if (item != null) {
todoList.removeTodoItem(item);
updateTodoListView();
}
}
......@@ -70,6 +81,5 @@ public class TodoController {
public void handleCheckItemAction() {
TodoItem item = todoListView.getSelectionModel().getSelectedItem();
item.setChecked(true);
updateTodoListView();
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment