Skip to content
Snippets Groups Projects
Commit 4e59e520 authored by Hallvard Trætteberg's avatar Hallvard Trætteberg
Browse files

Made settings work with sort order

parent 029ee423
No related branches found
No related tags found
No related merge requests found
Showing
with 37 additions and 26 deletions
......@@ -85,9 +85,11 @@ public class TodoSettings {
return todoItemSortOrder;
}
public final static String TODO_ITEM_SORT_ORDER_SETTING = "todoItemSortOrder";
public void setTodoItemSortOrder(TodoItemsSortOrder todoItemSortOrder) {
Object oldValue = this.todoItemSortOrder;
this.todoItemSortOrder = todoItemSortOrder;
fireSettingChanged("todoItemSortOrder", oldValue, todoItemSortOrder);
fireSettingChanged(TODO_ITEM_SORT_ORDER_SETTING, oldValue, todoItemSortOrder);
}
}
......@@ -25,7 +25,7 @@ class TodoSettingsDeserializer extends JsonDeserializer<TodoSettings> {
if (jsonNode instanceof ObjectNode) {
ObjectNode objectNode = (ObjectNode) jsonNode;
TodoSettings settings = new TodoSettings();
JsonNode todoItemsSortOrderNode = objectNode.get("todoItemsSortOrder");
JsonNode todoItemsSortOrderNode = objectNode.get(TodoSettings.TODO_ITEM_SORT_ORDER_SETTING);
if (todoItemsSortOrderNode instanceof TextNode) {
try {
TodoItemsSortOrder sortOrder = TodoItemsSortOrder.valueOf(todoItemsSortOrderNode.asText());
......
......@@ -17,7 +17,7 @@ class TodoSettingsSerializer extends JsonSerializer<TodoSettings> {
SerializerProvider serializerProvider)
throws IOException {
jsonGen.writeStartObject();
jsonGen.writeStringField("todoItemsSortOrder", settings.getTodoItemSortOrder().name());
jsonGen.writeStringField(TodoSettings.TODO_ITEM_SORT_ORDER_SETTING, settings.getTodoItemSortOrder().name());
jsonGen.writeEndObject();
}
}
......@@ -25,8 +25,7 @@ public class TodoModuleTest {
@BeforeAll
public static void setUp() {
mapper = new ObjectMapper();
mapper.registerModule(new TodoModule());
mapper = TodoPersistence.createObjectMapper();
}
private final static String todoListWithTwoItems = """
......
......@@ -114,7 +114,7 @@
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<configuration>
<mainClass>todolist.ui.TodoDocumentApp</mainClass>
<mainClass>todolist.ui/todolist.ui.TodoDocumentApp</mainClass>
</configuration>
</plugin>
</plugins>
......@@ -129,7 +129,7 @@
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<configuration>
<mainClass>todolist.ui.TodoRemoteApp</mainClass>
<mainClass>todolist.ui/todolist.ui.TodoRemoteApp</mainClass>
</configuration>
</plugin>
</plugins>
......@@ -160,7 +160,7 @@
<JVMArgs>
<!-- <JVMArg>your-args</JVMArg> -->
</JVMArgs>
<mainClassName>todolist.ui.TodoApp</mainClassName>
<mainClassName>todolist.ui/todolist.ui.TodoApp</mainClassName>
<openingPath>/</openingPath>
</configuration>
</plugin>
......@@ -189,7 +189,7 @@
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<configuration>
<mainClass>todolist.ui.TodoApp</mainClass>
<mainClass>todolist.ui/todolist.ui.TodoApp</mainClass>
</configuration>
</plugin>
......
......@@ -93,6 +93,7 @@ public class TodoListController {
public void setTodoItemsProvider(Function<TodoList, Collection<TodoItem>> todoItemsProvider) {
this.todoItemsProvider = todoItemsProvider;
updateView();
}
protected void updateView() {
......
......@@ -2,6 +2,7 @@ package todolist.ui;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javafx.application.Platform;
import javafx.fxml.FXML;
......@@ -13,6 +14,8 @@ import javafx.stage.Stage;
import todolist.core.AbstractTodoList;
import todolist.core.TodoList;
import todolist.core.TodoModel;
import todolist.core.TodoSettings;
import todolist.core.TodoSettingsListener;
import todolist.core.TodoSettings.TodoItemsSortOrder;
import todolist.ui.util.SceneTarget;
......@@ -21,7 +24,7 @@ import todolist.ui.util.SceneTarget;
* Supports adding new TodoList objects and
* selecting one for viewing and editing.
*/
public class TodoModelController {
public class TodoModelController implements TodoSettingsListener {
private TodoModelAccess todoModelAccess;
......@@ -39,8 +42,19 @@ public class TodoModelController {
public void setTodoModelAccess(TodoModelAccess todoModelAccess) {
this.todoModelAccess = todoModelAccess;
updateTodoItemsProvider();
updateTodoListsView(null);
TodoItemsSortOrder sortOrder = todoModelAccess.getTodoSettings().getTodoItemSortOrder();
todoModelAccess.getTodoSettings().addTodoSettingsListener(this);
}
public void todoSettingsChanged(TodoSettings settings, Collection<String> changedProperties) {
if (changedProperties.contains(TodoSettings.TODO_ITEM_SORT_ORDER_SETTING)) {
updateTodoItemsProvider();
}
}
private void updateTodoItemsProvider() {
TodoItemsSortOrder sortOrder = this.todoModelAccess.getTodoSettings().getTodoItemSortOrder();
todoListViewController.setTodoItemsProvider(TodoModel.getSortedTodoItemsProvider(sortOrder));
}
......@@ -52,7 +66,6 @@ public class TodoModelController {
todoModelAccess.notifyTodoListChanged(todoList);
return null;
});
todoListViewController.setTodoItemsProvider(TodoModel.getSortedTodoItemsProvider(TodoItemsSortOrder.UNCHECKED_CHECKED));
}
private String addNewTodoListText = "<add new todo list>";
......
......@@ -3,6 +3,9 @@
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Button?>
<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
<?import javafx.scene.control.Tooltip?>
<VBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="todolist.ui.TodoModelController">
<HBox>
......
......@@ -20,13 +20,13 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.testfx.framework.junit5.ApplicationTest;
import org.testfx.util.WaitForAsyncUtils;
import todolist.core.AbstractTodoList;
import todolist.core.TodoItem;
import todolist.core.TodoList;
import todolist.core.TodoModel;
import todolist.core.TodoSettings.TodoItemsSortOrder;
import todolist.json.TodoPersistence;
public class TodoListControllerTest extends ApplicationTest {
......@@ -38,6 +38,7 @@ public class TodoListControllerTest extends ApplicationTest {
final FXMLLoader loader = new FXMLLoader(getClass().getResource("TodoList_test.fxml"));
final Parent root = loader.load();
this.controller = loader.getController();
controller.setTodoItemsProvider(TodoModel.getSortedTodoItemsProvider(TodoItemsSortOrder.UNCHECKED_CHECKED));
stage.setScene(new Scene(root));
stage.show();
}
......@@ -183,12 +184,12 @@ public class TodoListControllerTest extends ApplicationTest {
return listCell.lookup(selector);
}
private void checkTodoItem(TodoItem item, Boolean checked, String text) {
private void checkTodoItem(TodoItem item, Boolean checked, String text, String itemMessage) {
if (checked != null) {
assertEquals(checked, item.isChecked());
assertEquals(checked, item.isChecked(), "Checked of " + itemMessage);
}
if (text != null) {
assertEquals(text, item.getText());
assertEquals(text, item.getText(), "Text of " + itemMessage);
}
}
......@@ -205,7 +206,7 @@ public class TodoListControllerTest extends ApplicationTest {
int i = 0;
for (TodoItem item : it) {
assertTrue(i < items.length);
checkTodoItem(item, items[i].isChecked(), items[i].getText());
checkTodoItem(item, items[i].isChecked(), items[i].getText(), "item #" + i);
i++;
}
assertTrue(i == items.length);
......
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.String?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
......
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.String?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Tooltip?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ListView?>
<?import de.jensd.fx.glyphs.fontawesome.FontAwesomeIconView?>
<VBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="todolist.ui.TodoModelController">
<HBox>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment