Updated to 1.2.0, added breadcrumb list property.

This commit is contained in:
Andrew Lalis 2023-12-24 07:26:14 -05:00
parent 9766e1ddee
commit 5bb0b5410e
2 changed files with 20 additions and 1 deletions

View File

@ -6,7 +6,7 @@
<groupId>com.andrewlalis</groupId> <groupId>com.andrewlalis</groupId>
<artifactId>javafx-scene-router</artifactId> <artifactId>javafx-scene-router</artifactId>
<version>1.1.1</version> <version>1.2.0</version>
<name>JavaFX Scene Router</name> <name>JavaFX Scene Router</name>
<description>A library that provides a router implementation for JavaFX, for browser-like navigation between pages.</description> <description>A library that provides a router implementation for JavaFX, for browser-like navigation between pages.</description>
<url>https://github.com/andrewlalis/javafx-scene-router</url> <url>https://github.com/andrewlalis/javafx-scene-router</url>

View File

@ -1,6 +1,9 @@
package com.andrewlalis.javafx_scene_router; package com.andrewlalis.javafx_scene_router;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
@ -34,6 +37,7 @@ public class SceneRouter {
private final Pane viewPane = new Pane(); private final Pane viewPane = new Pane();
private final Map<String, Parent> routeMap = new HashMap<>(); private final Map<String, Parent> routeMap = new HashMap<>();
private final RouteHistory history = new RouteHistory(); private final RouteHistory history = new RouteHistory();
private final ListProperty<BreadCrumb> breadCrumbs = new SimpleListProperty<>();
/** /**
* Constructs the router. * Constructs the router.
@ -139,14 +143,29 @@ public class SceneRouter {
return viewPane; return viewPane;
} }
/**
* Gets an observable list of {@link BreadCrumb} that is updated each time
* the router's navigation history is updated.
* @return The list of breadcrumbs.
*/
public ObservableList<BreadCrumb> getBreadCrumbs() {
return breadCrumbs;
}
private Parent getMappedNode(String route) { private Parent getMappedNode(String route) {
Parent node = routeMap.get(route); Parent node = routeMap.get(route);
if (node == null) throw new IllegalArgumentException("Route " + route + " is not mapped to any node."); if (node == null) throw new IllegalArgumentException("Route " + route + " is not mapped to any node.");
return node; return node;
} }
/**
* Internal method to actually set this router's view pane to a particular
* node. This is called any time a route changes.
* @param node The node to set.
*/
private void setCurrentNode(Parent node) { private void setCurrentNode(Parent node) {
viewPane.getChildren().setAll(node); viewPane.getChildren().setAll(node);
breadCrumbs.setAll(history.getBreadCrumbs());
} }
private <T> Parent loadNode(URL resource, Consumer<T> controllerCustomizer) { private <T> Parent loadNode(URL resource, Consumer<T> controllerCustomizer) {