From 49aa330a7d1b6318f3c03359b3157c4a65c176d6 Mon Sep 17 00:00:00 2001 From: NadavY Date: Sat, 27 Jan 2024 15:29:29 +0200 Subject: [PATCH] WPR-16 - Add groups selection to Route Details screen --- .../wpreplace/services/RouteService.java | 3 +- .../ui/MissionDetailsController.java | 2 +- .../wpreplace/ui/RouteDetailsController.java | 75 ++++++++++++------- .../org/faulty/wpreplace/ui/RouteDetails.fxml | 10 ++- 4 files changed, 58 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/faulty/wpreplace/services/RouteService.java b/src/main/java/org/faulty/wpreplace/services/RouteService.java index 47d3fce..b211876 100644 --- a/src/main/java/org/faulty/wpreplace/services/RouteService.java +++ b/src/main/java/org/faulty/wpreplace/services/RouteService.java @@ -11,15 +11,14 @@ import java.util.List; import java.util.Map; +@Getter @Component public class RouteService { - @Getter LuaValue route; private String coalition; private int countryId; private String unitType; - @Getter private int groupId; public void setRoute(LuaValue route, String coalition, int countryId, String unitType, int groupId) { diff --git a/src/main/java/org/faulty/wpreplace/ui/MissionDetailsController.java b/src/main/java/org/faulty/wpreplace/ui/MissionDetailsController.java index 0db588c..fb96041 100644 --- a/src/main/java/org/faulty/wpreplace/ui/MissionDetailsController.java +++ b/src/main/java/org/faulty/wpreplace/ui/MissionDetailsController.java @@ -208,7 +208,7 @@ public void loadRouteData() { FXMLLoader loader = new FXMLLoader(getClass().getResource("RouteDetails.fxml")); loader.setControllerFactory(context::getBean); SplitPane routePane = loader.load(); - Tab tab = new Tab("Route " + routeService.printDetails()); + Tab tab = new Tab(String.format("Route coalition %s, country %d, unitType %s", routeService.getCoalition(), routeService.getCountryId(), routeService.getUnitType())); tab.setContent(routePane); tabPane.getTabs().add(tab); tabPane.getSelectionModel().select(tab); diff --git a/src/main/java/org/faulty/wpreplace/ui/RouteDetailsController.java b/src/main/java/org/faulty/wpreplace/ui/RouteDetailsController.java index bda7157..ffceaf3 100644 --- a/src/main/java/org/faulty/wpreplace/ui/RouteDetailsController.java +++ b/src/main/java/org/faulty/wpreplace/ui/RouteDetailsController.java @@ -20,6 +20,7 @@ import org.faulty.wpreplace.services.MissionService; import org.faulty.wpreplace.services.RouteService; import org.faulty.wpreplace.utils.RouteCanvasUtil; +import org.faulty.wpreplace.utils.RouteUtils; import org.luaj.vm2.LuaValue; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.support.AbstractApplicationContext; @@ -33,8 +34,6 @@ @Component public class RouteDetailsController { - @FXML - public ImageView mapImageView; @Autowired private AbstractApplicationContext context; @Autowired @@ -53,16 +52,36 @@ public class RouteDetailsController { public CheckBox showAll; @FXML public Canvas canvas; + @FXML + public ImageView mapImageView; + @FXML + public ComboBox groupSelect; + private Map> allGroupRoutes; private boolean drawAllRouts; public void initialize() { MapEntry mapEntry = new MapEntry(missionService.getMapName()); - initRouteTable(mapEntry); + setAllGroups(); + initGroupSelect(mapEntry); initScrollPane(mapEntry); initCanvas(mapEntry); + initRouteTable(mapEntry); initDrawAllCheckBox(mapEntry); } + private void setAllGroups() { + Map friendlyGroupRoutes = routeService.getFriendlyGroupRoutes(missionService.getMission()); + allGroupRoutes = friendlyGroupRoutes.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, r -> RouteDetails.fromLuaRoute(r.getValue().checktable()))); + } + + private void initGroupSelect(MapEntry mapEntry) { + groupSelect.getItems().addAll(RouteUtils.getSelectedGroupIds(missionService.getMission(), + routeService.getCoalition(), routeService.getCountryId(), routeService.getUnitType())); + groupSelect.setValue(routeService.getGroupId()); + groupSelect.setOnAction(event -> setRouteDetails(mapEntry)); + } + private void initScrollPane(MapEntry mapEntry) { scrollPane.setOnMousePressed(event -> { if (event.isMiddleButtonDown()) { @@ -76,8 +95,8 @@ private void initScrollPane(MapEntry mapEntry) { }); scrollPane.addEventFilter(ScrollEvent.ANY, event -> { double deltaY = event.getDeltaY(); - double scaleFactor = deltaY > 0 ? 1.1 : 0.9; - int ratio = (int)(mapEntry.getRatio() * scaleFactor); + double scaleFactor = deltaY > 0 ? 0.9 : 1.1; + int ratio = (int) (mapEntry.getRatio() * scaleFactor); mapEntry.setRatio(ratio); initCanvas(mapEntry); event.consume(); @@ -108,44 +127,36 @@ private void initCanvas(MapEntry mapEntry) { gc.clearRect(0, 0, gc.getCanvas().getWidth(), gc.getCanvas().getHeight()); // Set up scrolling - if (drawAllRouts) { - drawAllRoutes(gc, mapEntry); - } else { - drawSingleRoute(gc, mapEntry); - } + drawRoutes(mapEntry, gc); } private void initDrawAllCheckBox(MapEntry mapEntry) { showAll.selectedProperty().addListener((observable, oldValue, newValue) -> { GraphicsContext gc = canvas.getGraphicsContext2D(); - if (newValue) { - drawAllRouts = true; - drawAllRoutes(gc, mapEntry); - } else { - drawAllRouts = false; - drawSingleRoute(gc, mapEntry); - } + drawAllRouts = newValue; + drawRoutes(mapEntry, gc); }); } + private void drawRoutes(MapEntry mapEntry, GraphicsContext gc) { + if (drawAllRouts) { + drawAllRoutes(gc, mapEntry); + } else { + drawSingleRoute(gc, mapEntry); + } + } + private void drawAllRoutes(GraphicsContext gc, MapEntry mapEntry) { - int groupId = routeService.getGroupId(); - Map friendlyGroupRoutes = routeService.getFriendlyGroupRoutes(missionService.getMission()); - Map> routes = friendlyGroupRoutes.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, r -> RouteDetails.fromLuaRoute(r.getValue().checktable()))); - RouteCanvasUtil.drawRoute(gc, mapEntry, routes, groupId); + RouteCanvasUtil.drawRoute(gc, mapEntry, allGroupRoutes, groupSelect.getValue()); } private void drawSingleRoute(GraphicsContext gc, MapEntry mapEntry) { - List route = RouteDetails.fromLuaRoute(routeService.getRoute().get("points").checktable()); - int groupId = routeService.getGroupId(); + int groupId = groupSelect.getValue(); + List route = allGroupRoutes.get(groupId); RouteCanvasUtil.drawRoute(gc, mapEntry, Map.of(groupId, route), groupId); } private void initRouteTable(MapEntry mapEntry) { - List route = RouteDetails.fromLuaRoute(routeService.getRoute().get("points").checktable()); - ObservableList routes = FXCollections.observableArrayList(route); - TableColumn idColumn = new TableColumn<>("ID"); idColumn.setCellValueFactory(new PropertyValueFactory<>("id")); idColumn.setEditable(false); @@ -193,7 +204,7 @@ private void initRouteTable(MapEntry mapEntry) { dataTable.getColumns().addAll(idColumn, xColumn, yColumn, altColumn, speedColumn, etaColumn, typeColumn, taskColumn); dataTable.setEditable(true); - dataTable.setItems(routes); + setRouteDetails(mapEntry); idColumn.setSortType(TableColumn.SortType.ASCENDING); dataTable.getSortOrder().add(idColumn); dataTable.sort(); @@ -211,6 +222,14 @@ private void initRouteTable(MapEntry mapEntry) { }); } + private void setRouteDetails(MapEntry mapEntry) { + List route = allGroupRoutes.get(groupSelect.getValue()); + ObservableList routes = FXCollections.observableArrayList(route); + dataTable.getItems().clear(); + dataTable.setItems(routes); + drawRoutes(mapEntry, canvas.getGraphicsContext2D()); + } + public void saveChanges() { routeService.updateRoute(dataTable.getItems()); } diff --git a/src/main/resources/org/faulty/wpreplace/ui/RouteDetails.fxml b/src/main/resources/org/faulty/wpreplace/ui/RouteDetails.fxml index f61cc64..751f1ee 100644 --- a/src/main/resources/org/faulty/wpreplace/ui/RouteDetails.fxml +++ b/src/main/resources/org/faulty/wpreplace/ui/RouteDetails.fxml @@ -7,7 +7,15 @@ -