mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 22:43:57 +00:00
added statistics to liverace view
This commit is contained in:
1 parent
b9895c529e
commit
40d1ba137c
7 files changed
+236
-40
No files matched your search
+43
-38
@@ -6,6 +6,7 @@ import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.core.shared.GWT;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.dto.AbstractLeaderboardDTO;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
@@ -44,46 +45,49 @@ public class IdleUpNextNode extends FiresPlaceNode {
|
||||
firePlaceChangeAndStartTimer();
|
||||
|
||||
if (raceTimesInfoProvider == null) {
|
||||
|
||||
raceTimesInfoProvider = new RaceTimesInfoProvider(cf.getSailingService(), AutoplayHelper.asyncActionsExecutor,
|
||||
cf.getErrorReporter(), new ArrayList<RegattaAndRaceIdentifier>(), 10000l);
|
||||
raceTimesInfoProvider.reset();
|
||||
|
||||
StrippedLeaderboardDTO selectedLeaderboard = AutoplayHelper.getSelectedLeaderboard(
|
||||
cf.getAutoPlayCtx().getEvent(), cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName());
|
||||
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() {
|
||||
|
||||
@Override
|
||||
public void raceTimesInfosReceived(Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo,
|
||||
long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest,
|
||||
long clientTimeWhenResponseWasReceived) {
|
||||
ArrayList<Pair<RegattaAndRaceIdentifier, Date>> raceToStartOfRace = new ArrayList<Pair<RegattaAndRaceIdentifier, Date>>();
|
||||
checkForRaceStarts(selectedLeaderboard, serverTimeDuringRequest, raceTimesInfoProvider,
|
||||
raceToStartOfRace);
|
||||
|
||||
Collections.sort(raceToStartOfRace, new Comparator<Pair<RegattaAndRaceIdentifier, Date>>() {
|
||||
|
||||
@Override
|
||||
public int compare(Pair<RegattaAndRaceIdentifier, Date> o1,
|
||||
Pair<RegattaAndRaceIdentifier, Date> o2) {
|
||||
return Long.compare(o1.getB().getTime(), o2.getB().getTime());
|
||||
}
|
||||
});
|
||||
place.setUpData(raceToStartOfRace);
|
||||
|
||||
}
|
||||
});
|
||||
createRaceTimeInfoProvider();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void createRaceTimeInfoProvider() {
|
||||
raceTimesInfoProvider = new RaceTimesInfoProvider(cf.getSailingService(), AutoplayHelper.asyncActionsExecutor,
|
||||
cf.getErrorReporter(), new ArrayList<RegattaAndRaceIdentifier>(), 10000l);
|
||||
raceTimesInfoProvider.reset();
|
||||
|
||||
StrippedLeaderboardDTO selectedLeaderboard = AutoplayHelper.getSelectedLeaderboard(
|
||||
cf.getAutoPlayCtx().getEvent(), cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName());
|
||||
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() {
|
||||
|
||||
@Override
|
||||
public void raceTimesInfosReceived(Map<RegattaAndRaceIdentifier, RaceTimesInfoDTO> raceTimesInfo,
|
||||
long clientTimeWhenRequestWasSent, Date serverTimeDuringRequest,
|
||||
long clientTimeWhenResponseWasReceived) {
|
||||
ArrayList<Pair<RegattaAndRaceIdentifier, Date>> raceToStartOfRace = new ArrayList<Pair<RegattaAndRaceIdentifier, Date>>();
|
||||
checkForRaceStarts(selectedLeaderboard, serverTimeDuringRequest, raceTimesInfoProvider,
|
||||
raceToStartOfRace);
|
||||
|
||||
Collections.sort(raceToStartOfRace, new Comparator<Pair<RegattaAndRaceIdentifier, Date>>() {
|
||||
|
||||
@Override
|
||||
public int compare(Pair<RegattaAndRaceIdentifier, Date> o1,
|
||||
Pair<RegattaAndRaceIdentifier, Date> o2) {
|
||||
return Long.compare(o1.getB().getTime(), o2.getB().getTime());
|
||||
}
|
||||
});
|
||||
place.setUpData(raceToStartOfRace);
|
||||
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -107,6 +111,7 @@ public class IdleUpNextNode extends FiresPlaceNode {
|
||||
for (RaceColumnDTO race : currentLeaderboard.getRaceList()) {
|
||||
for (FleetDTO fleet : race.getFleets()) {
|
||||
RegattaAndRaceIdentifier raceIdentifier = race.getRaceIdentifier(fleet);
|
||||
GWT.log("Checking starts " + raceIdentifier);
|
||||
if (raceIdentifier != null) {
|
||||
RaceTimesInfoDTO raceTimes = raceTimesInfos.get(raceIdentifier);
|
||||
if (raceTimes != null && raceTimes.startOfTracking != null && raceTimes.getStartOfRace() != null
|
||||
|
||||
+41
-1
@@ -1,5 +1,7 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.nodes;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.user.client.Timer;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory;
|
||||
import com.sap.sailing.gwt.autoplay.client.events.AutoPlayHeaderEvent;
|
||||
@@ -7,17 +9,31 @@ 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.AutoplayHelper;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper.RVWrapper;
|
||||
import com.sap.sailing.gwt.home.communication.event.sixtyinch.GetSixtyInchStatisticAction;
|
||||
import com.sap.sailing.gwt.home.communication.event.sixtyinch.GetSixtyInchStatisticDTO;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
|
||||
public class LiveRaceWithRacemapNode extends FiresPlaceNode {
|
||||
private final AutoPlayClientFactory cf;
|
||||
protected LiveRaceWithRacemapAndLeaderBoardPlace place;
|
||||
private Timer updateTimer;
|
||||
|
||||
public LiveRaceWithRacemapNode(AutoPlayClientFactory cf) {
|
||||
super(LiveRaceWithRacemapNode.class.getName());
|
||||
this.cf = cf;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
if(updateTimer != null){
|
||||
updateTimer.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
public void onStart() {
|
||||
place = new LiveRaceWithRacemapAndLeaderBoardPlace();
|
||||
AutoplayHelper.create(cf.getSailingService(), cf.getErrorReporter(),
|
||||
cf.getAutoPlayCtx().getContextDefinition().getLeaderboardName(), cf.getAutoPlayCtx().getContextDefinition().getEventId(),
|
||||
cf.getAutoPlayCtx().getEvent(), cf.getEventBus(), cf.getDispatch(), cf.getAutoPlayCtx().getLiveRace(),
|
||||
@@ -34,7 +50,6 @@ public class LiveRaceWithRacemapNode extends FiresPlaceNode {
|
||||
|
||||
@Override
|
||||
public void onSuccess(RVWrapper result) {
|
||||
LiveRaceWithRacemapAndLeaderBoardPlace place = new LiveRaceWithRacemapAndLeaderBoardPlace();
|
||||
place.setRaceMap(result.raceboardPerspective, result.csel);
|
||||
setPlaceToGo(place);
|
||||
firePlaceChangeAndStartTimer();
|
||||
@@ -42,5 +57,30 @@ public class LiveRaceWithRacemapNode extends FiresPlaceNode {
|
||||
cf.getAutoPlayCtx().getLiveRace().getRaceName()));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
updateTimer = new Timer(){
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
cf.getDispatch().execute(new GetSixtyInchStatisticAction(cf.getAutoPlayCtx().getLiveRace().getRaceName(), cf.getAutoPlayCtx().getLiveRace().getRegattaName()),
|
||||
new AsyncCallback<GetSixtyInchStatisticDTO>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
GWT.log("error getting data! " + caught.getMessage());
|
||||
caught.printStackTrace();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(GetSixtyInchStatisticDTO result) {
|
||||
place.setStatistic(result);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
updateTimer.scheduleRepeating(2000);
|
||||
};
|
||||
}
|
||||
+10
@@ -2,6 +2,7 @@ package com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapw
|
||||
|
||||
import com.google.gwt.place.shared.Place;
|
||||
import com.google.gwt.place.shared.PlaceTokenizer;
|
||||
import com.sap.sailing.gwt.home.communication.event.sixtyinch.GetSixtyInchStatisticDTO;
|
||||
import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
|
||||
|
||||
@@ -21,11 +22,16 @@ public class LiveRaceWithRacemapAndLeaderBoardPlace extends Place {
|
||||
private RaceMap raceMap;
|
||||
private Throwable error;
|
||||
private CompetitorSelectionModel raceMapSelectionProvider;
|
||||
private GetSixtyInchStatisticDTO statistic;
|
||||
|
||||
public void setRaceMap(RaceMap result, CompetitorSelectionModel csel) {
|
||||
this.raceMap = result;
|
||||
this.raceMapSelectionProvider = csel;
|
||||
}
|
||||
|
||||
public GetSixtyInchStatisticDTO getStatistic() {
|
||||
return statistic;
|
||||
}
|
||||
|
||||
public RaceMap getRaceMap() {
|
||||
return raceMap;
|
||||
@@ -43,4 +49,8 @@ public class LiveRaceWithRacemapAndLeaderBoardPlace extends Place {
|
||||
return raceMapSelectionProvider;
|
||||
}
|
||||
|
||||
public void setStatistic(GetSixtyInchStatisticDTO result) {
|
||||
statistic = result;
|
||||
}
|
||||
|
||||
}
|
||||
+39
@@ -1,22 +1,28 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.core.client.Scheduler;
|
||||
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.user.client.Timer;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.dto.LeaderboardRowDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayClientFactory;
|
||||
import com.sap.sailing.gwt.autoplay.client.app.AutoPlayPresenterConfigured;
|
||||
import com.sap.sailing.gwt.autoplay.client.shared.SixtyInchLeaderBoard;
|
||||
import com.sap.sailing.gwt.autoplay.client.utils.AutoplayHelper;
|
||||
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings;
|
||||
import com.sap.sailing.gwt.settings.client.leaderboard.LeaderboardSettings.RaceColumnSelectionStrategies;
|
||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardEntryPoint;
|
||||
import com.sap.sailing.gwt.ui.shared.WindDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
|
||||
import com.sap.sse.gwt.client.ErrorReporter;
|
||||
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
|
||||
import com.sap.sse.gwt.client.player.Timer.PlayModes;
|
||||
@@ -32,10 +38,12 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl
|
||||
private int selected = -1;
|
||||
ArrayList<CompetitorDTO> compList = new ArrayList<>();
|
||||
private com.sap.sse.gwt.client.player.Timer timer;
|
||||
private AutoPlayClientFactory cf;
|
||||
|
||||
public LiveRaceWithRacemapAndLeaderBoardPresenterImpl(LiveRaceWithRacemapAndLeaderBoardPlace place,
|
||||
AutoPlayClientFactory clientFactory, LiveRaceWithRacemapAndLeaderBoardView LifeRaceWithRacemapViewImpl) {
|
||||
super(place, clientFactory);
|
||||
this.cf = clientFactory;
|
||||
this.view = LifeRaceWithRacemapViewImpl;
|
||||
selectionTimer = new Timer() {
|
||||
@Override
|
||||
@@ -82,6 +90,37 @@ public class LiveRaceWithRacemapAndLeaderBoardPresenterImpl
|
||||
selected = 0;
|
||||
}
|
||||
selectionTimer.schedule(SWITCH_COMPETITOR_DELAY);
|
||||
|
||||
updateStatistics();
|
||||
}
|
||||
|
||||
private void updateStatistics() {
|
||||
String windSpeed = null;
|
||||
if (getPlace().getRaceMap().getLastCombinedWindTrackInfoDTO() != null) {
|
||||
for (WindSource windSource : getPlace().getRaceMap()
|
||||
.getLastCombinedWindTrackInfoDTO().windTrackInfoByWindSource.keySet()) {
|
||||
WindTrackInfoDTO windTrackInfoDTO = getPlace().getRaceMap()
|
||||
.getLastCombinedWindTrackInfoDTO().windTrackInfoByWindSource.get(windSource);
|
||||
switch (windSource.getType()) {
|
||||
case COMBINED:
|
||||
if (!windTrackInfoDTO.windFixes.isEmpty()) {
|
||||
WindDTO windDTO = windTrackInfoDTO.windFixes.get(0);
|
||||
double speedInKnots = windDTO.dampenedTrueWindSpeedInKnots;
|
||||
NumberFormat numberFormat = NumberFormat.getFormat("0.0");
|
||||
windSpeed = numberFormat.format(speedInKnots) + " " + StringMessages.INSTANCE.knotsUnit();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
List<LeaderboardRowDTO> sortedCompetitors = leaderboardPanel.getLeaderboardTable().getVisibleItems();
|
||||
if (sortedCompetitors.size() > 0) {
|
||||
view.setStatistic(windSpeed,getPlace().getStatistic().getDistance(), AutoplayHelper.durationOfCurrentLiveRaceRunning());
|
||||
}
|
||||
}
|
||||
|
||||
private void onSelect(CompetitorDTO marked) {
|
||||
|
||||
+3
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard;
|
||||
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.autoplay.client.shared.SixtyInchLeaderBoard;
|
||||
import com.sap.sailing.gwt.ui.client.shared.racemap.RaceMap;
|
||||
@@ -19,4 +20,6 @@ public interface LiveRaceWithRacemapAndLeaderBoardView {
|
||||
void scrollLeaderBoardToTop();
|
||||
|
||||
void onStop();
|
||||
|
||||
void setStatistic(String windSpeed, Distance distance, long timeSinceStart);
|
||||
}
|
||||
+41
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.gwt.autoplay.client.places.screens.liveraceloop.racemapwithleaderboard;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.i18n.client.NumberFormat;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.Timer;
|
||||
@@ -8,8 +9,10 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
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.Distance;
|
||||
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.sailing.gwt.ui.client.shared.racemap.RaceMap;
|
||||
import com.sap.sse.gwt.client.panels.ResizableFlowPanel;
|
||||
|
||||
@@ -21,6 +24,21 @@ public class LiveRaceWithRacemapAndLeaderBoardViewImpl extends ResizeComposite i
|
||||
|
||||
@UiField
|
||||
ResizableFlowPanel leaderBoardHolder;
|
||||
|
||||
@UiField
|
||||
Label statisticValue1;
|
||||
@UiField
|
||||
Label statisticProperty1;
|
||||
@UiField
|
||||
Label statisticValue2;
|
||||
@UiField
|
||||
Label statisticProperty2;
|
||||
@UiField
|
||||
Label statisticValue3;
|
||||
@UiField
|
||||
Label statisticProperty3;
|
||||
|
||||
private NumberFormat compactFormat = NumberFormat.getFormat("#.0");
|
||||
|
||||
private RaceMap rawRaceMap;
|
||||
|
||||
@@ -75,5 +93,28 @@ public class LiveRaceWithRacemapAndLeaderBoardViewImpl extends ResizeComposite i
|
||||
}
|
||||
}.schedule(50);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStatistic(String windinfo, Distance distance, long duration) {
|
||||
statisticProperty1.setText(StringMessages.INSTANCE.windSpeed());
|
||||
if(windinfo == null || windinfo.isEmpty()){
|
||||
statisticValue1.setText(StringMessages.INSTANCE.noDataFound());
|
||||
}else{
|
||||
statisticValue1.setText(windinfo);
|
||||
}
|
||||
|
||||
statisticProperty2.setText(StringMessages.INSTANCE.distance());
|
||||
if(distance == null){
|
||||
statisticValue2
|
||||
.setText(StringMessages.INSTANCE.noDataFound());
|
||||
}else{
|
||||
statisticValue2
|
||||
.setText(compactFormat.format(distance.getSeaMiles()) + " " + StringMessages.INSTANCE.seaMiles());
|
||||
}
|
||||
|
||||
statisticProperty3.setText(StringMessages.INSTANCE.durationPlain());
|
||||
statisticValue3.setText(compactFormat.format(duration/1000f/60f) + " " + StringMessages.INSTANCE.minutes());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+59
-1
@@ -17,7 +17,8 @@
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
right: 0px;
|
||||
height: 100%;
|
||||
top: 0px;
|
||||
bottom: 80px;
|
||||
width: 65%;
|
||||
}
|
||||
|
||||
@@ -45,6 +46,48 @@
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.statistics {
|
||||
position: absolute;
|
||||
background-color: black;
|
||||
width: 65%;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
height: 80px;
|
||||
font-size: 1rem;
|
||||
display: flex;
|
||||
-webkit-align-items: center;
|
||||
-moz-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
align-items: center;
|
||||
-webkit-justify-content: space-around;
|
||||
-ms-flex-pack: distribute;
|
||||
justify-content: space-around;
|
||||
background: #333;
|
||||
border-top: .3125em solid #f0ab00;
|
||||
padding: .9375em 0;
|
||||
}
|
||||
|
||||
.info-overlay__item {
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
-webkit-box-flex: 1;
|
||||
-webkit-flex: 1 0 auto;
|
||||
-moz-box-flex: 1;
|
||||
-ms-flex: 1 0 auto;
|
||||
flex: 1 0 auto;
|
||||
border-right: 1px solid #999;
|
||||
}
|
||||
|
||||
.info-overlay__item__value {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.info-overlay__item__property {
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
</ui:style>
|
||||
<rf:ResizableFlowPanel styleName="{res.style.slideBackground}">
|
||||
<rf:ResizableFlowPanel ui:field="leaderBoardHolder"
|
||||
@@ -52,5 +95,20 @@
|
||||
<rf:ResizableFlowPanel ui:field="racemap"
|
||||
styleName="{style.right}">
|
||||
</rf:ResizableFlowPanel>
|
||||
<rf:ResizableFlowPanel styleName="{style.statistics}"
|
||||
ui:field="statistics">
|
||||
<rf:ResizableFlowPanel styleName="{style.info-overlay__item}">
|
||||
<g:Label ui:field="statisticValue1" styleName="{style.info-overlay__item__value}">10.3 kts</g:Label>
|
||||
<g:Label ui:field="statisticProperty1" styleName="{style.info-overlay__item__property}">Wind</g:Label>
|
||||
</rf:ResizableFlowPanel>
|
||||
<rf:ResizableFlowPanel styleName="{style.info-overlay__item}">
|
||||
<g:Label ui:field="statisticValue2" styleName="{style.info-overlay__item__value}">10.3 kts</g:Label>
|
||||
<g:Label ui:field="statisticProperty2" styleName="{style.info-overlay__item__property}">Wind</g:Label>
|
||||
</rf:ResizableFlowPanel>
|
||||
<rf:ResizableFlowPanel styleName="{style.info-overlay__item}">
|
||||
<g:Label ui:field="statisticValue3" styleName="{style.info-overlay__item__value}">10.3 kts</g:Label>
|
||||
<g:Label ui:field="statisticProperty3" styleName="{style.info-overlay__item__property}">Wind</g:Label>
|
||||
</rf:ResizableFlowPanel>
|
||||
</rf:ResizableFlowPanel>
|
||||
</rf:ResizableFlowPanel>
|
||||
</ui:UiBinder>
|
||||
Reference in new issue
Block a user