diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java index 329a5460ccb9d7be1b6dd9025ebd52c93d5283a8..d47aea6dd7444220c0ad85628ea91818433e799e 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/CityDoctorController.java @@ -71,7 +71,7 @@ public class CityDoctorController { private AtomicInteger waterChunkNr = new AtomicInteger(0); private AtomicInteger landChunkNr = new AtomicInteger(0); private AtomicInteger cityFurnitureChunkNr = new AtomicInteger(0); - private AtomicInteger otherObjectsChunkNr = new AtomicInteger(0); + private AtomicInteger genericCityObjectsChunkNr = new AtomicInteger(0); public CityDoctorController(MainWindow mainWindow, HighlightController highlightController, Renderer renderer) { this.mainWindow = mainWindow; @@ -288,7 +288,7 @@ public class CityDoctorController { waterChunkNr.set(0); landChunkNr.set(0); cityFurnitureChunkNr.set(0); - otherObjectsChunkNr.set(0); + genericCityObjectsChunkNr.set(0); } private void buildLand(CityDoctorModel model) { @@ -359,12 +359,12 @@ public class CityDoctorController { if (model.getGenericCityObjects().isEmpty()) { return; } - TreeView otherObjectsView = mainWindow.getOtherObjectsView(); + TreeView otherObjectsView = mainWindow.getGenericCityObjectView(); TreeItem otherObjectsRoot = new TreeItem<>(new AllOtherObjectsNode(model.getGenericCityObjects())); otherObjectsRoot.setExpanded(true); otherObjectsView.setRoot(otherObjectsRoot); - buildTreeFromList(model.getGenericCityObjects(), otherObjectsView.getRoot(), otherObjectsChunkNr); - addMoreButtonIfNecessary(model.getGenericCityObjects(), otherObjectsView, otherObjectsRoot, otherObjectsChunkNr); + buildTreeFromList(model.getGenericCityObjects(), otherObjectsView.getRoot(), genericCityObjectsChunkNr); + addMoreButtonIfNecessary(model.getGenericCityObjects(), otherObjectsView, otherObjectsRoot, genericCityObjectsChunkNr); } private void buildWater(CityDoctorModel model) { @@ -543,7 +543,7 @@ public class CityDoctorController { mainWindow.getWaterView().setRoot(null); mainWindow.getTerrainView().setRoot(null); mainWindow.getCityFurnitureView().setRoot(null); - mainWindow.getOtherObjectsView().setRoot(null); + mainWindow.getGenericCityObjectView().setRoot(null); mainWindow.getErrorTree().getRoot().getChildren().clear(); mainWindow.getAttributeView().getRoot().getChildren().clear(); mainWindow.getGlobalErrorsView().getItems().clear(); @@ -612,6 +612,58 @@ public class CityDoctorController { } } + private void buildVegetationTreeFromList(List list, TreeItem root) { + int vegetationChunk = vegetationChunkNr.get(); + for (int i = vegetationChunk * MAX_FEATURES_PER_CHUNK; i < (vegetationChunk + 1) * MAX_FEATURES_PER_CHUNK + && i < list.size(); i++) { + Vegetation v = list.get(i); + VegetationNode node = new VegetationNode(v); + TreeItem item = new TreeItem<>(node); + item.setExpanded(true); + root.getChildren().add(item); + createGeometryNodes(v, item); + } + } + + private void buildWaterTreeFromList(List list, TreeItem root) { + int waterChunk = waterChunkNr.get(); + for (int i = waterChunk * MAX_FEATURES_PER_CHUNK; i < (waterChunk + 1) * MAX_FEATURES_PER_CHUNK + && i < list.size(); i++) { + WaterObject w = list.get(i); + CityObjectNode node = new CityObjectNode(w); + TreeItem item = new TreeItem<>(node); + item.setExpanded(true); + root.getChildren().add(item); + createGeometryNodes(w, item); + } + } + + private void buildCityFurnitureTreeFromList(List list, TreeItem root) { + int cityFurnChunk = cityFurnitureChunkNr.get(); + for (int i = cityFurnChunk * MAX_FEATURES_PER_CHUNK; i < (cityFurnChunk + 1) * MAX_FEATURES_PER_CHUNK + && i < list.size(); i++) { + CityFurniture cf = list.get(i); + CityObjectNode node = new CityObjectNode(cf); + TreeItem item = new TreeItem<>(node); + item.setExpanded(true); + root.getChildren().add(item); + createGeometryNodes(cf, item); + } + } + + private void buildGenericCityObjectTreeFromList(List list, TreeItem root) { + int genericObjectChunk = genericCityObjectsChunkNr.get(); + for (int i = genericObjectChunk * MAX_FEATURES_PER_CHUNK; i < (genericObjectChunk + 1) * MAX_FEATURES_PER_CHUNK + && i < list.size(); i++) { + GenericCityObject goc = list.get(i); + CityObjectNode node = new CityObjectNode(goc); + TreeItem item = new TreeItem<>(node); + item.setExpanded(true); + root.getChildren().add(item); + createGeometryNodes(goc, item); + } + } + private void createTransportSectionNodes(TransportationObject t, TreeItem root) { if (t instanceof TopLevelTransportFeature top) { if (!top.getSections().isEmpty()) { @@ -1167,7 +1219,7 @@ public class CityDoctorController { updateTree(mainWindow.getCityFurnitureView().getRoot()); updateTree(mainWindow.getTransportationView().getRoot()); updateTree(mainWindow.getWaterView().getRoot()); - updateTree(mainWindow.getOtherObjectsView().getRoot()); + updateTree(mainWindow.getGenericCityObjectView().getRoot()); updateTree(mainWindow.getTunnelView().getRoot()); renderer.updateErrors(); } @@ -1280,85 +1332,105 @@ public class CityDoctorController { } mainWindow.unselectEverything(); resetFeatureChunks(); - if (selectedTab == FeatureType.BUILDING) { - List foundBuildings = filterFeatures(searchString, model.getBuildings()); - TreeView buildingsView = mainWindow.getBuildingsView(); - TreeItem root = buildingsView.getRoot(); - root.getChildren().clear(); - buildBuildingTreeFromList(foundBuildings, root); - updateTree(root); - addMoreButtonToBuildingsIfNecessary(foundBuildings, buildingsView, root, buildingChunkNr); - } else if (selectedTab == FeatureType.BRIDGE){ - List foundBridges = filterFeatures(searchString, model.getBridges()); - TreeView brigdeView = mainWindow.getBridgeView(); - TreeItem root = brigdeView.getRoot(); - root.getChildren().clear(); - buildBridgeTreeFromList(foundBridges, root); - updateTree(root); - addMoreButtonIfNecessary(foundBridges, brigdeView, root, bridgeChunkNr); - } else if (selectedTab == FeatureType.TUNNEL){ - List foundTunnel = filterFeatures(searchString, model.getTunnels()); - TreeView tunnelView = mainWindow.getTunnelView(); - TreeItem root = tunnelView.getRoot(); - root.getChildren().clear(); - buildTunnelTreeFromList(foundTunnel, root); - updateTree(root); - addMoreButtonIfNecessary(foundTunnel, tunnelView, root, bridgeChunkNr); - } - else{ - TreeView view; - List cos; - AtomicInteger chunkCounter; - switch (selectedTab) { - case VEGETATION: - view = mainWindow.getVegetationView(); - cos = filterFeatures(searchString, model.getVegetation()); - chunkCounter = vegetationChunkNr; - break; - case BRIDGE: - view = mainWindow.getBridgeView(); - cos = filterFeatures(searchString, model.getBridges()); - chunkCounter = bridgeChunkNr; - break; - case TRANSPORTATION: - view = mainWindow.getTransportationView(); - cos = filterFeatures(searchString, model.getTransportation()); - chunkCounter = transportationChunkNr; - break; - case TUNNEL: - view = mainWindow.getTunnelView(); - cos = model.getTunnels(); - chunkCounter = tunnelChunkNr; - break; - case WATER: - view = mainWindow.getWaterView(); - cos = filterFeatures(searchString, model.getWater()); - chunkCounter = waterChunkNr; - break; - case LAND: - view = mainWindow.getTerrainView(); - cos = filterFeatures(searchString, model.getLand()); - chunkCounter = landChunkNr; - break; - case CITY_FURNITURE: - view = mainWindow.getCityFurnitureView(); - cos = filterFeatures(searchString, model.getCityFurniture()); - chunkCounter = cityFurnitureChunkNr; - break; - case GENERIC_CITY_OBJECT: - view = mainWindow.getOtherObjectsView(); - cos = filterFeatures(searchString, model.getGenericCityObjects()); - chunkCounter = otherObjectsChunkNr; - break; - default: - throw new IllegalStateException("Unknown selected feature tab"); - } - TreeItem root = view.getRoot(); - root.getChildren().clear(); - buildTreeFromList(cos, root, chunkCounter); - updateTree(root); - addMoreButtonIfNecessary(cos, view, root, chunkCounter); + switch (selectedTab) { + case BUILDING -> filterBuildingTree(searchString); + case BRIDGE -> filterBridgeTree(searchString); + case TUNNEL -> filterTunnelTree(searchString); + case VEGETATION -> filterVegetationTree(searchString); + case TRANSPORTATION -> filterTransportationTree(searchString); + case WATER -> filterWaterTree(searchString); + case LAND -> filterLandTree(searchString); + case CITY_FURNITURE -> filterCityFurnitureTree(searchString); + case GENERIC_CITY_OBJECT -> filterGenericCityObjectTree(searchString); } + + + } + + private void filterBuildingTree(String searchString) { + List foundBuildings = filterFeatures(searchString, model.getBuildings()); + TreeView buildingsView = mainWindow.getBuildingsView(); + TreeItem root = buildingsView.getRoot(); + root.getChildren().clear(); + buildBuildingTreeFromList(foundBuildings, root); + updateTree(root); + addMoreButtonToBuildingsIfNecessary(foundBuildings, buildingsView, root, buildingChunkNr); + } + + private void filterBridgeTree(String searchString) { + List foundBridges = filterFeatures(searchString, model.getBridges()); + TreeView bridgeView = mainWindow.getBridgeView(); + TreeItem root = bridgeView.getRoot(); + root.getChildren().clear(); + buildBridgeTreeFromList(foundBridges, root); + updateTree(root); + addMoreButtonIfNecessary(foundBridges, bridgeView, root, bridgeChunkNr); + } + + private void filterTunnelTree(String searchString) { + List foundTunnel = filterFeatures(searchString, model.getTunnels()); + TreeView tunnelView = mainWindow.getTunnelView(); + TreeItem root = tunnelView.getRoot(); + root.getChildren().clear(); + buildTunnelTreeFromList(foundTunnel, root); + updateTree(root); + addMoreButtonIfNecessary(foundTunnel, tunnelView, root, tunnelChunkNr); + } + + private void filterVegetationTree(String searchString) { + List foundVegetation = filterFeatures(searchString, model.getVegetation()); + TreeView vegetationView = mainWindow.getVegetationView(); + TreeItem root = vegetationView.getRoot(); + root.getChildren().clear(); + buildVegetationTreeFromList(foundVegetation, root); + updateTree(root); + addMoreButtonIfNecessary(foundVegetation, vegetationView, root, vegetationChunkNr); + } + + private void filterTransportationTree(String searchString) { + List foundTransportation = filterFeatures(searchString, model.getTransportation()); + TreeView transportationView = mainWindow.getTransportationView(); + TreeItem root = transportationView.getRoot(); + root.getChildren().clear(); + buildTransportationTreeFromList(foundTransportation, root); + updateTree(root); + addMoreButtonIfNecessary(foundTransportation, transportationView, root, transportationChunkNr); + } + + private void filterWaterTree(String searchString) { + List foundWater = filterFeatures(searchString, model.getWater()); + TreeView waterView = mainWindow.getWaterView(); + TreeItem root = waterView.getRoot(); + root.getChildren().clear(); + buildWaterTreeFromList(foundWater, root); + addMoreButtonIfNecessary(foundWater, waterView, root, waterChunkNr); + } + + private void filterLandTree(String searchString) { + List foundLand = filterFeatures(searchString, model.getLand()); + TreeView landView = mainWindow.getTerrainView(); + TreeItem root = landView.getRoot(); + root.getChildren().clear(); + buildLandFromList(foundLand, root); + addMoreButtonIfNecessary(foundLand, landView, root, landChunkNr); + } + + private void filterCityFurnitureTree(String searchString) { + List foundCityFurniture = filterFeatures(searchString, model.getCityFurniture()); + TreeView cityFurnitureView = mainWindow.getCityFurnitureView(); + TreeItem root = cityFurnitureView.getRoot(); + root.getChildren().clear(); + buildCityFurnitureTreeFromList(foundCityFurniture, root); + addMoreButtonIfNecessary(foundCityFurniture, cityFurnitureView, root, cityFurnitureChunkNr); + } + + private void filterGenericCityObjectTree(String searchString) { + List foundGenericCityObject = filterFeatures(searchString, model.getGenericCityObjects()); + TreeView genericCityObjectView = mainWindow.getGenericCityObjectView(); + TreeItem root = genericCityObjectView.getRoot(); + root.getChildren().clear(); + buildGenericCityObjectTreeFromList(foundGenericCityObject, root); + addMoreButtonIfNecessary(foundGenericCityObject, genericCityObjectView, root, genericCityObjectsChunkNr); } private List filterFeatures(String searchString, List features) { @@ -1375,72 +1447,7 @@ public class CityDoctorController { if (model == null) { return; } - resetFeatureChunks(); - if (selectedTab == FeatureType.BUILDING) { - // buildings are handled differently, because of surface and building - // installations - TreeItem root = mainWindow.getBuildingsView().getRoot(); - if (root != null) { - root.getChildren().clear(); - buildBuildingTreeFromList(model.getBuildings(), root); - updateTree(root); - addMoreButtonToBuildingsIfNecessary(model.getBuildings(), mainWindow.getBuildingsView(), root, - buildingChunkNr); - } - } else { - TreeView view; - List cos; - AtomicInteger chunkCounter; - switch (selectedTab) { - case VEGETATION: - view = mainWindow.getVegetationView(); - cos = model.getVegetation(); - chunkCounter = vegetationChunkNr; - break; - case BRIDGE: - view = mainWindow.getBridgeView(); - cos = model.getBridges(); - chunkCounter = bridgeChunkNr; - break; - case TRANSPORTATION: - view = mainWindow.getTransportationView(); - cos = model.getTransportation(); - chunkCounter = transportationChunkNr; - break; - case TUNNEL: - view = mainWindow.getTunnelView(); - cos = model.getTunnels(); - chunkCounter = tunnelChunkNr; - break; - case WATER: - view = mainWindow.getWaterView(); - cos = model.getWater(); - chunkCounter = waterChunkNr; - break; - case LAND: - view = mainWindow.getTerrainView(); - cos = model.getLand(); - chunkCounter = landChunkNr; - break; - case CITY_FURNITURE: - view = mainWindow.getCityFurnitureView(); - cos = model.getCityFurniture(); - chunkCounter = cityFurnitureChunkNr; - break; - case GENERIC_CITY_OBJECT: - view = mainWindow.getOtherObjectsView(); - cos = model.getGenericCityObjects(); - chunkCounter = otherObjectsChunkNr; - break; - default: - throw new IllegalStateException("Unknown selected feature tab"); - } - TreeItem root = view.getRoot(); - root.getChildren().clear(); - buildTreeFromList(cos, root, chunkCounter); - updateTree(root); - addMoreButtonIfNecessary(cos, view, root, chunkCounter); - } + buildTrees(); } public Series createErrorSeries() { @@ -1511,12 +1518,12 @@ public class CityDoctorController { model.getCityFurniture(), cityFurnitureChunkNr); } - public void fillTreeViewWithErrorOtherObjects() { + public void fillTreeViewWithErrorGenericCityObjects() { if (model == null) { return; } - fillTreeViewWithErrorCityObjects(mainWindow.getOtherObjectsView(), - model.getGenericCityObjects(), otherObjectsChunkNr); + fillTreeViewWithErrorCityObjects(mainWindow.getGenericCityObjectView(), + model.getGenericCityObjects(), genericCityObjectsChunkNr); } public void fillTreeViewWithErrorTransportation() { @@ -1601,7 +1608,7 @@ public class CityDoctorController { break; case GENERIC_CITY_OBJECT: buildOtherCityObjects(model); - updateTree(mainWindow.getOtherObjectsView().getRoot()); + updateTree(mainWindow.getGenericCityObjectView().getRoot()); break; default: throw new IllegalStateException(); @@ -1695,7 +1702,7 @@ public class CityDoctorController { fillTreeViewWithErrorCityFurniture(); break; case GENERIC_CITY_OBJECT: - fillTreeViewWithErrorOtherObjects(); + fillTreeViewWithErrorGenericCityObjects(); break; default: throw new IllegalStateException("Unknown selected feature tab: " + mainWindow.getSelectedTab()); diff --git a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java index fee59f569c91708963fc7fa834b21245712b9940..055556f9c0ddf7f9b950e7f1be412da5409782c1 100644 --- a/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java +++ b/CityDoctorParent/Extensions/CityDoctorGUI/src/main/java/de/hft/stuttgart/citydoctor2/gui/MainWindow.java @@ -19,13 +19,11 @@ import javafx.application.Application; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.embed.swing.SwingFXUtils; -import javafx.event.Event; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.*; import javafx.scene.control.*; import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.skin.VirtualFlow; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; @@ -1026,7 +1024,7 @@ public class MainWindow extends Application { return attributeView; } - public TreeView getOtherObjectsView() { + public TreeView getGenericCityObjectView() { return otherObjectsView; }