mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 17:36:40 +00:00
added a colorMap to the CompetitorSelectionModel so that each CompetitorSelectionListener can get the same colors for competitors using the method CompetitorSelectionProvider.getColor(CompetitorDTO)
Removed specific color generation method from RaceMap
This commit is contained in:
1 parent
3acab78f5b
commit
df9998a1b3
7 files changed
+30
-21
No files matched your search
@@ -11,11 +11,11 @@
|
|||||||
<link href='images/sap-sailing-app-icon.png' rel='apple-touch-icon-precomposed'>
|
<link href='images/sap-sailing-app-icon.png' rel='apple-touch-icon-precomposed'>
|
||||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700,300italic,400italic,500italic,700italic' rel='stylesheet' type='text/css'>
|
<link href='http://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700,300italic,400italic,500italic,700italic' rel='stylesheet' type='text/css'>
|
||||||
|
|
||||||
<script id="sap-ui-bootstrap"
|
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
|
||||||
type="text/javascript"
|
<script type="text/javascript" src="highcharts/js/highcharts.js"></script>
|
||||||
src="/gwt/sap-ui-core.js"
|
|
||||||
data-sap-ui-theme="sap_platinum"
|
<!-- Optionally, add a highcharts theme file -->
|
||||||
data-sap-ui-libs="sap.ui.commons"></script>
|
<script type="text/javascript" src="highcharts/js/themes/grid.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" language="javascript" src="com.sap.sailing.gwt.ui.RaceBoard/com.sap.sailing.gwt.ui.RaceBoard.nocache.js"></script>
|
<script type="text/javascript" language="javascript" src="com.sap.sailing.gwt.ui.RaceBoard/com.sap.sailing.gwt.ui.RaceBoard.nocache.js"></script>
|
||||||
|
|
||||||
|
|||||||
+1
-6
@@ -670,11 +670,6 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getColorString(CompetitorDTO competitorDTO) {
|
|
||||||
// TODO green no more than 70, red no less than 120
|
|
||||||
return "#" + (Integer.toHexString(competitorDTO.hashCode()) + "000000").substring(0, 4).toUpperCase() + "00";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a polyline for the competitor represented by <code>competitorDTO</code>, taking the fixes from
|
* Creates a polyline for the competitor represented by <code>competitorDTO</code>, taking the fixes from
|
||||||
* {@link #fixes fixes.get(competitorDTO)} and using the fixes starting at time point <code>from</code> (inclusive)
|
* {@link #fixes fixes.get(competitorDTO)} and using the fixes starting at time point <code>from</code> (inclusive)
|
||||||
@@ -716,7 +711,7 @@ public class RaceMap implements TimeListener, CompetitorSelectionChangeListener,
|
|||||||
}
|
}
|
||||||
PolylineOptions options = PolylineOptions.newInstance(
|
PolylineOptions options = PolylineOptions.newInstance(
|
||||||
/* clickable */true, /* geodesic */true);
|
/* clickable */true, /* geodesic */true);
|
||||||
Polyline result = new Polyline(points.toArray(new LatLng[0]), getColorString(competitorDTO), /* width */ 1,
|
Polyline result = new Polyline(points.toArray(new LatLng[0]), competitorSelection.getColor(competitorDTO), /* width */ 1,
|
||||||
/* opacity */0.5, options);
|
/* opacity */0.5, options);
|
||||||
result.addPolylineClickHandler(new PolylineClickHandler() {
|
result.addPolylineClickHandler(new PolylineClickHandler() {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-1
@@ -186,7 +186,7 @@ public class RaceMapResources {
|
|||||||
public double getRealBoatSizeScaleFactor(Size imageSize) {
|
public double getRealBoatSizeScaleFactor(Size imageSize) {
|
||||||
// the possible zoom level range is 0 to 21 (zoom level 0 would show the whole world)
|
// the possible zoom level range is 0 to 21 (zoom level 0 would show the whole world)
|
||||||
int zoomLevel = map == null ? 1 : map.getZoomLevel();
|
int zoomLevel = map == null ? 1 : map.getZoomLevel();
|
||||||
double minScaleFactor = 0.33;
|
double minScaleFactor = 0.45;
|
||||||
double maxScaleFactor = 2.0;
|
double maxScaleFactor = 2.0;
|
||||||
double realBoatSizeScaleFactor = minScaleFactor;
|
double realBoatSizeScaleFactor = minScaleFactor;
|
||||||
// here it would be better to get the boat length from the boat class -> for now we assume a length of 5m
|
// here it would be better to get the boat length from the boat class -> for now we assume a length of 5m
|
||||||
|
|||||||
+13
@@ -18,12 +18,15 @@ public class CompetitorSelectionModel implements CompetitorSelectionProvider {
|
|||||||
|
|
||||||
private final boolean hasMultiSelection;
|
private final boolean hasMultiSelection;
|
||||||
|
|
||||||
|
private final ColorMap<CompetitorDTO> competitorsColorMap;
|
||||||
|
|
||||||
public CompetitorSelectionModel(boolean hasMultiSelection) {
|
public CompetitorSelectionModel(boolean hasMultiSelection) {
|
||||||
super();
|
super();
|
||||||
this.hasMultiSelection = hasMultiSelection;
|
this.hasMultiSelection = hasMultiSelection;
|
||||||
this.allCompetitors = new HashSet<CompetitorDTO>();
|
this.allCompetitors = new HashSet<CompetitorDTO>();
|
||||||
this.selectedCompetitors = new LinkedHashSet<CompetitorDTO>();
|
this.selectedCompetitors = new LinkedHashSet<CompetitorDTO>();
|
||||||
this.listeners = new HashSet<CompetitorSelectionChangeListener>();
|
this.listeners = new HashSet<CompetitorSelectionChangeListener>();
|
||||||
|
this.competitorsColorMap = new ColorMap<CompetitorDTO>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,4 +155,14 @@ public class CompetitorSelectionModel implements CompetitorSelectionProvider {
|
|||||||
remove(oldCompetitorToRemove);
|
remove(oldCompetitorToRemove);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getColor(CompetitorDTO competitor) {
|
||||||
|
if (allCompetitors.contains(competitor)) {
|
||||||
|
return competitorsColorMap.getColorByID(competitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+2
@@ -43,6 +43,8 @@ public interface CompetitorSelectionProvider {
|
|||||||
|
|
||||||
boolean hasMultiSelection();
|
boolean hasMultiSelection();
|
||||||
|
|
||||||
|
String getColor(CompetitorDTO competitor);
|
||||||
|
|
||||||
void addCompetitorSelectionChangeListener(CompetitorSelectionChangeListener listener);
|
void addCompetitorSelectionChangeListener(CompetitorSelectionChangeListener listener);
|
||||||
|
|
||||||
void removeCompetitorSelectionChangeListener(CompetitorSelectionChangeListener listener);
|
void removeCompetitorSelectionChangeListener(CompetitorSelectionChangeListener listener);
|
||||||
|
|||||||
+5
-7
@@ -53,7 +53,6 @@ import com.google.gwt.user.client.ui.Widget;
|
|||||||
import com.sap.sailing.domain.common.DetailType;
|
import com.sap.sailing.domain.common.DetailType;
|
||||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||||
import com.sap.sailing.gwt.ui.client.ColorMap;
|
|
||||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
import com.sap.sailing.gwt.ui.client.CompetitorSelectionChangeListener;
|
||||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||||
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
|
import com.sap.sailing.gwt.ui.client.DetailTypeFormatter;
|
||||||
@@ -93,7 +92,6 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener {
|
|||||||
private final Label title;
|
private final Label title;
|
||||||
private final DeckPanel chart;
|
private final DeckPanel chart;
|
||||||
private final RaceSelectionProvider raceSelectionProvider;
|
private final RaceSelectionProvider raceSelectionProvider;
|
||||||
private final ColorMap<Integer> colorMap;
|
|
||||||
private int stepsToLoad = 100;
|
private int stepsToLoad = 100;
|
||||||
private final StringMessages stringMessages;
|
private final StringMessages stringMessages;
|
||||||
private PlotWithOverview plot;
|
private PlotWithOverview plot;
|
||||||
@@ -124,7 +122,6 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener {
|
|||||||
seriesIsUsed = new HashSet<SeriesHandler>();
|
seriesIsUsed = new HashSet<SeriesHandler>();
|
||||||
competitorID = new ArrayList<CompetitorDTO>();
|
competitorID = new ArrayList<CompetitorDTO>();
|
||||||
markSeriesID = new ArrayList<SeriesHandler>();
|
markSeriesID = new ArrayList<SeriesHandler>();
|
||||||
colorMap = new ColorMap<Integer>();
|
|
||||||
competitorLabels = new HashMap<CompetitorDTO, Widget>();
|
competitorLabels = new HashMap<CompetitorDTO, Widget>();
|
||||||
markPassingBuoyName = new HashMap<String, String>();
|
markPassingBuoyName = new HashMap<String, String>();
|
||||||
this.sailingService = sailingService;
|
this.sailingService = sailingService;
|
||||||
@@ -420,13 +417,14 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener {
|
|||||||
plotOptions.setGridOptions(new GridOptions().setHoverable(true).setMouseActiveRadius(5).setAutoHighlight(true));
|
plotOptions.setGridOptions(new GridOptions().setHoverable(true).setMouseActiveRadius(5).setAutoHighlight(true));
|
||||||
|
|
||||||
plotOptions.setSelectionOptions(new SelectionOptions().setDragging(true).setMode("x"));
|
plotOptions.setSelectionOptions(new SelectionOptions().setDragging(true).setMode("x"));
|
||||||
for (int i = 0; i < getCompetitorsAndTimePointsDTO().getCompetitors().length; i++){
|
for (int i = 0; i < getCompetitorsAndTimePointsDTO().getCompetitors().length; i++){
|
||||||
SeriesHandler series = model.addSeries(""+i, colorMap.getColorByID(i));
|
CompetitorDTO competitor = getCompetitorsAndTimePointsDTO().getCompetitors()[i];
|
||||||
|
SeriesHandler series = model.addSeries(""+i, competitorSelectionProvider.getColor(competitor));
|
||||||
series.setOptions(SeriesType.LINES, new LineSeriesOptions().setLineWidth(2.5).setShow(true));
|
series.setOptions(SeriesType.LINES, new LineSeriesOptions().setLineWidth(2.5).setShow(true));
|
||||||
series.setOptions(SeriesType.POINTS, new PointsSeriesOptions().setLineWidth(0).setShow(false));
|
series.setOptions(SeriesType.POINTS, new PointsSeriesOptions().setLineWidth(0).setShow(false));
|
||||||
series.setVisible(false);
|
series.setVisible(false);
|
||||||
seriesID.add(series);
|
seriesID.add(series);
|
||||||
series = model.addSeries(i + " passed mark", colorMap.getColorByID(i));
|
series = model.addSeries(i + " passed mark", competitorSelectionProvider.getColor(competitor));
|
||||||
series.setOptions(SeriesType.LINES, new LineSeriesOptions().setLineWidth(0).setShow(false));
|
series.setOptions(SeriesType.LINES, new LineSeriesOptions().setLineWidth(0).setShow(false));
|
||||||
series.setOptions(SeriesType.POINTS, new PointsSeriesOptions().setLineWidth(3).setShow(true));
|
series.setOptions(SeriesType.POINTS, new PointsSeriesOptions().setLineWidth(3).setShow(true));
|
||||||
series.setVisible(false);
|
series.setVisible(false);
|
||||||
@@ -550,7 +548,7 @@ implements CompetitorSelectionChangeListener, RaceSelectionChangeListener {
|
|||||||
private void setLegendVisible(CompetitorDTO competitor, boolean visible) {
|
private void setLegendVisible(CompetitorDTO competitor, boolean visible) {
|
||||||
Widget label = competitorLabels.get(competitor);
|
Widget label = competitorLabels.get(competitor);
|
||||||
if (label == null){
|
if (label == null){
|
||||||
label = createCompetitorLabel(competitor.name, colorMap.getColorByID(competitorID.indexOf(competitor)));
|
label = createCompetitorLabel(competitor.name, competitorSelectionProvider.getColor(competitor));
|
||||||
competitorLabels.put(competitor, label);
|
competitorLabels.put(competitor, label);
|
||||||
legendPanel.add(label);
|
legendPanel.add(label);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -117,12 +117,12 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
|||||||
raceMap.onRaceSelectionChange(Collections.singletonList(selectedRaceIdentifier));
|
raceMap.onRaceSelectionChange(Collections.singletonList(selectedRaceIdentifier));
|
||||||
collapsableViewers.add(raceMapViewer);
|
collapsableViewers.add(raceMapViewer);
|
||||||
|
|
||||||
boolean showWindChart = false;
|
boolean showWindChart = true;
|
||||||
if(showWindChart) {
|
if(showWindChart) {
|
||||||
WindChartSettings windChartSettings = new WindChartSettings();
|
WindChartSettings windChartSettings = new WindChartSettings();
|
||||||
WindChart windChart = new WindChart(sailingService, raceSelectionProvider, windChartSettings, stringMessages, errorReporter);
|
WindChart windChart = new WindChart(sailingService, raceSelectionProvider, windChartSettings, stringMessages, errorReporter);
|
||||||
CollapsableComponentViewer<WindChartSettings> windChartViewer = new CollapsableComponentViewer<WindChartSettings>(
|
CollapsableComponentViewer<WindChartSettings> windChartViewer = new CollapsableComponentViewer<WindChartSettings>(
|
||||||
windChart, "600px", "300px", stringMessages);
|
windChart, "600px", "500px", stringMessages);
|
||||||
windChart.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
|
windChart.onRaceSelectionChange(raceSelectionProvider.getSelectedRaces());
|
||||||
collapsableViewers.add(windChartViewer);
|
collapsableViewers.add(windChartViewer);
|
||||||
}
|
}
|
||||||
@@ -207,6 +207,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
|||||||
max = selectedRace.endOfRace;
|
max = selectedRace.endOfRace;
|
||||||
} else if (selectedRace.timePointOfNewestEvent != null) {
|
} else if (selectedRace.timePointOfNewestEvent != null) {
|
||||||
max = selectedRace.timePointOfNewestEvent;
|
max = selectedRace.timePointOfNewestEvent;
|
||||||
|
timer.setPlayMode(PlayModes.Live);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(min != null && max != null)
|
if(min != null && max != null)
|
||||||
|
|||||||
Reference in new issue
Block a user