diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/FixesAndTails.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/FixesAndTails.java index d44a21eff7b..757f9bb8d8c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/FixesAndTails.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/FixesAndTails.java @@ -699,7 +699,9 @@ public class FixesAndTails { protected void searchMinMaxDetailValue(CompetitorDTO competitor) { Integer startIndex = null; - Double min = null; + double min = 0; + boolean minSet = false; + int minIndex = -1; // Check if the previously found minimum is still shown and use its value if (minDetailValueFix.containsKey(competitor)) { int minFix = minDetailValueFix.get(competitor); @@ -708,10 +710,13 @@ public class FixesAndTails { startIndex = getFirstShownFix(competitor); } else if (minFix < fixes.get(competitor).size() && fixes.get(competitor).get(minFix).detailValue != null) { min = fixes.get(competitor).get(minFix).detailValue; + minSet = true; } } - Double max = null; + double max = 0; + boolean maxSet = false; + int maxIndex = -1; // Check if the previously found maximum is still shown and use its value if (maxDetailValueFix.containsKey(competitor)) { int maxFix = maxDetailValueFix.get(competitor); @@ -724,6 +729,7 @@ public class FixesAndTails { } } else if (maxFix < fixes.get(competitor).size() && fixes.get(competitor).get(maxFix).detailValue != null) { max = fixes.get(competitor).get(maxFix).detailValue; + maxSet = true; } } @@ -743,7 +749,7 @@ public class FixesAndTails { && lastShownFix.get(competitor).get() != null && lastShownFix.get(competitor).get() != -1 ? lastShownFix.get(competitor).get() + 1 : fixes.get(competitor).size(); - + for (int i = startIndex; i < end; i++) { Double value; try { @@ -752,18 +758,27 @@ public class FixesAndTails { break; } if (value != null) { - if (min == null) min = value; - if (max == null) max = value; + if (!minSet) { + min = value; + minSet = true; + } + if (!maxSet) { + max = value; + maxSet = true; + } if (value <= min) { min = value; - minDetailValueFix.put(competitor, i); + minIndex = i; } if (value >= max) { max = value; - maxDetailValueFix.put(competitor, i); + maxIndex = i; } } } + + if (minIndex > -1) minDetailValueFix.put(competitor, minIndex); + if (maxIndex > -1) maxDetailValueFix.put(competitor, maxIndex); lastSearchedFix.put(competitor, end - 1); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java index 26540247227..5f3eeb08776 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/shared/racemap/RaceMap.java @@ -165,7 +165,7 @@ import com.sap.sse.gwt.client.shared.components.SettingsDialogComponent; import com.sap.sse.gwt.client.shared.settings.ComponentContext; public class RaceMap extends AbstractCompositeComponent implements TimeListener, CompetitorSelectionChangeListener, - RaceTimesInfoProviderListener, TailFactory, RequiresDataInitialization, RequiresResize, QuickRankProvider { + RaceTimesInfoProviderListener, TailFactory, ColorMapperChangedListener, RequiresDataInitialization, RequiresResize, QuickRankProvider { /* Line colors */ static final String ADVANTAGE_LINE_COLOR = "#ff9900"; // orange static final String START_LINE_COLOR = "#ffffff"; @@ -2514,15 +2514,8 @@ public class RaceMap extends AbstractCompositeComponent impleme } if (selectedDetailType != previous) { selectedDetailTypeChanged = true; // Causes an overwrite of what are now wrong detailValues - fixesAndTails.resetColorMapper(new ValueRangeFlexibleBoundaries(0, 1, 0.2, 0.5), new ColorMapperChangedListener() { - @Override - public void onColorMappingChanged() { - for (CompetitorDTO competitor : competitorSelection.getAllCompetitors()) { - MultiColorPolylineOptions options = createTailStyle(competitor, displayHighlighted(competitor)); - fixesAndTails.getTail(competitor).setOptions(options); - } - } - }); + fixesAndTails.resetColorMapper(new ValueRangeFlexibleBoundaries(0, 1, 0.2, 0.5), RaceMap.this); + redraw(); } } }); @@ -3054,6 +3047,14 @@ public class RaceMap extends AbstractCompositeComponent impleme FilterSet> newFilterSet) { // nothing to do; if the list of filtered competitors has changed, a separate call to filteredCompetitorsListChanged will occur } + + @Override + public void onColorMappingChanged() { + for (CompetitorDTO competitor : competitorSelection.getAllCompetitors()) { + MultiColorPolylineOptions options = createTailStyle(competitor, displayHighlighted(competitor)); + fixesAndTails.getTail(competitor).setOptions(options); + } + } @Override public MultiColorPolylineOptions createTailStyle(CompetitorDTO competitor, DisplayMode displayMode) {