mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-28 06:47:15 +00:00
a first implementation of a "PlayerMode" stragegy for handling the race board's mode parameter
Change-Id: I777a14b653abeb91312c51f0f17764450f8abb0f
This commit is contained in:
1 parent
fce0c1d79b
commit
9572ca156b
2 files changed
+55
-2
No files matched your search
+4
@@ -106,6 +106,10 @@ public class RaceTimePanel extends TimePanel<RaceTimePanelSettings> implements R
|
||||
this.listeners.add(listener);
|
||||
}
|
||||
|
||||
public void removeRaceTimesInfoProviderListener(RaceTimesInfoProviderListener listener) {
|
||||
this.listeners.remove(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canReplayWhileLiveIsPossible() {
|
||||
return this.hasCanReplayDuringLiveRacesPermission;
|
||||
|
||||
+51
-2
@@ -1,10 +1,22 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.core.client.Scheduler;
|
||||
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.gwt.ui.client.LeaderboardUpdateListener;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimePanel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
@@ -19,14 +31,19 @@ import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
* @author Axel Uhl (d043530)
|
||||
*
|
||||
*/
|
||||
public class PlayerMode implements RaceBoardMode, RaceTimesInfoProviderListener {
|
||||
public class PlayerMode implements RaceBoardMode, RaceTimesInfoProviderListener, LeaderboardUpdateListener {
|
||||
private final Duration DURATION_BEFORE_START_TO_SET_TIMER_TO_FOR_REPLAY_RACES = Duration.ONE_SECOND.times(10);
|
||||
private Timer timer;
|
||||
private RegattaAndRaceIdentifier raceIdentifier;
|
||||
private RaceTimePanel raceTimePanel;
|
||||
private LeaderboardPanel leaderboardPanel;
|
||||
|
||||
@Override
|
||||
public void applyTo(RaceBoardPanel raceBoardPanel) {
|
||||
raceBoardPanel.getRaceTimePanel().addRaceTimesInfoProviderListener(this);
|
||||
this.raceTimePanel = raceBoardPanel.getRaceTimePanel();
|
||||
this.raceTimePanel.addRaceTimesInfoProviderListener(this);
|
||||
this.leaderboardPanel = raceBoardPanel.getLeaderboardPanel();
|
||||
this.leaderboardPanel.addLeaderboardUpdateListener(this);
|
||||
this.timer = raceBoardPanel.getTimer();
|
||||
this.raceIdentifier = raceBoardPanel.getSelectedRaceIdentifier();
|
||||
}
|
||||
@@ -44,7 +61,39 @@ public class PlayerMode implements RaceBoardMode, RaceTimesInfoProviderListener
|
||||
if (times.startOfRace != null) {
|
||||
timer.setTime(new MillisecondsTimePoint(times.startOfRace).minus(DURATION_BEFORE_START_TO_SET_TIMER_TO_FOR_REPLAY_RACES).asMillis());
|
||||
timer.play();
|
||||
// we've done our adjustments; remove listener and let go
|
||||
raceTimePanel.removeRaceTimesInfoProviderListener(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatedLeaderboard(LeaderboardDTO leaderboard) {
|
||||
// it's important to first unregister the listener before updateSettings is called because
|
||||
// updateSettings will trigger another leaderboard load, leading to an endless recursion otherwise
|
||||
leaderboardPanel.removeLeaderboardUpdateListener(this);
|
||||
final LeaderboardSettings existingSettings = leaderboardPanel.getSettings();
|
||||
final List<DetailType> raceDetailsToShow = new ArrayList<>(existingSettings.getRaceDetailsToShow());
|
||||
raceDetailsToShow.add(DetailType.RACE_CURRENT_SPEED_OVER_GROUND_IN_KNOTS);
|
||||
raceDetailsToShow.add(DetailType.RACE_GAP_TO_LEADER_IN_SECONDS);
|
||||
final LeaderboardSettings newSettings = new LeaderboardSettings(existingSettings.getManeuverDetailsToShow(),
|
||||
existingSettings.getLegDetailsToShow(),
|
||||
raceDetailsToShow, existingSettings.getOverallDetailsToShow(), existingSettings.getNamesOfRaceColumnsToShow(),
|
||||
existingSettings.getNamesOfRacesToShow(),
|
||||
existingSettings.getNumberOfLastRacesToShow(), /* auto-expand pre-selected race */ true,
|
||||
existingSettings.getDelayBetweenAutoAdvancesInMilliseconds(),
|
||||
existingSettings.getNameOfRaceToSort(), existingSettings.isSortAscending(),
|
||||
existingSettings.isUpdateUponPlayStateChange(),
|
||||
existingSettings.getActiveRaceColumnSelectionStrategy(),
|
||||
existingSettings.isShowAddedScores(),
|
||||
existingSettings.isShowOverallColumnWithNumberOfRacesCompletedPerCompetitor(),
|
||||
existingSettings.isShowCompetitorSailIdColumn(),
|
||||
existingSettings.isShowCompetitorFullNameColumn());
|
||||
leaderboardPanel.updateSettings(newSettings);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void currentRaceSelected(RaceIdentifier raceIdentifier, RaceColumnDTO raceColumn) {
|
||||
// nothing to do
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user