Merge remote-tracking branch 'server/raceboardmodes' into raceboardmodes

This commit is contained in:
Axel Uhl committed 2016-07-16 12:57:27 +02:00
commit 82d9b3cf63
5 files changed
+48 -13

No files matched your search

@@ -155,4 +155,16 @@ public class SimpleRaceMetadataDTO implements DTO, Comparable<SimpleRaceMetadata
public boolean isFinished() {
return getViewState() == RaceViewState.FINISHED;
}
/**
* Convenience method to check if this {@link SimpleRaceMetadataDTO race} is currently running.
*
* @return <code>true</code> if the {@link #getViewState() view state} is {@link RaceViewState#RUNNING},
* <code>false</code> otherwise
*/
public boolean isRunning() {
return getViewState() == RaceViewState.FINISHED;
}
}
@@ -4,7 +4,9 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.home.communication.race.SimpleRaceMetadataDTO;
import com.sap.sailing.gwt.ui.client.StringMessages;
@@ -18,8 +20,10 @@ public abstract class RaceviewerLaunchPad extends Composite {
@UiField RaceviewerLaunchPadResources local_res;
@UiField DivElement itemContainerUi;
private final PopupPanel parent;
public RaceviewerLaunchPad(SimpleRaceMetadataDTO data) {
public RaceviewerLaunchPad(SimpleRaceMetadataDTO data, final PopupPanel parent) {
this.parent = parent;
initWidget(uiBinder.createAndBindUi(this));
local_res.css().ensureInjected();
if (!data.isFinished()) {
@@ -27,10 +31,21 @@ public abstract class RaceviewerLaunchPad extends Composite {
addItem(data, RaceviewerLaunchPadMenuItem.WATCH_LIVE);
} else {
addItem(data, RaceviewerLaunchPadMenuItem.REPLAY);
addItem(data, RaceviewerLaunchPadMenuItem.RACE_ANALYSIS);
}
if (data.isRunning() || data.isFinished()) {
addItem(data, RaceviewerLaunchPadMenuItem.START_ANALYSIS);
}
addItem(data, RaceviewerLaunchPadMenuItem.RACE_ANALYSIS);
addItem(data, RaceviewerLaunchPadMenuItem.START_ANALYSIS);
addItem(data, RaceviewerLaunchPadMenuItem.WINNING_LANES);
sinkEvents(Event.ONCLICK);
}
@Override
public void onBrowserEvent(final Event event) {
if (event.getTypeInt() == Event.ONCLICK) {
parent.hide();
}
super.onBrowserEvent(event);
}
private void addItem(SimpleRaceMetadataDTO data, RaceviewerLaunchPadMenuItem item) {
@@ -54,7 +54,7 @@ public class RaceviewerLaunchPadCell<T extends RaceMetadataDTO<?>> extends Abstr
ValueUpdater<T> valueUpdater) {
if (data.hasValidTrackingData() && BrowserEvents.CLICK.equals(event.getType())
&& parent.getFirstChildElement().isOrHasChild(Element.as(event.getEventTarget()))) {
panel.setWidget(new RaceviewerLaunchPad(data) {
panel.setWidget(new RaceviewerLaunchPad(data, panel) {
@Override
protected String getRaceViewerURL(SimpleRaceMetadataDTO data, String mode) {
return presenter.getRaceViewerURL(data, mode);
@@ -48,7 +48,7 @@ public abstract class AbstractRegattaCompetitionFleetRace extends Widget impleme
public void onBrowserEvent(Event event) {
if (race.hasValidTrackingData() && event.getTypeInt() == Event.ONCLICK) {
this.getElement().scrollIntoView();
panel.setWidget(new RaceviewerLaunchPad(race) {
panel.setWidget(new RaceviewerLaunchPad(race, panel) {
@Override
protected String getRaceViewerURL(SimpleRaceMetadataDTO data, String mode) {
return presenter.getRaceViewerURL(data, mode);
@@ -117,7 +117,9 @@ public class StartAnalysisMode extends RaceBoardModeWithPerRaceCompetitors {
setLeaderboard(result);
getLeaderboardPanel().updateLeaderboard(result);
updateCompetitorSelection();
getRaceBoardPanel().setCompetitorChartVisible(true);
if (isCompetitorChartEnabled()) {
getRaceBoardPanel().setCompetitorChartVisible(true);
}
}
});
Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
@@ -127,13 +129,15 @@ public class StartAnalysisMode extends RaceBoardModeWithPerRaceCompetitors {
// settings is largely more successful because
boolean result = getRaceBoardPanel().getMap().getSimulationOverlay() == null;
if (!result) {
final MultiCompetitorRaceChartSettings newCompetitorChartSettings = new MultiCompetitorRaceChartSettings(
new ChartSettings(/* stepSizeInMillis */ 1000), DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS,
/* no second series */ null);
competitorChart.updateSettings(newCompetitorChartSettings);
getRaceTimePanel().getTimeRangeProvider().setTimeZoom(
new MillisecondsTimePoint(raceTimesInfo.startOfRace).minus(DURATION_BEFORE_START_TO_INCLUDE_IN_CHART_TIME_RANGE).asDate(),
new MillisecondsTimePoint(raceTimesInfo.startOfRace).plus(DURATION_AFTER_START_TO_INCLUDE_IN_CHART_TIME_RANGE).asDate());
if (isCompetitorChartEnabled()) {
final MultiCompetitorRaceChartSettings newCompetitorChartSettings = new MultiCompetitorRaceChartSettings(
new ChartSettings(/* stepSizeInMillis */ 1000), DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS,
/* no second series */ null);
competitorChart.updateSettings(newCompetitorChartSettings);
getRaceTimePanel().getTimeRangeProvider().setTimeZoom(
new MillisecondsTimePoint(raceTimesInfo.startOfRace).minus(DURATION_BEFORE_START_TO_INCLUDE_IN_CHART_TIME_RANGE).asDate(),
new MillisecondsTimePoint(raceTimesInfo.startOfRace).plus(DURATION_AFTER_START_TO_INCLUDE_IN_CHART_TIME_RANGE).asDate());
}
final RaceMapSettings existingMapSettings = getRaceBoardPanel().getMap().getSettings();
final RaceMapSettings newMapSettings = new RaceMapSettings(
new RaceMapZoomSettings(Collections.singleton(ZoomTypes.BOATS), /* zoomToSelected */ false),
@@ -213,5 +217,9 @@ public class StartAnalysisMode extends RaceBoardModeWithPerRaceCompetitors {
showCompetitorChartIfAllDataReceived();
}
}
private boolean isCompetitorChartEnabled() {
return competitorChart != null;
}
}