From afc860d368a901b680af124e08d712cace70ca41 Mon Sep 17 00:00:00 2001 From: Mario-S Date: Sat, 23 Nov 2013 13:48:01 +0100 Subject: [PATCH] zoom based on property change --- .gitignore | 3 +- .../labs/map/CoordinatesConverter.java | 1 - src/main/java/jfxtras/labs/map/MapPane.java | 13 +++---- .../jfxtras/labs/map/ZoomControlFactory.java | 24 +++++++----- ...ZoomSliderFactory.java => ZoomSlider.java} | 38 +++++++++---------- src/main/java/jfxtras/labs/map/Zoomable.java | 6 --- src/test/java/jfxtras/labs/map/MapTrial1.java | 2 +- 7 files changed, 42 insertions(+), 45 deletions(-) rename src/main/java/jfxtras/labs/map/{ZoomSliderFactory.java => ZoomSlider.java} (72%) diff --git a/.gitignore b/.gitignore index 6625bb58c..b027cd49f 100644 --- a/.gitignore +++ b/.gitignore @@ -19,10 +19,11 @@ src/main/java/Demo.java /nbbuild/ /dist/ nbproject -build.xml +build.xml .DS_Store /_lib /gradlew_release.cmd /gradle_localOverride.cmd /gradlew_updateWrapper.cmd /gradlew_repairHeaders.cmd +/.nb-gradle/profiles/private/ \ No newline at end of file diff --git a/src/main/java/jfxtras/labs/map/CoordinatesConverter.java b/src/main/java/jfxtras/labs/map/CoordinatesConverter.java index 3be284a79..90ffcb98c 100644 --- a/src/main/java/jfxtras/labs/map/CoordinatesConverter.java +++ b/src/main/java/jfxtras/labs/map/CoordinatesConverter.java @@ -50,7 +50,6 @@ private static int getZoom(Zoomable zoomable){ return zoomable.zoomProperty().get(); } - @Deprecated public static Coordinate toCoordinate(Point mapPoint, Moveable controller) { Dimension dim = new Dimension(controller.getMapWidth(), controller.getMapHeight()); Point center = controller.getCenter(); diff --git a/src/main/java/jfxtras/labs/map/MapPane.java b/src/main/java/jfxtras/labs/map/MapPane.java index 37a76406b..92ab66fc4 100644 --- a/src/main/java/jfxtras/labs/map/MapPane.java +++ b/src/main/java/jfxtras/labs/map/MapPane.java @@ -392,14 +392,11 @@ public void zoomOut(Point mapPoint) { updateZoom(zoom.get() - 1, mapPoint); } - public void setZoom(int nextZoom) { -// Point mapPoint = createMapCenterPoint(); -// updateZoom(nextZoom, mapPoint); + private void setZoom(int nextZoom) { zoom.set(nextZoom); } - @Override - public void updateZoom(int nextZoom) { + private void updateZoom(int nextZoom) { Point mapPoint = createMapCenterPoint(); updateZoom(nextZoom, mapPoint, zoomCoordinateCache.getZoomCoordinate()); } @@ -672,9 +669,11 @@ private class ZoomChangeListener implements ChangeListener{ public void changed(ObservableValue ov, Number oldVal, Number newVal) { if(oldVal != null){ - Coordinate c = getCoordinate(createMapCenterPoint(), oldVal.intValue()); + int oldZoomVal = oldVal.intValue(); + Coordinate c = getCoordinate(createMapCenterPoint(), oldZoomVal); zoomCoordinateCache.setZoomCoordinate(c); - updateZoom(newVal.intValue()); + int newZoomVal = newVal.intValue(); + updateZoom(newZoomVal); } } diff --git a/src/main/java/jfxtras/labs/map/ZoomControlFactory.java b/src/main/java/jfxtras/labs/map/ZoomControlFactory.java index 9a7d60671..7fe9c5f0d 100644 --- a/src/main/java/jfxtras/labs/map/ZoomControlFactory.java +++ b/src/main/java/jfxtras/labs/map/ZoomControlFactory.java @@ -32,7 +32,6 @@ import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.control.Button; -import javafx.scene.control.Slider; import javafx.scene.control.Tooltip; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; @@ -46,11 +45,13 @@ */ public class ZoomControlFactory { + private static final int GAP = 5; + private static final String ZOOM_LEVEL = "Zoom to level "; protected Zoomable zoomable; - private Slider zoomSlider; + private ZoomSlider zoomSlider; private Button zoomInButton; @@ -62,8 +63,7 @@ public Pane create(Zoomable zoomable) { this.zoomable = zoomable; - ZoomSliderFactory zoomSliderFactory = new ZoomSliderFactory(zoomable); - zoomSlider = zoomSliderFactory.create(); + zoomSlider = new ZoomSlider(zoomable); zoomSlider.valueProperty().addListener(new ZoomSliderChangeListener(zoomable)); @@ -81,7 +81,7 @@ public Pane create(Zoomable zoomable) { zoomable.zoomProperty().addListener(new ZoomChangeListener()); - Pane pane = new VBox(); + Pane pane = new VBox(GAP); pane.getChildren().add(zoomInButton); pane.getChildren().add(zoomSlider); pane.getChildren().add(zoomOutButton); @@ -130,7 +130,9 @@ private class ZoomMinChangeListener implements ChangeListener { public void changed(ObservableValue ov, Number oldVal, Number newVal) { ignore = true; - zoomSlider.setMin(newVal.doubleValue()); + double min = newVal.doubleValue(); + zoomSlider.adjustScale(min, zoomSlider.getMax()); + zoomSlider.setMin(min); ignore = false; } } @@ -141,7 +143,9 @@ private class ZoomMaxChangeListener implements ChangeListener { public void changed(ObservableValue ov, Number oldVal, Number newVal) { ignore = true; - zoomSlider.setMax(newVal.doubleValue()); + double max = newVal.doubleValue(); + zoomSlider.adjustScale(zoomSlider.getMin(), max); + zoomSlider.setMax(max); ignore = false; } } @@ -155,10 +159,10 @@ public ZoomSliderChangeListener(Zoomable zoomable) { } @Override - public void changed(ObservableValue ov, Number old_val, Number new_val) { + public void changed(ObservableValue ov, Number oldVal, Number newVal) { if(!ignore){ -// zoomable.updateZoom(new_val.intValue()); - zoomable.zoomProperty().set(new_val.intValue()); + int newZoom = newVal.intValue(); + zoomable.zoomProperty().set(newZoom); } } } diff --git a/src/main/java/jfxtras/labs/map/ZoomSliderFactory.java b/src/main/java/jfxtras/labs/map/ZoomSlider.java similarity index 72% rename from src/main/java/jfxtras/labs/map/ZoomSliderFactory.java rename to src/main/java/jfxtras/labs/map/ZoomSlider.java index 7e983e10e..a4e4c3c00 100644 --- a/src/main/java/jfxtras/labs/map/ZoomSliderFactory.java +++ b/src/main/java/jfxtras/labs/map/ZoomSlider.java @@ -33,31 +33,31 @@ import javafx.scene.control.Slider; /** - * Factory for the zoom slider. + * The zoom slider. * * @author Mario Schroeder */ -public class ZoomSliderFactory { +public class ZoomSlider extends Slider{ - private Zoomable zoomable; - public ZoomSliderFactory(Zoomable zoomable) { - this.zoomable = zoomable; - } - - protected Slider create() { - Slider slider = new Slider(); - slider.setOrientation(Orientation.VERTICAL); - slider.setShowTickLabels(true); - slider.setShowTickMarks(true); - slider.setMajorTickUnit(1.0); - slider.setMinorTickCount(0); - slider.setSnapToTicks(true); + public ZoomSlider(Zoomable zoomable) { - slider.setValue(zoomable.zoomProperty().get()); - slider.setMin(zoomable.minZoomProperty().get()); - slider.setMax(zoomable.maxZoomProperty().get()); + setOrientation(Orientation.VERTICAL); + setShowTickLabels(true); + setShowTickMarks(true); + setSnapToTicks(true); + setMajorTickUnit(1.0); + setMinorTickCount(0); + setBlockIncrement(1); + + setValue(zoomable.zoomProperty().get()); + setMin(zoomable.minZoomProperty().get()); + setMax(zoomable.maxZoomProperty().get()); + } - return slider; + public void adjustScale(double min, double max){ + double diff = max-min; + setPrefHeight(diff*5); + } } diff --git a/src/main/java/jfxtras/labs/map/Zoomable.java b/src/main/java/jfxtras/labs/map/Zoomable.java index ca7e9ff03..4c71f599d 100644 --- a/src/main/java/jfxtras/labs/map/Zoomable.java +++ b/src/main/java/jfxtras/labs/map/Zoomable.java @@ -46,12 +46,6 @@ public interface Zoomable { SimpleIntegerProperty zoomProperty(); - /** - * Updates the value of the zoom. - * @param zoom - */ - void updateZoom(int zoom); - /** * zoom in at specific point * @param point diff --git a/src/test/java/jfxtras/labs/map/MapTrial1.java b/src/test/java/jfxtras/labs/map/MapTrial1.java index e8a52a1fd..1e442b36b 100644 --- a/src/test/java/jfxtras/labs/map/MapTrial1.java +++ b/src/test/java/jfxtras/labs/map/MapTrial1.java @@ -68,8 +68,8 @@ public void start(Stage stage) throws Exception { TileSource tileSource = factory.create(dir.getPath()); map.setTileSource(tileSource); - map.setZoom(7); map.setDisplayPositionByLatLon(52.4, 5.9); + map.zoomProperty().set(7); Scene scene = new Scene(root);