mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-14 16:20:57 +00:00
initialize Timer in Live/Paused mode for LeaderboardPanel when used through LeaderboardEntryPoint. Fixing bug 1888.
This commit is contained in:
1 parent
05ae1240aa
commit
95cb0bda91
4 files changed
+54
-37
No files matched your search
+2
-1
@@ -1367,7 +1367,8 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS
|
||||
String leaderboardName, ErrorReporter errorReporter, final StringMessages stringMessages,
|
||||
final UserAgentDetails userAgent, boolean showRaceDetails) {
|
||||
this(sailingService, asyncActionsExecutor, settings, preSelectedRace, competitorSelectionProvider, new Timer(
|
||||
PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l), leaderboardGroupName,
|
||||
// perform the first request as "live" but don't by default auto-play
|
||||
PlayModes.Live, PlayStates.Paused, /* delayBetweenAutoAdvancesInMilliseconds */3000l), leaderboardGroupName,
|
||||
leaderboardName, errorReporter, stringMessages, userAgent, showRaceDetails,
|
||||
/* optionalRaceTimesInfoProvider */ null, /* autoExpandLastRaceColumn */ false, /* adjustTimerDelay */ true);
|
||||
}
|
||||
|
||||
+3
-2
@@ -16,6 +16,7 @@ import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
/**
|
||||
@@ -35,7 +36,8 @@ public class LeaderboardViewer extends AbstractLeaderboardViewer {
|
||||
final UserAgentDetails userAgent, boolean showRaceDetails, boolean hideToolbar, boolean autoExpandLastRaceColumn,
|
||||
boolean showCharts, DetailType chartDetailType, boolean showOverallLeaderboard) {
|
||||
super(new CompetitorSelectionModel(/* hasMultiSelection */true), asyncActionsExecutor,
|
||||
new Timer(PlayModes.Replay, /*delayBetweenAutoAdvancesInMilliseconds*/ 3000l), stringMessages, hideToolbar);
|
||||
// perform the first request as live request but don't auto-play
|
||||
new Timer(PlayModes.Live, PlayStates.Paused, /* delayBetweenAutoAdvancesInMilliseconds */ 3000l), stringMessages, hideToolbar);
|
||||
|
||||
final FlowPanel mainPanel = createViewerPanel();
|
||||
setWidget(mainPanel);
|
||||
@@ -61,7 +63,6 @@ public class LeaderboardViewer extends AbstractLeaderboardViewer {
|
||||
if(showCharts) {
|
||||
multiCompetitorChart.timeChanged(timer.getTime(), null);
|
||||
}
|
||||
|
||||
overallLeaderboardPanel = null;
|
||||
if(showOverallLeaderboard) {
|
||||
sailingService.getOverallLeaderboardNamesContaining(leaderboardName, new MarkedAsyncCallback<List<String>>(
|
||||
|
||||
+3
-8
@@ -13,6 +13,7 @@ import com.sap.sailing.gwt.ui.client.shared.charts.MultiCompetitorLeaderboardCha
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
|
||||
|
||||
/**
|
||||
@@ -32,34 +33,28 @@ public class MetaLeaderboardViewer extends AbstractLeaderboardViewer {
|
||||
UserAgentDetails userAgent, boolean showRaceDetails, boolean hideToolbar, boolean autoExpandLastRaceColumn,
|
||||
boolean showCharts, DetailType chartDetailType, boolean showSeriesLeaderboards) {
|
||||
super(new CompetitorSelectionModel(/* hasMultiSelection */true), asyncActionsExecutor,
|
||||
new Timer(PlayModes.Replay, /*delayBetweenAutoAdvancesInMilliseconds*/ 3000l), stringMessages, hideToolbar);
|
||||
|
||||
// perform the first request as live request but don't auto-play
|
||||
new Timer(PlayModes.Live, PlayStates.Paused, /*delayBetweenAutoAdvancesInMilliseconds*/ 3000l), stringMessages, hideToolbar);
|
||||
FlowPanel mainPanel = createViewerPanel();
|
||||
setWidget(mainPanel);
|
||||
|
||||
final Label overallStandingsLabel = new Label(stringMessages.overallStandings());
|
||||
overallStandingsLabel.setStyleName("leaderboardHeading");
|
||||
|
||||
metaLeaderboardPanel = new LeaderboardPanel(sailingService, asyncActionsExecutor,
|
||||
leaderboardSettings, preselectedRace, competitorSelectionProvider, timer,
|
||||
leaderboardGroupName, metaLeaderboardName, errorReporter, stringMessages, userAgent,
|
||||
showRaceDetails, /* raceTimesInfoProvider */null, autoExpandLastRaceColumn, /* adjustTimerDelay */ true);
|
||||
|
||||
multiCompetitorChart = new MultiCompetitorLeaderboardChart(sailingService, asyncActionsExecutor, metaLeaderboardName,
|
||||
chartDetailType, competitorSelectionProvider, timer, stringMessages, errorReporter);
|
||||
multiCompetitorChart.setVisible(showCharts);
|
||||
multiCompetitorChart.getElement().getStyle().setMarginTop(10, Unit.PX);
|
||||
multiCompetitorChart.getElement().getStyle().setMarginBottom(10, Unit.PX);
|
||||
|
||||
multiLeaderboardPanel = new MultiLeaderboardPanel(sailingService, metaLeaderboardName, asyncActionsExecutor, timer,
|
||||
preselectedLeaderboardName, preselectedRace, errorReporter, stringMessages,
|
||||
userAgent, showRaceDetails, autoExpandLastRaceColumn);
|
||||
multiLeaderboardPanel.setVisible(showSeriesLeaderboards);
|
||||
|
||||
mainPanel.add(metaLeaderboardPanel);
|
||||
mainPanel.add(multiCompetitorChart);
|
||||
mainPanel.add(multiLeaderboardPanel);
|
||||
|
||||
addComponentToNavigationMenu(metaLeaderboardPanel, false, stringMessages.seriesLeaderboard(), /* hasSettingsWhenComponentIsInvisible*/ true);
|
||||
addComponentToNavigationMenu(multiCompetitorChart, true, null, /* hasSettingsWhenComponentIsInvisible*/ true);
|
||||
addComponentToNavigationMenu(multiLeaderboardPanel, true , stringMessages.regattaLeaderboards(), /* hasSettingsWhenComponentIsInvisible*/ false);
|
||||
|
||||
@@ -122,7 +122,11 @@ public class Timer {
|
||||
* updated by a call to {@link #adjustClientServerOffset(long, Date, long)}.
|
||||
*/
|
||||
public Timer(PlayModes playMode) {
|
||||
this(playMode, 1000);
|
||||
this(playMode, getDefaultPlayStateForPlayMode(playMode));
|
||||
}
|
||||
|
||||
public Timer(PlayModes playMode, PlayStates playState) {
|
||||
this(playMode, playState, 1000 /* refreshIntervalInMillis */);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -131,17 +135,25 @@ public class Timer {
|
||||
* {@link #refreshInterval delay between automatic updates} should the timer be
|
||||
* {@link #resume() started}. The {@link #livePlayDelayInMillis} is set to zero seconds.
|
||||
*/
|
||||
public Timer(PlayModes playMode, long refreshInterval) {
|
||||
this.refreshInterval = refreshInterval;
|
||||
public Timer(PlayModes playMode, long refreshIntervalInMillis) {
|
||||
this(playMode, getDefaultPlayStateForPlayMode(playMode), refreshIntervalInMillis);
|
||||
}
|
||||
|
||||
public Timer(PlayModes playMode, PlayStates playState, long refreshIntervalInMillis) {
|
||||
this.refreshInterval = refreshIntervalInMillis;
|
||||
// Using the client's clock is only a default; the time offset between client and server is adjusted when
|
||||
// information about the server time is present; see adjustClientServerOffset(...)
|
||||
time = new Date();
|
||||
timeListeners = new HashSet<TimeListener>();
|
||||
playStateListeners = new HashSet<PlayStateListener>();
|
||||
playState = PlayStates.Paused;
|
||||
setPlaySpeedFactor(1.0);
|
||||
livePlayDelayInMillis = 0l;
|
||||
setPlayMode(playMode);
|
||||
this.playMode = playMode;
|
||||
setPlayState(playState, /* updatePlayMode */ false);
|
||||
}
|
||||
|
||||
private static PlayStates getDefaultPlayStateForPlayMode(PlayModes playMode) {
|
||||
return playMode == PlayModes.Live ? PlayStates.Playing : PlayStates.Paused;
|
||||
}
|
||||
|
||||
public void addTimeListener(TimeListener listener) {
|
||||
@@ -238,37 +250,45 @@ public class Timer {
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playStateChanged(playState, playMode);
|
||||
}
|
||||
if (newPlayMode == PlayModes.Live) {
|
||||
play();
|
||||
}
|
||||
}
|
||||
if (newPlayMode == PlayModes.Live) {
|
||||
play();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param updatePlayMode
|
||||
* if <code>true</code>, the play mode will be {@link #setPlayMode(PlayModes) updated} according to the
|
||||
* desired new play state. In particular, if the new play state is {@link PlayStates#Paused}, the play
|
||||
* mode will then automatically be set to {@link PlayModes#Replay}.
|
||||
*/
|
||||
private void setPlayState(PlayStates newPlayState, boolean updatePlayMode) {
|
||||
if (this.playState != newPlayState) {
|
||||
this.playState = newPlayState; // if newPlayState is Paused then this will cause the repeating command to stop executing
|
||||
if (newPlayState == PlayStates.Playing) {
|
||||
if (playMode == PlayModes.Live) {
|
||||
setTime(getLiveTimePointInMillis());
|
||||
}
|
||||
startAutoAdvance();
|
||||
} else if (updatePlayMode) {
|
||||
setPlayMode(PlayModes.Replay);
|
||||
}
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playStateChanged(playState, playMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Pauses this timer after the next time advance. Registered {@link PlayStateListener}s will be notified. If the
|
||||
* play mode was {@link PlayModes#Live}, it'll be set to {@link PlayModes#Replay}.
|
||||
*/
|
||||
public void pause() {
|
||||
if (playState == PlayStates.Playing) {
|
||||
playState = PlayStates.Paused; // this will cause the repeating command to stop executing
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playStateChanged(playState, playMode);
|
||||
}
|
||||
setPlayMode(PlayModes.Replay);
|
||||
}
|
||||
setPlayState(PlayStates.Paused, /* updatePlayMode */ true);
|
||||
}
|
||||
|
||||
public void play() {
|
||||
if (playState != PlayStates.Playing) {
|
||||
playState = PlayStates.Playing;
|
||||
if (playMode == PlayModes.Live) {
|
||||
setTime(getLiveTimePointInMillis());
|
||||
}
|
||||
startAutoAdvance();
|
||||
for (PlayStateListener playStateListener : playStateListeners) {
|
||||
playStateListener.playStateChanged(playState, playMode);
|
||||
}
|
||||
}
|
||||
setPlayState(PlayStates.Playing, /* updatePlayMode */ true);
|
||||
}
|
||||
|
||||
private void startAutoAdvance() {
|
||||
@@ -290,7 +310,7 @@ public class Timer {
|
||||
scheduleAdvancerCommand(this);
|
||||
return false; // stop this command; use the newly-scheduled one instead that uses the new frequency
|
||||
} else {
|
||||
return playState == PlayStates.Playing ? true: false;
|
||||
return playState == PlayStates.Playing;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user