You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2026/05/04 10:16:28 UTC
(sis) 01/01: Fix the position of preferred CRS when the list is almost empty.
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 6aa4c1d4b4c3c2cdcc8fc52519689c996296b0ee
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Mon May 4 11:44:50 2026 +0200
Fix the position of preferred CRS when the list is almost empty.
---
.../gui/referencing/RecentReferenceSystems.java | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/RecentReferenceSystems.java b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/RecentReferenceSystems.java
index 10cc7bdaba..23938a4c48 100644
--- a/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/RecentReferenceSystems.java
+++ b/optional/src/org.apache.sis.gui/main/org/apache/sis/gui/referencing/RecentReferenceSystems.java
@@ -89,6 +89,8 @@ public class RecentReferenceSystems {
/**
* Number of reference systems to always show before all other reference systems.
* They are the native of preferred reference system for the visualized data.
+ *
+ * @see #numCoreItems(List)
*/
private static final int NUM_CORE_ITEMS = 1;
@@ -420,6 +422,16 @@ public class RecentReferenceSystems {
refreshObservedReferenceSystemList();
}
+ /**
+ * Returns the number of reference systems to always show before all other reference systems.
+ * This is {@link #NUM_CORE_ITEMS}, but taking in account the case when the list is empty.
+ */
+ private static int numCoreItems(final List<?> items) {
+ int n = Math.min(items.size(), NUM_CORE_ITEMS);
+ if (n != 0 && items.get(n-1) == OTHER) n--;
+ return n;
+ }
+
/**
* Invoked when a new reference system is selected and has not been found in the current list of systems.
* It may be, for example, a system selected among the content of a registry shown by {@link CRSChooser}.
@@ -429,7 +441,7 @@ public class RecentReferenceSystems {
*/
final synchronized void addSelectedItem(final ReferenceSystem system) {
if (isAuthoritative(system)) {
- systemsOrCodes.add(Math.min(systemsOrCodes.size(), NUM_CORE_ITEMS), system);
+ systemsOrCodes.add(numCoreItems(systemsOrCodes), system);
refreshObservedReferenceSystemList();
}
}
@@ -630,7 +642,7 @@ public class RecentReferenceSystems {
final var systems = new ArrayList<ReferenceSystem>(Math.min(NUM_SHOWN_ITEMS, n) + NUM_OTHER_ITEMS);
for (int i=0; i<n; i++) {
final var system = (ReferenceSystem) systemsOrCodes.get(i);
- if (filter == null || filter.test(system)) {
+ if (system != OTHER && (filter == null || filter.test(system))) {
if (i < NUM_CORE_ITEMS || Utils.intersects(domain, system)) {
if (Utils.isIgnoreable(system)) continue; // Ignore "Computer display" CRS.
systems.add(system);
@@ -670,7 +682,7 @@ public class RecentReferenceSystems {
* is added. The first occurrence of duplicated values is kept, which will result in above-cited
* order as the priority order where to insert the CRS.
*/
- final int insertAt = Math.min(systemsOrCodes.size(), NUM_CORE_ITEMS);
+ final int insertAt = numCoreItems(systemsOrCodes);
final List<ReferenceSystem> selected = getSelectedItems();
systemsOrCodes.addAll(insertAt, selected);
systemsOrCodes.addAll(insertAt + selected.size(), referenceSystems);
@@ -827,7 +839,7 @@ public class RecentReferenceSystems {
}
}
}
- items.add(Math.min(items.size(), NUM_CORE_ITEMS), newValue);
+ items.add(numCoreItems(items), newValue);
notifyChanges();
}
}
@@ -864,7 +876,7 @@ public class RecentReferenceSystems {
break;
}
}
- items.add(Math.min(items.size(), NUM_CORE_ITEMS), newValue);
+ items.add(numCoreItems(items), newValue);
/*
* Notify the user-specified listeners. It will typically starts a background process.
* We test (oldValue != newValue) again because `newValue` may have been replaced.