From 368e7874e8f5aa3903719f1a710c2f1b38b16f66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hallvard=20Tr=C3=A6tteberg?= <hal@ntnu.no> Date: Fri, 25 Sep 2020 14:23:28 +0000 Subject: [PATCH] Font awesome support --- todolist/fxui/pom.xml | 44 ++++++++++++++++++- .../main/java/todolist/ui/TodoController.java | 31 +++++++++++++ .../src/main/resources/todolist/ui/Todo.fxml | 21 ++++++++- 3 files changed, 93 insertions(+), 3 deletions(-) diff --git a/todolist/fxui/pom.xml b/todolist/fxui/pom.xml index 6b10cf6..d09fb28 100644 --- a/todolist/fxui/pom.xml +++ b/todolist/fxui/pom.xml @@ -11,6 +11,15 @@ <artifactId>fxui</artifactId> + <!-- + <repositories> + <repository> + <id>bintray</id> + <url>https://dl.bintray.com/jerady/maven</url> + </repository> + </repositories> + --> + <dependencies> <dependency> @@ -37,6 +46,21 @@ <version>14.0.2</version> </dependency> + <!-- + <dependency> + <groupId>de.jensd</groupId> + <artifactId>fontawesomefx-fontawesome</artifactId> + <version>4.7.0-11</version> + </dependency> + --> + + <!-- https://mvnrepository.com/artifact/de.jensd/fontawesomefx-controls --> + <dependency> + <groupId>de.jensd</groupId> + <artifactId>fontawesomefx-fontawesome</artifactId> + <version>4.7.0-9.1.2</version> + </dependency> + <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> @@ -66,6 +90,24 @@ </dependency> </dependencies> + <profiles> + <profile> + <id>fontawesome</id> + <build> + <plugins> + <plugin> + <groupId>org.openjfx</groupId> + <artifactId>javafx-maven-plugin</artifactId> + <version>0.0.4</version> + <configuration> + <mainClass>de.jensd.fx.glyphs.fontawesome.demo.FontAwesomeIconsDemoApp</mainClass> + </configuration> + </plugin> + </plugins> + </build> + </profile> + </profiles> + <build> <plugins> <plugin> @@ -79,7 +121,7 @@ <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.4</version> - <configuration> + <configuration> <options> <!-- <option>dash dash enable-preview</option> diff --git a/todolist/fxui/src/main/java/todolist/ui/TodoController.java b/todolist/fxui/src/main/java/todolist/ui/TodoController.java index d11928a..5223f83 100644 --- a/todolist/fxui/src/main/java/todolist/ui/TodoController.java +++ b/todolist/fxui/src/main/java/todolist/ui/TodoController.java @@ -15,8 +15,11 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.function.Predicate; import javafx.fxml.FXML; +import javafx.scene.Node; import javafx.scene.control.Button; +import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.TextField; import todolist.core.TodoItem; @@ -136,6 +139,34 @@ public class TodoController { for (Button button : selectionButtons) { button.setDisable(disable); } + double rowLayoutY = getRowLayoutY(todoListView, listCell -> isSelected(todoListView, listCell), 0); + System.out.println(rowLayoutY); + } + + private boolean isSelected(ListView<?> listView, ListCell<?> listCell) { + return isSelected(listView, listCell.getItem()); + } + private boolean isSelected(ListView<?> listView, Object item) { + return todoListView.getSelectionModel().getSelectedItems().contains(item); + } + + @SuppressWarnings("unchecked") + private <T> double getRowLayoutY(ListView<T> listView, Predicate<ListCell<T>> test, int num) { + for (Node child : listView.lookupAll(".list-cell")) { + if (child instanceof ListCell) { + ListCell<T> listCell = (ListCell<T>) child; + if (test.test(listCell) && num-- == 0) { + double dy = 0; + Node node = listCell; + while (node != todoListView) { + dy += node.getLayoutY(); + node = node.getParent(); + } + return dy; + } + } + } + return -1; } @FXML diff --git a/todolist/fxui/src/main/resources/todolist/ui/Todo.fxml b/todolist/fxui/src/main/resources/todolist/ui/Todo.fxml index 4cd262f..489121f 100644 --- a/todolist/fxui/src/main/resources/todolist/ui/Todo.fxml +++ b/todolist/fxui/src/main/resources/todolist/ui/Todo.fxml @@ -4,21 +4,38 @@ <?import javafx.scene.layout.HBox?> <?import javafx.scene.layout.VBox?> <?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.TodoController"> <fx:define> <String fx:id="userTodoListPath" fx:value="todolist.json"/> <String fx:id="sampleTodoListResource" fx:value="sample-todolist.json"/> </fx:define> <HBox> - <Button fx:id="newTodoItemButton" text="New Item" onAction="#handleNewTodoItemAction"/> + <Button fx:id="newTodoItemButton" onAction="#handleNewTodoItemAction"> + <graphic> + <FontAwesomeIconView glyphName="PLUS" size="18px" glyphStyle="-fx-fill: green" /> + </graphic> + <tooltip> + <Tooltip text="New Item"/> + </tooltip> + </Button> <TextField fx:id="newTodoItemText" promptText="Skriv inn tekst her" onAction="#handleNewTodoItemAction"/> </HBox> <ListView fx:id="todoListView"> </ListView> <HBox> - <Button fx:id="deleteTodoItemButton" text="Delete Item" onAction="#handleDeleteItemAction"/> + <Button fx:id="deleteTodoItemButton" onAction="#handleDeleteItemAction"> + <graphic> + <FontAwesomeIconView glyphName="TIMES_CIRCLE_ALT" size="18px" glyphStyle="-fx-fill: red" /> + </graphic> + <tooltip> + <Tooltip text="Delete Item"/> + </tooltip> + </Button> </HBox> </VBox> -- GitLab