mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 22:43:57 +00:00
Merge branch '60_inch' of ssh://sapsailing.com/home/trac/git into 60_inch
# Conflicts: # java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/nodes/IdleRaceLeaderboard.java # java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/autoplay/client/utils/AutoplayHelper.java
This commit is contained in:
commit
e20a3ae07e
30 files changed
+392
-366
No files matched your search
+6
-6
@@ -29,8 +29,8 @@ import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.compet
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.competitors.PreRaceCompetitorsImagePlace;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.competitors.PreRaceCompetitorsPresenterImpl;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.competitors.PreRaceCompetitorsViewImpl;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLeaderBoardWithImagePresenterImpl;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLeaderBoardWithImageViewImpl;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImagePresenterImpl;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImageViewImpl;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreRaceLeaderBoardWithCompetitorPlace;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreRaceLeaderBoardWithFlagPlace;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.racemap.PreRaceRacemapPlace;
|
||||
@@ -59,12 +59,12 @@ public class AutoPlayActivityMapperImpl implements ActivityMapper {
|
||||
return new LeaderboardPresenterImpl((LeaderboardPlace) place, clientFactory, new LeaderboardViewImpl());
|
||||
}
|
||||
if (place instanceof PreRaceLeaderBoardWithCompetitorPlace) {
|
||||
return new PreLeaderBoardWithImagePresenterImpl((PreRaceLeaderBoardWithCompetitorPlace) place,
|
||||
clientFactory, new PreLeaderBoardWithImageViewImpl(new CompetitorImageProvider()));
|
||||
return new PreLiveRaceLeaderBoardWithImagePresenterImpl((PreRaceLeaderBoardWithCompetitorPlace) place,
|
||||
clientFactory, new PreLiveRaceLeaderBoardWithImageViewImpl(new CompetitorImageProvider()));
|
||||
}
|
||||
if (place instanceof PreRaceLeaderBoardWithFlagPlace) {
|
||||
return new PreLeaderBoardWithImagePresenterImpl((PreRaceLeaderBoardWithFlagPlace) place, clientFactory,
|
||||
new PreLeaderBoardWithImageViewImpl(new FlagImageProvider()));
|
||||
return new PreLiveRaceLeaderBoardWithImagePresenterImpl((PreRaceLeaderBoardWithFlagPlace) place, clientFactory,
|
||||
new PreLiveRaceLeaderBoardWithImageViewImpl(new FlagImageProvider()));
|
||||
}
|
||||
if (place instanceof IdleUpNextPlace) {
|
||||
return new IdleUpNextPresenterImpl((IdleUpNextPlace) place, clientFactory, new IdleNextUpViewImpl());
|
||||
|
||||
+11
-1
@@ -16,11 +16,13 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
|
||||
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;
|
||||
|
||||
public class IdleOverallLeaderBoardNode extends FiresPlaceNode {
|
||||
private final AutoPlayClientFactory cf;
|
||||
private Timer timer;
|
||||
|
||||
public IdleOverallLeaderBoardNode(AutoPlayClientFactory cf) {
|
||||
super(IdleOverallLeaderBoardNode.class.getName());
|
||||
@@ -41,7 +43,7 @@ public class IdleOverallLeaderBoardNode extends FiresPlaceNode {
|
||||
RaceColumnSelectionStrategies.EXPLICIT, /* showAddedScores */ true,
|
||||
/* showOverallRacesCompleted */ false, true, false, false, true);
|
||||
|
||||
com.sap.sse.gwt.client.player.Timer timer = new com.sap.sse.gwt.client.player.Timer(
|
||||
timer = new com.sap.sse.gwt.client.player.Timer(
|
||||
// perform the first request as "live" but don't by default auto-play
|
||||
PlayModes.Live, PlayStates.Playing,
|
||||
/* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS);
|
||||
@@ -58,4 +60,12 @@ public class IdleOverallLeaderBoardNode extends FiresPlaceNode {
|
||||
getBus().fireEvent(new AutoPlayHeaderEvent(cf.getAutoPlayCtx().getEvent().getName(),
|
||||
cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName()));
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
if(timer != null){
|
||||
timer.pause();
|
||||
}
|
||||
super.onStop();
|
||||
}
|
||||
}
|
||||
+2
@@ -42,7 +42,9 @@ public class IdleRaceLeaderboard extends FiresPlaceNode {
|
||||
boolean withFullscreenButton = settings.getPerspectiveOwnSettings().isFullscreen();
|
||||
PerspectiveCompositeSettings<LeaderboardWithHeaderPerspectiveSettings> leaderboardSettings = settings
|
||||
.findSettingsByComponentId(autoplayLifecycle.getLeaderboardLifecycle().getComponentId());
|
||||
|
||||
StringMessages stringMessages = StringMessages.INSTANCE;
|
||||
|
||||
LeaderboardWithHeaderPerspective leaderboardPerspective = new LeaderboardWithHeaderPerspective(null, null,
|
||||
autoplayLifecycle.getLeaderboardLifecycle(), leaderboardSettings, cf.getSailingService(),
|
||||
cf.getUserService(), AutoplayHelper.asyncActionsExecutor,
|
||||
|
||||
-2
@@ -6,7 +6,6 @@ import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
@@ -104,7 +103,6 @@ public class IdleUpNextNode extends FiresPlaceNode {
|
||||
public static void checkForRaceStarts(AbstractLeaderboardDTO currentLeaderboard, Date serverTimeDuringRequest,
|
||||
RaceTimesInfoProvider raceTimesInfoProvider,
|
||||
ArrayList<Pair<RegattaAndRaceIdentifier, Date>> raceToStartOfRace) {
|
||||
GWT.log("Checking race starts");
|
||||
Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfos = raceTimesInfoProvider.getRaceTimesInfos();
|
||||
for (RaceColumnDTO race : currentLeaderboard.getRaceList()) {
|
||||
for (FleetDTO fleet : race.getFleets()) {
|
||||
|
||||
+3
-3
@@ -5,8 +5,8 @@ import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory;
|
||||
import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent;
|
||||
import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard.LiveRaceWithRacemapAndLeaderBoardPlace;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.RaceMapHelper;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.RaceMapHelper.RVWrapper;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper.RVWrapper;
|
||||
|
||||
public class LiveRaceWithRacemapNode extends FiresPlaceNode {
|
||||
private final AutoPlayClientFactory cf;
|
||||
@@ -18,7 +18,7 @@ public class LiveRaceWithRacemapNode extends FiresPlaceNode {
|
||||
}
|
||||
|
||||
public void onStart() {
|
||||
RaceMapHelper.create(cf.getSailingService(), cf.getErrorReporter(),
|
||||
AutoplayHelper.create(cf.getSailingService(), cf.getErrorReporter(),
|
||||
cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName(), cf.getAutoPlayCtx().getContextDefinition().getEventId(),
|
||||
cf.getAutoPlayCtx().getEvent(), cf.getEventBus(), cf.getDispatch(), cf.getAutoPlayCtx().getLiveRace(),
|
||||
new AsyncCallback<RVWrapper>() {
|
||||
|
||||
+3
-3
@@ -6,8 +6,8 @@ import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent;
|
||||
import com.sap.sailing.gwt.autoplay.client.nodes.base.FiresPlaceNode;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard.LiveRaceWithRacemapAndLeaderBoardPlace;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.racemap.PreRaceRacemapPlace;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.RaceMapHelper;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.RaceMapHelper.RVWrapper;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper.RVWrapper;
|
||||
import com.sap.sailing.gwt.home.communication.event.minileaderboard.GetMiniLeaderboardDTO;
|
||||
import com.sap.sailing.gwt.home.communication.event.minileaderboard.GetMiniLeaderbordAction;
|
||||
import com.sap.sse.gwt.dispatch.shared.commands.ResultWithTTL;
|
||||
@@ -23,7 +23,7 @@ public class PreLiveRaceWithRacemapNode extends FiresPlaceNode {
|
||||
|
||||
|
||||
public void onStart() {
|
||||
RaceMapHelper.create(cf.getSailingService(), cf.getErrorReporter(),
|
||||
AutoplayHelper.create(cf.getSailingService(), cf.getErrorReporter(),
|
||||
cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName(), cf.getAutoPlayCtx().getContextDefinition().getEventId(),
|
||||
cf.getAutoPlayCtx().getEvent(), cf.getEventBus(), cf.getDispatch(),
|
||||
cf.getAutoPlayCtx().getPreLiveRace(), new AsyncCallback<RVWrapper>() {
|
||||
|
||||
+6
-4
@@ -2,7 +2,6 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.afterliveraceloop.boa
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
@@ -25,6 +24,7 @@ import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
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;
|
||||
|
||||
@@ -34,6 +34,7 @@ public class RaceEndWithBoatsPresenterImpl extends AutoPlayPresenterConfigured<A
|
||||
private RaceEndWithBoatsView view;
|
||||
private SixtyInchLeaderBoard leaderboardPanel;
|
||||
private CompetitorSelectionModel competitorSelectionProvider;
|
||||
private Timer timer;
|
||||
|
||||
public RaceEndWithBoatsPresenterImpl(AbstractRaceEndWithImagesTop3Place place, AutoPlayClientFactory clientFactory,
|
||||
RaceEndWithBoatsView slide1ViewImpl) {
|
||||
@@ -63,7 +64,7 @@ public class RaceEndWithBoatsPresenterImpl extends AutoPlayPresenterConfigured<A
|
||||
|
||||
competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ false);
|
||||
|
||||
com.sap.sse.gwt.client.player.Timer timer = new com.sap.sse.gwt.client.player.Timer(PlayModes.Live,
|
||||
timer = new com.sap.sse.gwt.client.player.Timer(PlayModes.Live,
|
||||
PlayStates.Paused,
|
||||
/* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS);
|
||||
leaderboardPanel = new SixtyInchLeaderBoard(sailingService, new AsyncActionsExecutor(), leaderboardSettings,
|
||||
@@ -100,7 +101,6 @@ public class RaceEndWithBoatsPresenterImpl extends AutoPlayPresenterConfigured<A
|
||||
.getCompetitorsFromBestToWorst(preselectedRaceColumn);
|
||||
|
||||
if (sortedCompetitors.size() >= 3) {
|
||||
GWT.log("First is " + sortedCompetitors.get(0));
|
||||
view.setFirst(sortedCompetitors.get(0));
|
||||
view.setSecond(sortedCompetitors.get(1));
|
||||
view.setThird(sortedCompetitors.get(2));
|
||||
@@ -109,6 +109,8 @@ public class RaceEndWithBoatsPresenterImpl extends AutoPlayPresenterConfigured<A
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
view.onStop();
|
||||
if(timer!= null){
|
||||
timer.pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
-2
@@ -13,8 +13,6 @@ public interface RaceEndWithBoatsView {
|
||||
|
||||
void setLeaderBoard(SixtyInchLeaderBoard leaderboardPanel);
|
||||
|
||||
void onStop();
|
||||
|
||||
void setFirst(CompetitorDTO c);
|
||||
|
||||
void setSecond(CompetitorDTO c);
|
||||
|
||||
+1
-5
@@ -12,7 +12,7 @@ import com.google.gwt.user.client.ui.ResizeComposite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
import com.sap.sailing.gwt.autoplay.client.shared.SixtyInchLeaderBoard;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Duration;
|
||||
@@ -74,10 +74,6 @@ public class RaceEndWithBoatsViewImpl extends ResizeComposite implements RaceEnd
|
||||
leaderBoardHolder.add(leaderboardPanel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFirst(CompetitorDTO c) {
|
||||
subline1.setText("1. " + c.getName());
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@
|
||||
width: 60%;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
height: 7%;
|
||||
height: 80px;
|
||||
font-size: 1rem;
|
||||
display: flex;
|
||||
-webkit-align-items: center;
|
||||
|
||||
+8
-4
@@ -21,7 +21,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
|
||||
public class IdleNextUpViewImpl extends Composite implements IdleUpNextView {
|
||||
private static final int MAX_RACES_IN_LIST = 10;
|
||||
private static final int MAX_RACES_IN_LIST = 8;
|
||||
private static IdleNextUpViewImplUiBinder uiBinder = GWT.create(IdleNextUpViewImplUiBinder.class);
|
||||
@UiField
|
||||
SimplePanel mainPanelUi;
|
||||
@@ -52,14 +52,17 @@ public class IdleNextUpViewImpl extends Composite implements IdleUpNextView {
|
||||
@Override
|
||||
public void setData(ArrayList<Pair<RegattaAndRaceIdentifier, Date>> data) {
|
||||
dataPanel.clear();
|
||||
if (data.isEmpty()) {
|
||||
if(data == null){
|
||||
dataPanel.add(new Label(StringMessages.INSTANCE.noData()));
|
||||
}
|
||||
else if ( data.isEmpty()) {
|
||||
dataPanel.add(new Label(StringMessages.INSTANCE.nothingUpcoming()));
|
||||
} else {
|
||||
dataPanel.add(new Label(StringMessages.INSTANCE.upcoming()));
|
||||
int index = 0;
|
||||
int index = 1;
|
||||
for (Pair<RegattaAndRaceIdentifier, Date> race : data) {
|
||||
index++;
|
||||
if (index > MAX_RACES_IN_LIST) {
|
||||
GWT.log("Count of races" + index);
|
||||
return;
|
||||
}
|
||||
String formatedDate;
|
||||
@@ -67,6 +70,7 @@ public class IdleNextUpViewImpl extends Composite implements IdleUpNextView {
|
||||
Date now = new Date();
|
||||
boolean past = race.getB().before(now);
|
||||
if (today && !past) {
|
||||
index++;
|
||||
DateTimeFormat simpleFormat = DateTimeFormat.getFormat("HH:mm");
|
||||
formatedDate = simpleFormat.format(race.getB());
|
||||
String raceName = race.getA().getRaceName();
|
||||
|
||||
+1
@@ -59,6 +59,7 @@ public class IdleUpNextPresenterImpl extends AutoPlayPresenterConfigured<IdleUpN
|
||||
protected void updateData() {
|
||||
ArrayList<Pair<RegattaAndRaceIdentifier, Date>> data = getPlace().getRaceToStartOfRace();
|
||||
if (data == null) {
|
||||
view.setData(null);
|
||||
return;
|
||||
}
|
||||
ArrayList<Pair<RegattaAndRaceIdentifier, Date>> filteredData = new ArrayList<>();
|
||||
|
||||
+6
-1
@@ -29,6 +29,7 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl extends AutoPlayPres
|
||||
private SixtyInchLeaderBoard leaderboardPanel;
|
||||
private int selected = -1;
|
||||
ArrayList<CompetitorDTO> compList = new ArrayList<>();
|
||||
private com.sap.sse.gwt.client.player.Timer timer;
|
||||
|
||||
public LiveRaceWithRacemapAndLeaderBoardPresenterImpl(LiveRaceWithRacemapAndLeaderBoardPlace place,
|
||||
AutoPlayClientFactory clientFactory,
|
||||
@@ -115,7 +116,7 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl extends AutoPlayPres
|
||||
false, true, true);
|
||||
|
||||
|
||||
com.sap.sse.gwt.client.player.Timer timer = new com.sap.sse.gwt.client.player.Timer(
|
||||
timer = new com.sap.sse.gwt.client.player.Timer(
|
||||
// perform the first request as "live" but don't by default auto-play
|
||||
PlayModes.Live, PlayStates.Playing,
|
||||
/* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS);
|
||||
@@ -127,9 +128,13 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl extends AutoPlayPres
|
||||
view.startingWith(this, panel, getPlace().getRaceMap(), leaderboardPanel);
|
||||
selectionTimer.schedule(SWITCH_COMPETITOR_DELAY);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
if(timer != null){
|
||||
timer.pause();
|
||||
}
|
||||
selectionTimer.cancel();
|
||||
view.onStop();
|
||||
}
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.ResizeComposite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
|
||||
public class CompetitorViewImpl extends ResizeComposite {
|
||||
private static CompetitorViewImplUiBinder uiBinder = GWT.create(CompetitorViewImplUiBinder.class);
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ import com.google.gwt.user.client.ui.LayoutPanel;
|
||||
import com.google.gwt.user.client.ui.ResizeComposite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
|
||||
public class PreRaceCompetitorsViewImpl extends ResizeComposite implements PreRaceCompetitorsView {
|
||||
private static PreRaceCompetitorsViewImplUiBinder uiBinder = GWT.create(PreRaceCompetitorsViewImplUiBinder.class);
|
||||
|
||||
-58
@@ -1,58 +0,0 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
|
||||
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:rf="urn:import:com.sap.sse.gwt.client.panels">
|
||||
<ui:with field="res"
|
||||
type="com.sap.sailing.gwt.autoplay.client.resources.SixtyInchBundle" />
|
||||
<ui:style>
|
||||
.left {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
overflow-y:auto;
|
||||
}
|
||||
|
||||
.right {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
right: 0px;
|
||||
height: 100%;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.image{
|
||||
top: 5%;
|
||||
display: block;
|
||||
margin: auto;
|
||||
min-width: 50%;
|
||||
height: 85%;
|
||||
width: auto;
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
.subline1{
|
||||
font-size:20px;
|
||||
font-weight:bold;
|
||||
text-align: center;
|
||||
}
|
||||
.subline2{
|
||||
font-size:20px;
|
||||
text-align: center;
|
||||
}
|
||||
.subline3{
|
||||
font-size:20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
</ui:style>
|
||||
<rf:ResizableFlowPanel styleName="{res.style.slideBackground}">
|
||||
<rf:ResizableFlowPanel ui:field="leaderBoardHolder"
|
||||
styleName="{style.left}" />
|
||||
<rf:ResizableFlowPanel ui:field="infoHolder"
|
||||
styleName="{style.right}">
|
||||
<g:Image ui:field="image" styleName="{style.image}" />
|
||||
<g:Label ui:field="subline1" styleName="{style.subline1}"/>
|
||||
<g:Label ui:field="subline2" styleName="{style.subline2}"/>
|
||||
<g:Label ui:field="subline3" styleName="{style.subline3}"/>
|
||||
</rf:ResizableFlowPanel>
|
||||
</rf:ResizableFlowPanel>
|
||||
</ui:UiBinder>
|
||||
+3
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard;
|
||||
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.shared.SixtyInchLeaderBoard;
|
||||
|
||||
@@ -16,4 +17,6 @@ public interface PreLeaderboardWithImageView {
|
||||
void scrollLeaderBoardToTop();
|
||||
|
||||
void onStop();
|
||||
|
||||
void nextRace(RegattaAndRaceIdentifier race);
|
||||
}
|
||||
+12
-10
@@ -25,7 +25,7 @@ import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayStates;
|
||||
|
||||
public class PreLeaderBoardWithImagePresenterImpl
|
||||
public class PreLiveRaceLeaderBoardWithImagePresenterImpl
|
||||
extends AutoPlayPresenterConfigured<AbstractPreRaceLeaderBoardWithImagePlace>
|
||||
implements PreLeaderboardWithImageView.Slide1Presenter {
|
||||
protected static final int SWITCH_COMPETITOR_DELAY = 2000;
|
||||
@@ -35,8 +35,9 @@ public class PreLeaderBoardWithImagePresenterImpl
|
||||
private Timer selectionTimer;
|
||||
private CompetitorSelectionModel competitorSelectionProvider;
|
||||
ArrayList<CompetitorDTO> compList = new ArrayList<>();
|
||||
private com.sap.sse.gwt.client.player.Timer timer;
|
||||
|
||||
public PreLeaderBoardWithImagePresenterImpl(AbstractPreRaceLeaderBoardWithImagePlace place,
|
||||
public PreLiveRaceLeaderBoardWithImagePresenterImpl(AbstractPreRaceLeaderBoardWithImagePlace place,
|
||||
AutoPlayClientFactory clientFactory, PreLeaderboardWithImageView slide1ViewImpl) {
|
||||
super(place, clientFactory);
|
||||
this.view = slide1ViewImpl;
|
||||
@@ -88,40 +89,41 @@ public class PreLeaderBoardWithImagePresenterImpl
|
||||
SailingServiceAsync sailingService = getClientFactory().getSailingService();
|
||||
ErrorReporter errorReporter = getClientFactory().getErrorReporter();
|
||||
view.startingWith(this, panel);
|
||||
view.nextRace(getSlideCtx().getPreLiveRace());
|
||||
|
||||
RegattaAndRaceIdentifier lifeRace = getSlideCtx().getLiveRace();
|
||||
RegattaAndRaceIdentifier liveRace = getSlideCtx().getPreLiveRace();
|
||||
ArrayList<String> racesToShow = null;
|
||||
if (lifeRace != null) {
|
||||
if (liveRace != null) {
|
||||
racesToShow = new ArrayList<>();
|
||||
// racesToShow.add(lifeRace.getRaceName());
|
||||
// racesToShow.add(lifeRace.getRaceName());
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
final LeaderboardSettings leaderboardSettings = new LeaderboardSettings(null, null, null, null, null,
|
||||
racesToShow, null, false, null, lifeRace.getRaceName(), /* ascending */ true,
|
||||
racesToShow, null, false, null, liveRace.getRaceName(), /* ascending */ true,
|
||||
/* updateUponPlayStateChange */ true, RaceColumnSelectionStrategies.EXPLICIT,
|
||||
/* showAddedScores */ false, /* showOverallRacesCompleted */ false, true, false, false, true);
|
||||
|
||||
GWT.log("event " + getSlideCtx().getEvent());
|
||||
competitorSelectionProvider = new CompetitorSelectionModel(/* hasMultiSelection */ false);
|
||||
|
||||
com.sap.sse.gwt.client.player.Timer timer = new com.sap.sse.gwt.client.player.Timer(
|
||||
timer = new com.sap.sse.gwt.client.player.Timer(
|
||||
// perform the first request as "live" but don't by default auto-play
|
||||
PlayModes.Live, PlayStates.Playing,
|
||||
/* delayBetweenAutoAdvancesInMilliseconds */ LeaderboardEntryPoint.DEFAULT_REFRESH_INTERVAL_MILLIS);
|
||||
leaderboardPanel = new NoRaceColumnsSixtyInchLeaderboard(sailingService, new AsyncActionsExecutor(), leaderboardSettings,
|
||||
true, lifeRace, competitorSelectionProvider, timer, null,
|
||||
leaderboardPanel = new NoRaceColumnsSixtyInchLeaderboard(sailingService, new AsyncActionsExecutor(),
|
||||
leaderboardSettings, true, liveRace, competitorSelectionProvider, timer, null,
|
||||
getSlideCtx().getContextDefinition().getLeaderboardName(), errorReporter, StringMessages.INSTANCE, null,
|
||||
false, null, false, null, false, true, false, false, false);
|
||||
view.setLeaderBoard(leaderboardPanel);
|
||||
selectionTimer.schedule(AnimationPanel.DELAY + AnimationPanel.ANIMATION_DURATION);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
timer.pause();
|
||||
selectionTimer.cancel();
|
||||
view.onStop();
|
||||
}
|
||||
+16
-4
@@ -8,14 +8,17 @@ import com.google.gwt.user.client.ui.Image;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.ResizeComposite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.shared.SixtyInchLeaderBoard;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sse.gwt.client.panels.ResizableFlowPanel;
|
||||
|
||||
public class PreLeaderBoardWithImageViewImpl extends ResizeComposite implements PreLeaderboardWithImageView {
|
||||
private static IdleLeaderBoardWithFlagsViewImplUiBinder uiBinder = GWT.create(IdleLeaderBoardWithFlagsViewImplUiBinder.class);
|
||||
public class PreLiveRaceLeaderBoardWithImageViewImpl extends ResizeComposite implements PreLeaderboardWithImageView {
|
||||
private static IdleLeaderBoardWithFlagsViewImplUiBinder uiBinder = GWT
|
||||
.create(IdleLeaderBoardWithFlagsViewImplUiBinder.class);
|
||||
|
||||
interface IdleLeaderBoardWithFlagsViewImplUiBinder extends UiBinder<Widget, PreLeaderBoardWithImageViewImpl> {
|
||||
interface IdleLeaderBoardWithFlagsViewImplUiBinder extends UiBinder<Widget, PreLiveRaceLeaderBoardWithImageViewImpl> {
|
||||
}
|
||||
|
||||
@UiField
|
||||
@@ -24,6 +27,9 @@ public class PreLeaderBoardWithImageViewImpl extends ResizeComposite implements
|
||||
@UiField
|
||||
ResizableFlowPanel infoHolder;
|
||||
|
||||
@UiField
|
||||
Label bottomInfoPanel;
|
||||
|
||||
@UiField
|
||||
Image image;
|
||||
@UiField
|
||||
@@ -41,7 +47,7 @@ public class PreLeaderBoardWithImageViewImpl extends ResizeComposite implements
|
||||
|
||||
}
|
||||
|
||||
public PreLeaderBoardWithImageViewImpl(ImageProvider provider) {
|
||||
public PreLiveRaceLeaderBoardWithImageViewImpl(ImageProvider provider) {
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
this.provider = provider;
|
||||
}
|
||||
@@ -83,4 +89,10 @@ public class PreLeaderBoardWithImageViewImpl extends ResizeComposite implements
|
||||
public void onStop() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void nextRace(RegattaAndRaceIdentifier race) {
|
||||
bottomInfoPanel
|
||||
.setText(StringMessages.INSTANCE.next() + " " + race.getRegattaName() + " " + race.getRaceName());
|
||||
}
|
||||
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
|
||||
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:rf="urn:import:com.sap.sse.gwt.client.panels">
|
||||
<ui:with field="res"
|
||||
type="com.sap.sailing.gwt.autoplay.client.resources.SixtyInchBundle" />
|
||||
<ui:style>
|
||||
.left {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
width: 50%;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.right {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
right: 0px;
|
||||
height: 100%;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
width: 100%;
|
||||
height: 80px;
|
||||
font-size: 50px;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
background-color: #008fcc;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.image {
|
||||
top: 5%;
|
||||
display: block;
|
||||
margin: auto;
|
||||
min-width: 50%;
|
||||
height: 85%;
|
||||
width: auto;
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
|
||||
.subline1 {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.subline2 {
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.subline3 {
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
</ui:style>
|
||||
<rf:ResizableFlowPanel styleName="{res.style.slideBackground}">
|
||||
<rf:ResizableFlowPanel ui:field="leaderBoardHolder"
|
||||
styleName="{style.left}" />
|
||||
<rf:ResizableFlowPanel ui:field="infoHolder"
|
||||
styleName="{style.right}">
|
||||
<g:Image ui:field="image" styleName="{style.image}" />
|
||||
<g:Label ui:field="subline1" styleName="{style.subline1}" />
|
||||
<g:Label ui:field="subline2" styleName="{style.subline2}" />
|
||||
<g:Label ui:field="subline3" styleName="{style.subline3}" />
|
||||
</rf:ResizableFlowPanel>
|
||||
<rf:ResizableFlowPanel ui:field="nextRace"
|
||||
styleName="{style.bottom}">
|
||||
<g:Label ui:field="bottomInfoPanel" />
|
||||
</rf:ResizableFlowPanel>
|
||||
</rf:ResizableFlowPanel>
|
||||
</ui:UiBinder>
|
||||
+1
-1
@@ -43,7 +43,7 @@ public class PreRaceRacemapPresenterImpl extends AutoPlayPresenterConfigured<Pre
|
||||
view.showErrorNoLive(this, panel, getPlace().getError());
|
||||
return;
|
||||
}
|
||||
view.nextRace(getSlideCtx().getLiveRace());
|
||||
view.nextRace(getSlideCtx().getPreLiveRace());
|
||||
reloadStatistics();
|
||||
reloadStatistics = new Timer() {
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@
|
||||
|
||||
.bottom {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
height: 80px;
|
||||
font-size: 50px;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
|
||||
+163
-7
@@ -3,16 +3,32 @@ package com.sap.sailing.gwt.autoplay.client.utils;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.web.bindery.event.shared.EventBus;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.gwt.home.communication.SailingDispatchSystem;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorColorProvider;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorColorProviderImpl;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapLifecycle;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings.ZoomTypes;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
@@ -24,14 +40,14 @@ import com.sap.sse.gwt.client.player.Timer;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
|
||||
public class AutoplayHelper {
|
||||
private static final long WAIT_TIME_AFTER_END_OF_RACE_MIILIS = 60 * 1000; // 1 min
|
||||
|
||||
private static final long WAIT_TIME_AFTER_END_OF_RACE_MIILIS = 60 * 1000; // 1 min
|
||||
private static final RaceMapResources raceMapResources = GWT.create(RaceMapResources.class);
|
||||
private static RaceTimesInfoProvider raceTimesInfoProvider;
|
||||
private static Timer raceboardTimer = new Timer(PlayModes.Live, /* delayBetweenAutoAdvancesInMilliseconds */1000l);
|
||||
public static final AsyncActionsExecutor asyncActionsExecutor = new AsyncActionsExecutor();
|
||||
|
||||
public static void getLiveRace(SailingServiceAsync sailingService,
|
||||
ErrorReporter errorReporter, EventDTO event, String leaderBoardName, SailingDispatchSystem dispatch,
|
||||
public static void getLiveRace(SailingServiceAsync sailingService, ErrorReporter errorReporter, EventDTO event,
|
||||
String leaderBoardName, SailingDispatchSystem dispatch,
|
||||
AsyncCallback<Pair<Long, RegattaAndRaceIdentifier>> callback) {
|
||||
raceboardTimer.reset();
|
||||
raceboardTimer.setLivePlayDelayInMillis(1000);
|
||||
@@ -72,8 +88,7 @@ public class AutoplayHelper {
|
||||
raceboardTimer.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest,
|
||||
clientTimeWhenResponseWasReceived);
|
||||
Pair<Long, RegattaAndRaceIdentifier> timeToStartAndRaceIdentifier = checkForLiveRace(
|
||||
selectedLeaderboard, serverTimeDuringRequest,
|
||||
raceTimesInfoProvider);
|
||||
selectedLeaderboard, serverTimeDuringRequest, raceTimesInfoProvider);
|
||||
callback.onSuccess(timeToStartAndRaceIdentifier);
|
||||
}
|
||||
});
|
||||
@@ -106,7 +121,8 @@ public class AutoplayHelper {
|
||||
if (raceIdentifier != null) {
|
||||
RaceTimesInfoDTO raceTimes = raceTimesInfos.get(raceIdentifier);
|
||||
if (raceTimes != null && raceTimes.startOfTracking != null && raceTimes.getStartOfRace() != null
|
||||
&& (raceTimes.endOfRace == null || serverTimeDuringRequest.getTime() < raceTimes.endOfRace.getTime()+WAIT_TIME_AFTER_END_OF_RACE_MIILIS)) {
|
||||
&& (raceTimes.endOfRace == null || serverTimeDuringRequest
|
||||
.getTime() < raceTimes.endOfRace.getTime() + WAIT_TIME_AFTER_END_OF_RACE_MIILIS)) {
|
||||
long startTimeInMs = raceTimes.getStartOfRace().getTime();
|
||||
long delayToLiveInMs = raceTimes.delayToLiveInMs;
|
||||
return new Pair<Long, RegattaAndRaceIdentifier>(
|
||||
@@ -117,4 +133,144 @@ public class AutoplayHelper {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static class RVWrapper {
|
||||
|
||||
public RVWrapper(RaceMap raceboardPerspective2, CompetitorSelectionModel competitorSelectionProvider) {
|
||||
this.raceboardPerspective = raceboardPerspective2;
|
||||
this.csel = competitorSelectionProvider;
|
||||
}
|
||||
|
||||
public RaceMap raceboardPerspective;
|
||||
public CompetitorSelectionModel csel;
|
||||
}
|
||||
|
||||
public static void create(SailingServiceAsync sailingService, ErrorReporter errorReporter, String leaderBoardName,
|
||||
UUID eventId, EventDTO event, EventBus eventBus, SailingDispatchSystem sailingDispatchSystem,
|
||||
RegattaAndRaceIdentifier regattaAndRaceIdentifier, AsyncCallback<RVWrapper> callback) {
|
||||
GWT.log("Creating map for " + regattaAndRaceIdentifier);
|
||||
raceboardTimer.reset();
|
||||
raceboardTimer.setLivePlayDelayInMillis(1000);
|
||||
raceboardTimer.setRefreshInterval(1000);
|
||||
|
||||
if (raceTimesInfoProvider == null) {
|
||||
raceTimesInfoProvider = new RaceTimesInfoProvider(sailingService, AutoplayHelper.asyncActionsExecutor,
|
||||
errorReporter, new ArrayList<RegattaAndRaceIdentifier>(), 10000l);
|
||||
}
|
||||
raceTimesInfoProvider.reset();
|
||||
|
||||
StrippedLeaderboardDTO selectedLeaderboard = AutoplayHelper.getSelectedLeaderboard(event, leaderBoardName);
|
||||
|
||||
sailingService.getCompetitorsOfLeaderboard(leaderBoardName, new AsyncCallback<Iterable<CompetitorDTO>>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(Iterable<CompetitorDTO> competitors) {
|
||||
loadRaceTimes(selectedLeaderboard, new RaceTimesInfoProviderListener() {
|
||||
|
||||
@Override
|
||||
public void raceTimesInfosReceived(Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo,
|
||||
long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest,
|
||||
long clientTimeWhenResponseWasReceived) {
|
||||
|
||||
raceboardTimer.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest,
|
||||
clientTimeWhenResponseWasReceived);
|
||||
raceboardTimer.play();
|
||||
|
||||
if (regattaAndRaceIdentifier != null) {
|
||||
sailingService.getCompetitorBoats(regattaAndRaceIdentifier,
|
||||
new AsyncCallback<Map<CompetitorDTO, BoatDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(Map<CompetitorDTO, BoatDTO> result) {
|
||||
createRaceMapIfNotExist(regattaAndRaceIdentifier, selectedLeaderboard,
|
||||
result, competitors, sailingService,
|
||||
AutoplayHelper.asyncActionsExecutor, errorReporter, raceboardTimer,
|
||||
callback, clientTimeWhenResponseWasReceived,
|
||||
serverTimeDuringRequest, clientTimeWhenRequestWasSent,
|
||||
raceTimesInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
callback.onFailure(
|
||||
new IllegalStateException("Error getting Competitor Boats"));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
callback.onFailure(new IllegalStateException("No Life Race Found"));
|
||||
}
|
||||
}
|
||||
}, raceTimesInfoProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
callback.onFailure(new IllegalStateException("Error getting Competitors"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected static void loadRaceTimes(AbstractLeaderboardDTO selectedLeaderboard,
|
||||
RaceTimesInfoProviderListener callback, RaceTimesInfoProvider raceTimesInfoProvider) {
|
||||
for (RaceColumnDTO race : selectedLeaderboard.getRaceList()) {
|
||||
for (FleetDTO fleet : race.getFleets()) {
|
||||
RegattaAndRaceIdentifier raceIdentifier = race.getRaceIdentifier(fleet);
|
||||
if (raceIdentifier != null && !raceTimesInfoProvider.containsRaceIdentifier(raceIdentifier)) {
|
||||
raceTimesInfoProvider.addRaceIdentifier(raceIdentifier, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
raceTimesInfoProvider.forceTimesInfosUpdate();
|
||||
raceTimesInfoProvider.addRaceTimesInfoProviderListener(new RaceTimesInfoProviderListener() {
|
||||
private boolean alreadyfired;
|
||||
|
||||
@Override
|
||||
public void raceTimesInfosReceived(Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo,
|
||||
long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest,
|
||||
long clientTimeWhenResponseWasReceived) {
|
||||
if (alreadyfired) {
|
||||
return;
|
||||
}
|
||||
alreadyfired = true;
|
||||
callback.raceTimesInfosReceived(raceTimesInfo, clientTimeWhenRequestWasSent, serverTimeDuringRequest,
|
||||
clientTimeWhenResponseWasReceived);
|
||||
raceTimesInfoProvider.removeRaceTimesInfoProviderListener(this);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private static void createRaceMapIfNotExist(RegattaAndRaceIdentifier currentLiveRace,
|
||||
StrippedLeaderboardDTO selectedLeaderboard, Map<CompetitorDTO, BoatDTO> result,
|
||||
Iterable<CompetitorDTO> competitors, SailingServiceAsync sailingService,
|
||||
AsyncActionsExecutor asyncActionsExecutor, ErrorReporter errorReporter, Timer raceboardTimer,
|
||||
AsyncCallback<RVWrapper> callback, long clientTimeWhenResponseWasReceived, Date serverTimeDuringRequest,
|
||||
long clientTimeWhenRequestWasSent, Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfos) {
|
||||
|
||||
ArrayList<ZoomTypes> typesToConsiderOnZoom = new ArrayList<>();
|
||||
// Other zoom types such as BOATS, TAILS or WINDSENSORS are not currently used as default zoom types.
|
||||
typesToConsiderOnZoom.add(ZoomTypes.BUOYS);
|
||||
typesToConsiderOnZoom.add(ZoomTypes.BOATS);
|
||||
RaceMapZoomSettings autoFollowRace = new RaceMapZoomSettings(typesToConsiderOnZoom, true);
|
||||
|
||||
RaceMapSettings settings = new RaceMapSettings(autoFollowRace, new RaceMapHelpLinesSettings(), false, 15,
|
||||
100000l, false, RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS, false, true, false, false, false, false,
|
||||
RaceMapSettings.getDefaultManeuvers(), false);
|
||||
|
||||
RaceMapLifecycle raceMapLifecycle = new RaceMapLifecycle(StringMessages.INSTANCE);
|
||||
|
||||
final CompetitorColorProvider colorProvider = new CompetitorColorProviderImpl(currentLiveRace, result);
|
||||
CompetitorSelectionModel competitorSelectionProvider = new CompetitorSelectionModel(
|
||||
/* hasMultiSelection */ true, colorProvider);
|
||||
competitorSelectionProvider.setCompetitors(competitors);
|
||||
RaceMap raceboardPerspective = new RaceMap(null, null, raceMapLifecycle, settings, sailingService,
|
||||
asyncActionsExecutor, errorReporter, raceboardTimer, competitorSelectionProvider,
|
||||
StringMessages.INSTANCE, currentLiveRace, raceMapResources, false);
|
||||
raceboardPerspective.raceTimesInfosReceived(raceTimesInfos, clientTimeWhenRequestWasSent,
|
||||
serverTimeDuringRequest, clientTimeWhenResponseWasReceived);
|
||||
// raceTimesInfoProvider.addRaceTimesInfoProviderListener(raceboardPerspective);
|
||||
raceboardTimer.setPlayMode(PlayModes.Live);
|
||||
// wait for one update
|
||||
raceboardPerspective.onResize();
|
||||
callback.onSuccess(new RVWrapper(raceboardPerspective, competitorSelectionProvider));
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.utils;
|
||||
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
|
||||
public class CompetitorImageProvider implements ImageProvider {
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.utils;
|
||||
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
import com.sap.sailing.gwt.autoplay.client.places.screens.preliveraceloop.leaderboard.PreLiveRaceLeaderBoardWithImageViewImpl.ImageProvider;
|
||||
|
||||
public class FlagImageProvider implements ImageProvider {
|
||||
|
||||
|
||||
-185
@@ -1,185 +0,0 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.web.bindery.event.shared.EventBus;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.BoatDTO;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.gwt.home.communication.SailingDispatchSystem;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorColorProvider;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorColorProviderImpl;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProvider;
|
||||
import com.sap.sailing.gwt.ui.client.RaceTimesInfoProviderListener;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapHelpLinesSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapLifecycle;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapResources;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMapZoomSettings.ZoomTypes;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
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;
|
||||
|
||||
public class RaceMapHelper {
|
||||
private static final RaceMapResources raceMapResources = GWT.create(RaceMapResources.class);
|
||||
private static Timer raceboardTimer = new Timer(PlayModes.Live, /* delayBetweenAutoAdvancesInMilliseconds */1000l);
|
||||
private static RaceTimesInfoProvider raceTimesInfoProvider;
|
||||
private static RaceMap raceboardPerspective;
|
||||
|
||||
public static class RVWrapper {
|
||||
|
||||
public RVWrapper(RaceMap raceboardPerspective2, CompetitorSelectionModel competitorSelectionProvider) {
|
||||
this.raceboardPerspective = raceboardPerspective2;
|
||||
this.csel = competitorSelectionProvider;
|
||||
}
|
||||
|
||||
public RaceMap raceboardPerspective;
|
||||
public CompetitorSelectionModel csel;
|
||||
}
|
||||
|
||||
public static void create(SailingServiceAsync sailingService, ErrorReporter errorReporter, String leaderBoardName,
|
||||
UUID eventId, EventDTO event, EventBus eventBus, SailingDispatchSystem sailingDispatchSystem,
|
||||
RegattaAndRaceIdentifier regattaAndRaceIdentifier, AsyncCallback<RVWrapper> callback) {
|
||||
GWT.log("Creating map for " + regattaAndRaceIdentifier);
|
||||
raceboardTimer.reset();
|
||||
raceboardTimer.setLivePlayDelayInMillis(1000);
|
||||
raceboardTimer.setRefreshInterval(1000);
|
||||
|
||||
if (raceTimesInfoProvider == null) {
|
||||
raceTimesInfoProvider = new RaceTimesInfoProvider(sailingService, AutoplayHelper.asyncActionsExecutor,
|
||||
errorReporter, new ArrayList<RegattaAndRaceIdentifier>(), 10000l);
|
||||
}
|
||||
raceTimesInfoProvider.reset();
|
||||
|
||||
StrippedLeaderboardDTO selectedLeaderboard = AutoplayHelper.getSelectedLeaderboard(event, leaderBoardName);
|
||||
|
||||
sailingService.getCompetitorsOfLeaderboard(leaderBoardName, new AsyncCallback<Iterable<CompetitorDTO>>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(Iterable<CompetitorDTO> competitors) {
|
||||
loadRaceTimes(selectedLeaderboard, new RaceTimesInfoProviderListener() {
|
||||
|
||||
@Override
|
||||
public void raceTimesInfosReceived(Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo,
|
||||
long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest,
|
||||
long clientTimeWhenResponseWasReceived) {
|
||||
|
||||
raceboardTimer.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest,
|
||||
clientTimeWhenResponseWasReceived);
|
||||
raceboardTimer.play();
|
||||
|
||||
if (regattaAndRaceIdentifier != null) {
|
||||
sailingService.getCompetitorBoats(regattaAndRaceIdentifier,
|
||||
new AsyncCallback<Map<CompetitorDTO, BoatDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(Map<CompetitorDTO, BoatDTO> result) {
|
||||
createRaceMapIfNotExist(regattaAndRaceIdentifier, selectedLeaderboard,
|
||||
result, competitors,
|
||||
sailingService, AutoplayHelper.asyncActionsExecutor, errorReporter,
|
||||
raceboardTimer, callback, clientTimeWhenResponseWasReceived,
|
||||
serverTimeDuringRequest, clientTimeWhenRequestWasSent,
|
||||
raceTimesInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
callback.onFailure(
|
||||
new IllegalStateException("Error getting Competitor Boats"));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
callback.onFailure(new IllegalStateException("No Life Race Found"));
|
||||
}
|
||||
}
|
||||
}, raceTimesInfoProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
callback.onFailure(new IllegalStateException("Error getting Competitors"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected static void loadRaceTimes(AbstractLeaderboardDTO selectedLeaderboard,
|
||||
RaceTimesInfoProviderListener callback, RaceTimesInfoProvider raceTimesInfoProvider) {
|
||||
for (RaceColumnDTO race : selectedLeaderboard.getRaceList()) {
|
||||
for (FleetDTO fleet : race.getFleets()) {
|
||||
RegattaAndRaceIdentifier raceIdentifier = race.getRaceIdentifier(fleet);
|
||||
if (raceIdentifier != null && !raceTimesInfoProvider.containsRaceIdentifier(raceIdentifier)) {
|
||||
raceTimesInfoProvider.addRaceIdentifier(raceIdentifier, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
raceTimesInfoProvider.forceTimesInfosUpdate();
|
||||
raceTimesInfoProvider.addRaceTimesInfoProviderListener(new RaceTimesInfoProviderListener() {
|
||||
private boolean alreadyfired;
|
||||
|
||||
@Override
|
||||
public void raceTimesInfosReceived(Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo,
|
||||
long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest,
|
||||
long clientTimeWhenResponseWasReceived) {
|
||||
if (alreadyfired) {
|
||||
return;
|
||||
}
|
||||
alreadyfired = true;
|
||||
callback.raceTimesInfosReceived(raceTimesInfo, clientTimeWhenRequestWasSent, serverTimeDuringRequest,
|
||||
clientTimeWhenResponseWasReceived);
|
||||
raceTimesInfoProvider.removeRaceTimesInfoProviderListener(this);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private static void createRaceMapIfNotExist(RegattaAndRaceIdentifier currentLiveRace,
|
||||
StrippedLeaderboardDTO selectedLeaderboard, Map<CompetitorDTO, BoatDTO> result,
|
||||
Iterable<CompetitorDTO> competitors, SailingServiceAsync sailingService,
|
||||
AsyncActionsExecutor asyncActionsExecutor, ErrorReporter errorReporter, Timer raceboardTimer,
|
||||
AsyncCallback<RVWrapper> callback, long clientTimeWhenResponseWasReceived, Date serverTimeDuringRequest,
|
||||
long clientTimeWhenRequestWasSent, Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfos) {
|
||||
|
||||
ArrayList<ZoomTypes> typesToConsiderOnZoom = new ArrayList<>();
|
||||
// Other zoom types such as BOATS, TAILS or WINDSENSORS are not currently used as default zoom types.
|
||||
typesToConsiderOnZoom.add(ZoomTypes.BUOYS);
|
||||
typesToConsiderOnZoom.add(ZoomTypes.BOATS);
|
||||
RaceMapZoomSettings autoFollowRace = new RaceMapZoomSettings(typesToConsiderOnZoom, true);
|
||||
|
||||
RaceMapSettings settings = new RaceMapSettings(autoFollowRace, new RaceMapHelpLinesSettings(), false, 15,
|
||||
100000l, false, RaceMapSettings.DEFAULT_BUOY_ZONE_RADIUS, false, true, false, false, false, false,
|
||||
RaceMapSettings.getDefaultManeuvers(), false);
|
||||
|
||||
RaceMapLifecycle raceMapLifecycle = new RaceMapLifecycle(StringMessages.INSTANCE);
|
||||
|
||||
final CompetitorColorProvider colorProvider = new CompetitorColorProviderImpl(currentLiveRace, result);
|
||||
CompetitorSelectionModel competitorSelectionProvider = new CompetitorSelectionModel(
|
||||
/* hasMultiSelection */ true, colorProvider);
|
||||
competitorSelectionProvider.setCompetitors(competitors);
|
||||
raceboardPerspective = new RaceMap(null, null, raceMapLifecycle, settings, sailingService, asyncActionsExecutor,
|
||||
errorReporter, raceboardTimer, competitorSelectionProvider, StringMessages.INSTANCE, currentLiveRace,
|
||||
raceMapResources, false);
|
||||
raceboardPerspective.raceTimesInfosReceived(raceTimesInfos, clientTimeWhenRequestWasSent,
|
||||
serverTimeDuringRequest, clientTimeWhenResponseWasReceived);
|
||||
// raceTimesInfoProvider.addRaceTimesInfoProviderListener(raceboardPerspective);
|
||||
raceboardTimer.setPlayMode(PlayModes.Live);
|
||||
// wait for one update
|
||||
raceboardPerspective.onResize();
|
||||
callback.onSuccess(new RVWrapper(raceboardPerspective, competitorSelectionProvider));
|
||||
}
|
||||
}
|
||||
+1
@@ -1818,4 +1818,5 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
|
||||
String unknownLeaderboardType(String name);
|
||||
String selectCompetitorsToEliminate();
|
||||
String trackedRaceAlreadyLinked();
|
||||
String noData();
|
||||
}
|
||||
+1
@@ -1796,3 +1796,4 @@ showRacePlaceColumn=Show race place
|
||||
estimatedDistance=Estimated Distance
|
||||
estimatedTime=Estimated Time
|
||||
nothingUpcoming=There are currently no further planned races
|
||||
noData=No data is available
|
||||
+66
-63
@@ -1420,72 +1420,75 @@ public class RaceMap extends AbstractCompositeComponent<RaceMapSettings> impleme
|
||||
double bearingOfCombinedWindInDeg = windFix.trueWindBearingDeg;
|
||||
double rotatedBearingDeg1 = 0.0;
|
||||
double rotatedBearingDeg2 = 0.0;
|
||||
switch (lastBoatFix.legType) {
|
||||
case UPWIND:
|
||||
case DOWNWIND: {
|
||||
rotatedBearingDeg1 = bearingOfCombinedWindInDeg + 90.0;
|
||||
if (rotatedBearingDeg1 >= 360.0) {
|
||||
rotatedBearingDeg1 -= 360.0;
|
||||
}
|
||||
rotatedBearingDeg2 = bearingOfCombinedWindInDeg - 90.0;
|
||||
if (rotatedBearingDeg2 < 0.0) {
|
||||
rotatedBearingDeg2 += 360.0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case REACHING: {
|
||||
rotatedBearingDeg1 = legInfoDTO.legBearingInDegrees + 90.0;
|
||||
if (rotatedBearingDeg1 >= 360.0) {
|
||||
rotatedBearingDeg1 -= 360.0;
|
||||
}
|
||||
rotatedBearingDeg2 = legInfoDTO.legBearingInDegrees - 90.0;
|
||||
if (rotatedBearingDeg2 < 0.0) {
|
||||
rotatedBearingDeg2 += 360.0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
MVCArray<LatLng> nextPath = MVCArray.newInstance();
|
||||
LatLng advantageLinePos1 = calculatePositionAlongRhumbline(posAheadOfFirstBoat,
|
||||
coordinateSystem.mapDegreeBearing(rotatedBearingDeg1), advantageLineLength.scale(0.5));
|
||||
LatLng advantageLinePos2 = calculatePositionAlongRhumbline(posAheadOfFirstBoat,
|
||||
coordinateSystem.mapDegreeBearing(rotatedBearingDeg2), advantageLineLength.scale(0.5));
|
||||
if (advantageLine == null) {
|
||||
PolylineOptions options = PolylineOptions.newInstance();
|
||||
options.setClickable(true);
|
||||
options.setGeodesic(true);
|
||||
options.setStrokeColor("#000000");
|
||||
options.setStrokeWeight(1);
|
||||
options.setStrokeOpacity(0.5);
|
||||
|
||||
advantageLine = Polyline.newInstance(options);
|
||||
advantageTimer = new AdvantageLineAnimator(advantageLine);
|
||||
MVCArray<LatLng> pointsAsArray = MVCArray.newInstance();
|
||||
pointsAsArray.insertAt(0, advantageLinePos1);
|
||||
pointsAsArray.insertAt(1, advantageLinePos2);
|
||||
advantageLine.setPath(pointsAsArray);
|
||||
advantageLine.setMap(map);
|
||||
Hoverline advantageHoverline = new Hoverline(advantageLine, options, this);
|
||||
|
||||
advantageLineMouseOverHandler = new AdvantageLineMouseOverMapHandler(
|
||||
bearingOfCombinedWindInDeg, new Date(windFix.measureTimepoint));
|
||||
advantageLine.addMouseOverHandler(advantageLineMouseOverHandler);
|
||||
advantageHoverline.addMouseOutMoveHandler(new MouseOutMapHandler() {
|
||||
@Override
|
||||
public void onEvent(MouseOutMapEvent event) {
|
||||
map.setTitle("");
|
||||
if(lastBoatFix.legType != null){
|
||||
switch (lastBoatFix.legType) {
|
||||
case UPWIND:
|
||||
case DOWNWIND: {
|
||||
rotatedBearingDeg1 = bearingOfCombinedWindInDeg + 90.0;
|
||||
if (rotatedBearingDeg1 >= 360.0) {
|
||||
rotatedBearingDeg1 -= 360.0;
|
||||
}
|
||||
rotatedBearingDeg2 = bearingOfCombinedWindInDeg - 90.0;
|
||||
if (rotatedBearingDeg2 < 0.0) {
|
||||
rotatedBearingDeg2 += 360.0;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
nextPath.push(advantageLinePos1);
|
||||
nextPath.push(advantageLinePos2);
|
||||
advantageTimer.setNextPositionAndTransitionMillis(nextPath, timeForPositionTransitionMillis);
|
||||
if (advantageLineMouseOverHandler != null) {
|
||||
advantageLineMouseOverHandler.setTrueWindBearing(bearingOfCombinedWindInDeg);
|
||||
advantageLineMouseOverHandler.setDate(new Date(windFix.measureTimepoint));
|
||||
}
|
||||
break;
|
||||
case REACHING: {
|
||||
rotatedBearingDeg1 = legInfoDTO.legBearingInDegrees + 90.0;
|
||||
if (rotatedBearingDeg1 >= 360.0) {
|
||||
rotatedBearingDeg1 -= 360.0;
|
||||
}
|
||||
rotatedBearingDeg2 = legInfoDTO.legBearingInDegrees - 90.0;
|
||||
if (rotatedBearingDeg2 < 0.0) {
|
||||
rotatedBearingDeg2 += 360.0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
MVCArray<LatLng> nextPath = MVCArray.newInstance();
|
||||
LatLng advantageLinePos1 = calculatePositionAlongRhumbline(posAheadOfFirstBoat,
|
||||
coordinateSystem.mapDegreeBearing(rotatedBearingDeg1), advantageLineLength.scale(0.5));
|
||||
LatLng advantageLinePos2 = calculatePositionAlongRhumbline(posAheadOfFirstBoat,
|
||||
coordinateSystem.mapDegreeBearing(rotatedBearingDeg2), advantageLineLength.scale(0.5));
|
||||
if (advantageLine == null) {
|
||||
PolylineOptions options = PolylineOptions.newInstance();
|
||||
options.setClickable(true);
|
||||
options.setGeodesic(true);
|
||||
options.setStrokeColor("#000000");
|
||||
options.setStrokeWeight(1);
|
||||
options.setStrokeOpacity(0.5);
|
||||
|
||||
advantageLine = Polyline.newInstance(options);
|
||||
advantageTimer = new AdvantageLineAnimator(advantageLine);
|
||||
MVCArray<LatLng> pointsAsArray = MVCArray.newInstance();
|
||||
pointsAsArray.insertAt(0, advantageLinePos1);
|
||||
pointsAsArray.insertAt(1, advantageLinePos2);
|
||||
advantageLine.setPath(pointsAsArray);
|
||||
advantageLine.setMap(map);
|
||||
Hoverline advantageHoverline = new Hoverline(advantageLine, options, this);
|
||||
|
||||
advantageLineMouseOverHandler = new AdvantageLineMouseOverMapHandler(
|
||||
bearingOfCombinedWindInDeg, new Date(windFix.measureTimepoint));
|
||||
advantageLine.addMouseOverHandler(advantageLineMouseOverHandler);
|
||||
advantageHoverline.addMouseOutMoveHandler(new MouseOutMapHandler() {
|
||||
@Override
|
||||
public void onEvent(MouseOutMapEvent event) {
|
||||
map.setTitle("");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
nextPath.push(advantageLinePos1);
|
||||
nextPath.push(advantageLinePos2);
|
||||
advantageTimer.setNextPositionAndTransitionMillis(nextPath, timeForPositionTransitionMillis);
|
||||
if (advantageLineMouseOverHandler != null) {
|
||||
advantageLineMouseOverHandler.setTrueWindBearing(bearingOfCombinedWindInDeg);
|
||||
advantageLineMouseOverHandler.setDate(new Date(windFix.measureTimepoint));
|
||||
}
|
||||
}
|
||||
drawAdvantageLine = true;
|
||||
}
|
||||
drawAdvantageLine = true;
|
||||
|
||||
}
|
||||
}
|
||||
if (!drawAdvantageLine) {
|
||||
|
||||
-1
@@ -579,7 +579,6 @@ public abstract class LeaderboardPanel extends AbstractCompositeComponent<Leader
|
||||
}
|
||||
|
||||
protected Widget createToolbarPanel() {
|
||||
GWT.log("createToolbarPanel()");
|
||||
informationPanel = new FlowPanel();
|
||||
informationPanel.setStyleName(STYLE_LEADERBOARD_INFO);
|
||||
scoreCorrectionLastUpdateTimeLabel = new Label("");
|
||||
|
||||
Reference in new issue
Block a user