This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 98dd50f7ab7e1ed39f6c257fa36593e43e7bb570
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Fri May 27 10:58:55 2022 +0200

    Revert commit 58cd2d406c5703fc029b0ad402bdbec30401e662 (removal of 
`sliceExtentProperty`) but without public access for now.
    We need this property for taking in account the slice selected by the 
slider.
---
 .../apache/sis/gui/coverage/CoverageCanvas.java    | 86 +++++++++++++++++-----
 .../apache/sis/gui/coverage/CoverageControls.java  | 11 +--
 2 files changed, 69 insertions(+), 28 deletions(-)

diff --git 
a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java
 
b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java
index acb53c1a59..67bd1a3b66 100644
--- 
a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java
+++ 
b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageCanvas.java
@@ -161,6 +161,16 @@ public class CoverageCanvas extends MapCanvasAWT {
      */
     private boolean isCoverageAdjusting;
 
+    /**
+     * A subspace of the grid coverage extent where all dimensions except two 
have a size of 1 cell.
+     * May be {@code null} if the grid coverage has only two dimensions with a 
size greater than 1 cell.
+     *
+     * @see #getSliceExtent()
+     * @see #setSliceExtent(GridExtent)
+     * @see GridCoverage#render(GridExtent)
+     */
+    final ObjectProperty<GridExtent> sliceExtentProperty;
+
     /**
      * The interpolation method to use for resampling the image.
      *
@@ -243,9 +253,11 @@ public class CoverageCanvas extends MapCanvasAWT {
         derivedImages         = new EnumMap<>(Stretching.class);
         resourceProperty      = new SimpleObjectProperty<>(this, "resource");
         coverageProperty      = new SimpleObjectProperty<>(this, "coverage");
+        sliceExtentProperty   = new SimpleObjectProperty<>(this, 
"sliceExtent");
         interpolationProperty = new SimpleObjectProperty<>(this, 
"interpolation", data.processor.getInterpolation());
         resourceProperty     .addListener((p,o,n) -> onPropertySpecified(n, 
null, coverageProperty));
         coverageProperty     .addListener((p,o,n) -> onPropertySpecified(null, 
n, resourceProperty));
+        sliceExtentProperty  .addListener((p,o,n) -> 
onPropertySpecified(getResource(), getCoverage(), null));
         interpolationProperty.addListener((p,o,n) -> 
onInterpolationSpecified(n));
     }
 
@@ -342,21 +354,28 @@ public class CoverageCanvas extends MapCanvasAWT {
     }
 
     /**
-     * Sets both resource and coverage properties together. Typically only one 
of those properties is non-null.
-     * If both are non-null, then it is caller's responsibility to ensure that 
they are consistent.
+     * Returns a subspace of the grid coverage extent where all dimensions 
except two have a size of 1 cell.
+     *
+     * @return subspace of the grid coverage extent where all dimensions 
except two have a size of 1 cell.
+     *
+     * @see #sliceExtentProperty
+     * @see GridCoverage#render(GridExtent)
      */
-    final void setCoverage(final GridCoverageResource resource, final 
GridCoverage coverage) {
-        if (getResource() != resource || getCoverage() != coverage) {
-            final boolean p = isCoverageAdjusting;
-            try {
-                isCoverageAdjusting = true;
-                setResource(resource);
-                setCoverage(coverage);
-            } finally {
-                isCoverageAdjusting = p;
-            }
-            onPropertySpecified(resource, coverage, null);
-        }
+    final GridExtent getSliceExtent() {
+        return sliceExtentProperty.get();
+    }
+
+    /**
+     * Sets a subspace of the grid coverage extent where all dimensions except 
two have a size of 1 cell.
+     *
+     * @param  sliceExtent  subspace of the grid coverage extent where all 
dimensions except two have a size of 1 cell.
+     *
+     * @see #sliceExtentProperty
+     * @see GridCoverage#render(GridExtent)
+     */
+    final void setSliceExtent(final GridExtent sliceExtent) {
+        sliceExtentProperty.set(sliceExtent);
+        // Will indirectly invoke `onPropertySpecified(…)`.
     }
 
     /**
@@ -454,6 +473,39 @@ public class CoverageCanvas extends MapCanvasAWT {
         clearIsolines();
     }
 
+    /**
+     * Sets both resource and coverage properties together. Typically only one 
of those properties is non-null.
+     * If both are non-null, then it is caller's responsibility to ensure that 
they are consistent.
+     *
+     * @param  request  the resource or coverage to set, or {@code null} for 
clearing the view.
+     */
+    final void setImage(final ImageRequest request) {
+        final GridCoverageResource resource;
+        final GridCoverage coverage;
+        final GridExtent sliceExtent;
+        if (request != null) {
+            resource    = request.resource;
+            coverage    = request.getCoverage().orElse(null);
+            sliceExtent = request.getSliceExtent().orElse(null);
+        } else {
+            resource    = null;
+            coverage    = null;
+            sliceExtent = null;
+        }
+        if (getResource() != resource || getCoverage() != coverage || 
getSliceExtent() != sliceExtent) {
+            final boolean p = isCoverageAdjusting;
+            try {
+                isCoverageAdjusting = true;
+                setResource(resource);
+                setCoverage(coverage);
+                setSliceExtent(sliceExtent);
+            } finally {
+                isCoverageAdjusting = p;
+            }
+            onPropertySpecified(resource, coverage, null);
+        }
+    }
+
     /**
      * Invoked when a new value has been set on {@link #resourceProperty} or 
{@link #coverageProperty}.
      * This method fetches information such as the grid geometry and sample 
dimensions in a background thread.
@@ -630,11 +682,8 @@ public class CoverageCanvas extends MapCanvasAWT {
 
         /**
          * The two-dimensional slice to display.
-         *
-         * @todo We do not yet have a mechanism for computing it.
-         *       May become a non-static field in a future version.
          */
-        private static final GridExtent sliceExtent = null;
+        private final GridExtent sliceExtent;
 
         /**
          * Value of {@link CoverageCanvas#data} at the time this worker has 
been initialized.
@@ -718,6 +767,7 @@ public class CoverageCanvas extends MapCanvasAWT {
             resource           = canvas.getResource();
             coverage           = canvas.getCoverage();
             data               = canvas.data.clone();
+            sliceExtent        = canvas.getSliceExtent();
             objectiveCRS       = canvas.getObjectiveCRS();
             objectiveToDisplay = canvas.getObjectiveToDisplay();
             displayBounds      = canvas.getDisplayBounds();
diff --git 
a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java
 
b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java
index 9168dec7f0..76f630a8ca 100644
--- 
a/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java
+++ 
b/application/sis-javafx/src/main/java/org/apache/sis/gui/coverage/CoverageControls.java
@@ -181,15 +181,6 @@ final class CoverageControls extends ViewAndControls {
      */
     @Override
     final void load(final ImageRequest request) {
-        final GridCoverageResource resource;
-        final GridCoverage coverage;
-        if (request != null) {
-            resource = request.resource;
-            coverage = request.getCoverage().orElse(null);
-        } else {
-            resource = null;
-            coverage = null;
-        }
-        view.setCoverage(resource, coverage);
+        view.setImage(request);
     }
 }

Reply via email to