Introduced displayMode to switch between three states DEFAULT, SELECTED, NOT_SELECTED. Displays boats accordingly.

This commit is contained in:
Radeck authored and Leon Radeck committed 2017-06-03 17:55:53 +02:00
1 parent 9c471a54eb
commit 640097a251
11 files changed
+108 -46

No files matched your search

@@ -56,6 +56,9 @@ public class BoatOverlay extends CanvasOverlayV3 {
private Integer lastHeight;
private Size lastScale;
private Color lastColor;
public static enum DisplayMode { DEFAULT, SELECTED, NOT_SELECTED };
private DisplayMode displayMode;
/**
* Remembers the old drawing angle as passed to {@link #setCanvasRotation(double)} to minimize rotation angle upon
@@ -91,7 +94,7 @@ public class BoatOverlay extends CanvasOverlayV3 {
setCanvasSize(canvasWidth, canvasHeight);
}
if (needToDraw(boatFix.legType, boatFix.tack, isSelected(), canvasWidth, canvasHeight, boatSizeScaleFactor, color)) {
boatVectorGraphics.drawBoatToCanvas(getCanvas().getContext2d(), boatFix.legType, boatFix.tack, isSelected(),
boatVectorGraphics.drawBoatToCanvas(getCanvas().getContext2d(), boatFix.legType, boatFix.tack, getDisplayMode(),
canvasWidth, canvasHeight, boatSizeScaleFactor, color);
lastLegType = boatFix.legType;
lastTack = boatFix.tack;
@@ -186,4 +189,12 @@ public class BoatOverlay extends CanvasOverlayV3 {
}
}
public DisplayMode getDisplayMode() {
return displayMode;
}
public void setDisplayMode(DisplayMode displayMode) {
this.displayMode = displayMode;
}
}
@@ -101,6 +101,7 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.WindSourceTypeFormatter;
import com.sap.sailing.gwt.ui.client.shared.filter.QuickRankProvider;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceCompetitorSet.CompetitorsForRaceDefinedListener;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings.HelpLineTypes;
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings.ZoomTypes;
@@ -1915,12 +1916,12 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
if (boatOverlay == null) {
boatOverlay = createBoatOverlay(RaceMapOverlaysZIndexes.BOATS_ZINDEX, competitorDTO, displayHighlighted(competitorDTO));
boatOverlays.put(competitorDTO, boatOverlay);
boatOverlay.setSelected(displayHighlighted(competitorDTO));
boatOverlay.setDisplayMode(displayHighlighted(competitorDTO));
boatOverlay.setBoatFix(lastBoatFix, timeForPositionTransitionMillis);
boatOverlay.addToMap();
} else {
usedExistingCanvas = true;
boatOverlay.setSelected(displayHighlighted(competitorDTO));
boatOverlay.setDisplayMode(displayHighlighted(competitorDTO));
boatOverlay.setBoatFix(lastBoatFix, timeForPositionTransitionMillis);
boatOverlay.draw();
}
@@ -1929,8 +1930,29 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
return usedExistingCanvas;
}
private boolean displayHighlighted(CompetitorDTO competitorDTO) {
return !settings.isShowOnlySelectedCompetitors() && competitorSelection.isSelected(competitorDTO);
private DisplayMode displayHighlighted(CompetitorDTO competitorDTO) {
boolean competitorisSelected = competitorSelection.isSelected(competitorDTO);
if(!settings.isShowOnlySelectedCompetitors()){
if(competitorisSelected){
return DisplayMode.SELECTED;
}
else{
if(isSomeOtherCompetitorSelected()){
return DisplayMode.NOT_SELECTED;
}
else{
return DisplayMode.DEFAULT;
}
}
}
else{
return competitorSelection.isSelected(competitorDTO) ? DisplayMode.SELECTED : DisplayMode.DEFAULT;
}
}
private boolean isSomeOtherCompetitorSelected(){
return Util.size(competitorSelection.getSelectedCompetitors()) > 0;
}
private class CourseMarkInfoWindowClickHandler implements ClickMapHandler {
@@ -1987,9 +2009,9 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
return infoText.toString();
}
private BoatOverlay createBoatOverlay(int zIndex, final CompetitorDTO competitorDTO, boolean highlighted) {
private BoatOverlay createBoatOverlay(int zIndex, final CompetitorDTO competitorDTO, DisplayMode displayMode) {
final BoatOverlay boatCanvas = new BoatOverlay(map, zIndex, competitorDTO, competitorSelection.getColor(competitorDTO, raceIdentifier), coordinateSystem);
boatCanvas.setSelected(highlighted);
boatCanvas.setDisplayMode(displayMode);
boatCanvas.addClickHandler(new ClickMapHandler() {
@Override
public void onEvent(ClickMapEvent event) {
@@ -2421,7 +2443,7 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
// only change highlighting
BoatOverlay boatCanvas = boatOverlays.get(competitor);
if (boatCanvas != null) {
boatCanvas.setSelected(displayHighlighted(competitor));
boatCanvas.setDisplayMode(displayHighlighted(competitor));
boatCanvas.draw();
showCompetitorInfoOnMap(timer.getTime(), -1, competitorSelection.getSelectedFilteredCompetitors());
} else {
@@ -2431,6 +2453,7 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
timeChanged(timer.getTime(), null);
}
}
// Now update tails for all competitors because selection change may also affect all unselected competitors
for (CompetitorDTO oneOfAllCompetitors : competitorSelection.getAllCompetitors()) {
Polyline tail = fixesAndTails.getTail(oneOfAllCompetitors);
@@ -2439,6 +2462,7 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
tail.setOptions(newOptions);
}
}
timeChanged(timer.getTime(), null);
// Trigger auto-zoom if needed
RaceMapZoomSettings zoomSettings = settings.getZoomSettings();
if (!zoomSettings.containsZoomType(ZoomTypes.NONE) && zoomSettings.isZoomToSelectedCompetitors()) {
@@ -2471,7 +2495,7 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
// "lowlight" currently selected competitor
BoatOverlay boatCanvas = boatOverlays.get(competitor);
if (boatCanvas != null) {
boatCanvas.setSelected(displayHighlighted(competitor));
boatCanvas.setDisplayMode(displayHighlighted(competitor));
boatCanvas.draw();
}
showCompetitorInfoOnMap(timer.getTime(), -1, competitorSelection.getSelectedFilteredCompetitors());
@@ -2736,19 +2760,19 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
}
@Override
public PolylineOptions createTailStyle(CompetitorDTO competitor, boolean isHighlighted) {
public PolylineOptions createTailStyle(CompetitorDTO competitor, DisplayMode displayMode) {
PolylineOptions options = PolylineOptions.newInstance();
options.setClickable(true);
options.setGeodesic(true);
options.setStrokeOpacity(1.0);
boolean noCompetitorSelected = Util.isEmpty(competitorSelection.getSelectedCompetitors());
if (isHighlighted || noCompetitorSelected || getSettings().isShowOnlySelectedCompetitors()) {
if (displayMode == DisplayMode.SELECTED || noCompetitorSelected || getSettings().isShowOnlySelectedCompetitors()) {
options.setStrokeColor(competitorSelection.getColor(competitor, raceIdentifier).getAsHtml());
} else {
options.setStrokeColor(LOWLIGHTED_TAIL_COLOR.getAsHtml());
options.setStrokeOpacity(LOWLIGHTED_TAIL_OPACITY);
}
if (isHighlighted) {
if (displayMode == DisplayMode.SELECTED) {
options.setStrokeWeight(2);
} else {
options.setStrokeWeight(1);
@@ -6,6 +6,7 @@ import com.google.gwt.maps.client.base.LatLng;
import com.google.gwt.maps.client.overlays.Polyline;
import com.google.gwt.maps.client.overlays.PolylineOptions;
import com.sap.sailing.domain.common.dto.CompetitorDTO;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
/**
* Creates tails and their styles for the map.
@@ -16,5 +17,5 @@ import com.sap.sailing.domain.common.dto.CompetitorDTO;
public interface TailFactory {
Polyline createTail(CompetitorDTO competitor, List<LatLng> points);
PolylineOptions createTailStyle(CompetitorDTO competitor, boolean isHighlighted);
PolylineOptions createTailStyle(CompetitorDTO competitor, DisplayMode displayMode);
}
@@ -9,6 +9,7 @@ import com.google.gwt.maps.client.base.Size;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.domain.common.LegType;
import com.sap.sailing.domain.common.Tack;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
import com.sap.sse.common.Color;
/**
@@ -55,7 +56,7 @@ public abstract class BoatClassVectorGraphics {
return Collections.unmodifiableSet(compatibleBoatClasses);
}
protected abstract void drawBoat(Context2d ctx, boolean isSelected, String color);
protected abstract void drawBoat(Context2d ctx, DisplayMode displayMode, String color);
protected abstract void drawDownwindPortTackSails(Context2d ctx);
@@ -111,14 +112,14 @@ public abstract class BoatClassVectorGraphics {
}
}
public void drawBoatToCanvas(Context2d ctx, LegType legType, Tack tack, boolean isSelected, double width,
public void drawBoatToCanvas(Context2d ctx, LegType legType, Tack tack, DisplayMode displayMode, double width,
double height, Size scaleFactor, Color color) {
ctx.save();
ctx.clearRect(0, 0, width, height);
ctx.translate(width / 2.0, height / 2.0);
ctx.scale(scaleFactor.getWidth(), scaleFactor.getHeight());
ctx.translate(-hullLengthInPx / 2.0, -beamInPx / 2.0);
drawBoat(ctx, isSelected, color.getAsHtml());
drawBoat(ctx, displayMode, color.getAsHtml());
drawSails(ctx, legType, tack);
ctx.restore();
}
@@ -2,6 +2,7 @@ package com.sap.sailing.gwt.ui.shared.racemap;
import com.google.gwt.canvas.dom.client.Context2d;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
public class DinghyWithSpinnakerVectorGraphics extends BoatClassVectorGraphics {
@@ -10,18 +11,28 @@ public class DinghyWithSpinnakerVectorGraphics extends BoatClassVectorGraphics {
}
@Override
protected void drawBoat(Context2d ctx, boolean isSelected, String color) {
protected void drawBoat(Context2d ctx, DisplayMode displayMode, String color) {
ctx.translate(0,-823);
//draw hull
if(isSelected) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
//draw cockpit
switch (displayMode){
case DEFAULT:
ctx.setFillStyle ("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
break;
case SELECTED:
ctx.setFillStyle (color);
ctx.setStrokeStyle(color);
break;
case NOT_SELECTED:
ctx.setGlobalAlpha(0.1);
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
break;
}
ctx.setLineWidth(1.0);
ctx.beginPath();
ctx.moveTo(7,871);
@@ -32,13 +43,21 @@ public class DinghyWithSpinnakerVectorGraphics extends BoatClassVectorGraphics {
ctx.stroke();
//draw cockpit
if(isSelected) {
ctx.setFillStyle ("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
} else {
switch (displayMode){
case DEFAULT:
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
break;
case SELECTED:
ctx.setFillStyle ("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
break;
case NOT_SELECTED:
ctx.setFillStyle ("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
break;
}
ctx.beginPath();
ctx.moveTo(15,970);
ctx.lineTo(14,899);
@@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.shared.racemap;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.Context2d.LineJoin;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
public class Extreme40VectorGraphics extends BoatClassVectorGraphics {
@@ -11,9 +12,9 @@ public class Extreme40VectorGraphics extends BoatClassVectorGraphics {
}
@Override
protected void drawBoat(Context2d ctx, boolean isSelected, String color) {
protected void drawBoat(Context2d ctx, DisplayMode displayMode, String color) {
// outer net
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -36,7 +37,7 @@ public class Extreme40VectorGraphics extends BoatClassVectorGraphics {
ctx.stroke();
// inner net
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
} else {
@@ -59,7 +60,7 @@ public class Extreme40VectorGraphics extends BoatClassVectorGraphics {
ctx.stroke();
// hull - left and right part
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.shared.racemap;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.Context2d.LineJoin;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
/**
* Graphics for a GC32 - currently same as {@link Extreme40VectorGraphics} but
@@ -17,9 +18,9 @@ public class GC32VectorGraphics extends BoatClassVectorGraphics {
}
@Override
protected void drawBoat(Context2d ctx, boolean isSelected, String color) {
protected void drawBoat(Context2d ctx, DisplayMode displayMode, String color) {
// outer net
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -42,7 +43,7 @@ public class GC32VectorGraphics extends BoatClassVectorGraphics {
ctx.stroke();
// inner net
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
} else {
@@ -65,7 +66,7 @@ public class GC32VectorGraphics extends BoatClassVectorGraphics {
ctx.stroke();
// hull - left and right part
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -2,6 +2,7 @@ package com.sap.sailing.gwt.ui.shared.racemap;
import com.google.gwt.canvas.dom.client.Context2d;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
public class KeelBoatWithGennakerVectorGraphics extends BoatClassVectorGraphics {
@@ -10,12 +11,12 @@ public class KeelBoatWithGennakerVectorGraphics extends BoatClassVectorGraphics
}
@Override
protected void drawBoat(Context2d ctx, boolean isSelected, String color) {
protected void drawBoat(Context2d ctx, DisplayMode displayMode, String color) {
ctx.translate(0,-803);
//draw hull
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -53,7 +54,7 @@ public class KeelBoatWithGennakerVectorGraphics extends BoatClassVectorGraphics
ctx.stroke();
//draw cockpit
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle ("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
} else {
@@ -2,6 +2,7 @@ package com.sap.sailing.gwt.ui.shared.racemap;
import com.google.gwt.canvas.dom.client.Context2d;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
public class LaserVectorGraphics extends BoatClassVectorGraphics {
@@ -10,9 +11,9 @@ public class LaserVectorGraphics extends BoatClassVectorGraphics {
}
@Override
protected void drawBoat(Context2d ctx, boolean isSelected, String color) {
protected void drawBoat(Context2d ctx, DisplayMode displayMode, String color) {
// outer part of the hull
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -33,7 +34,7 @@ public class LaserVectorGraphics extends BoatClassVectorGraphics {
ctx.stroke();
// inner part of the hull
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle ("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
} else {
@@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.shared.racemap;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.Context2d.LineJoin;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
public class SmallMultihullVectorGraphics extends BoatClassVectorGraphics {
@@ -11,9 +12,9 @@ public class SmallMultihullVectorGraphics extends BoatClassVectorGraphics {
}
@Override
protected void drawBoat(Context2d ctx, boolean isSelected, String color) {
protected void drawBoat(Context2d ctx, DisplayMode displayMode, String color) {
// outer net
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -37,7 +38,7 @@ public class SmallMultihullVectorGraphics extends BoatClassVectorGraphics {
ctx.stroke();
// inner net
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
} else {
@@ -61,7 +62,7 @@ public class SmallMultihullVectorGraphics extends BoatClassVectorGraphics {
ctx.stroke();
// hull - left and right part
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.shared.racemap;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.Context2d.LineJoin;
import com.sap.sailing.domain.common.BoatClassMasterdata;
import com.sap.sailing.gwt.ui.client.shared.racemap.BoatOverlay.DisplayMode;
public class _49erVectorGraphics extends BoatClassVectorGraphics {
@@ -11,8 +12,8 @@ public class _49erVectorGraphics extends BoatClassVectorGraphics {
}
@Override
protected void drawBoat(Context2d ctx, boolean isSelected, String color) {
if(isSelected) {
protected void drawBoat(Context2d ctx, DisplayMode displayMode, String color) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle(color);
ctx.setStrokeStyle(color);
} else {
@@ -62,7 +63,7 @@ public class _49erVectorGraphics extends BoatClassVectorGraphics {
ctx.fill();
ctx.stroke();
if(isSelected) {
if(displayMode == DisplayMode.SELECTED) {
ctx.setFillStyle ("#FFFFFF");
ctx.setStrokeStyle("#FFFFFF");
} else {