various design adjustments to the timeslider

This commit is contained in:
fmittag
2012-02-08 17:20:19 +01:00
parent 631d80bd3f
commit 27a0301ad1
16 changed files with 152 additions and 50 deletions
@@ -31,6 +31,7 @@ h1 {
/** Most GWT widgets already have a style name defined */
.gwt-DialogBox {
width: 400px;
z-index: 20;
}
.dialogVPanel {
@@ -34,10 +34,10 @@ import com.sap.sailing.gwt.ui.client.TimePanel;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialog;
public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListener, ProvidesResize, RequiresResize,
@@ -157,16 +157,16 @@ public class RaceMapPanel extends FormPanel implements EventDisplayer, TimeListe
break;
}
sailingService.getLegTimePositions(selectedRace.getRaceIdentifier(),
new AsyncCallback<List<LegTimepointDTO>>() {
sailingService.getRaceTimesInfo(selectedRace.getRaceIdentifier(),
new AsyncCallback<RaceTimesInfoDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error obtaining leg timepoints: " + caught.getMessage());
}
@Override
public void onSuccess(List<LegTimepointDTO> legTimepoints) {
timePanel.setLegMarkers(legTimepoints);
public void onSuccess(RaceTimesInfoDTO legTimepoints) {
timePanel.setLegMarkers(legTimepoints.getLegTimes());
}
});
}
@@ -11,6 +11,12 @@ public interface ClientResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/play.png")
ImageResource playIcon();
@Source("com/sap/sailing/gwt/ui/client/images/pause.png")
ImageResource pauseIcon();
@Source("com/sap/sailing/gwt/ui/client/images/timeslider-pause-icon.png")
ImageResource timesliderPauseIcon();
@Source("com/sap/sailing/gwt/ui/client/images/timeslider-play-active-icon.png")
ImageResource timesliderPlayActiveIcon();
@Source("com/sap/sailing/gwt/ui/client/images/timeslider-play-inactive-icon.png")
ImageResource timesliderPlayInactiveIcon();
}
@@ -21,11 +21,11 @@ import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
import com.sap.sailing.gwt.ui.shared.MarkDTO;
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDTO;
@@ -62,7 +62,7 @@ public interface SailingService extends RemoteService {
Map<CompetitorDTO, List<GPSFixDTO>> getBoatPositions(RaceIdentifier raceIdentifier, Map<CompetitorDTO, Date> from,
Map<CompetitorDTO, Date> to, boolean extrapolate) throws NoWindException;
List<LegTimepointDTO> getLegTimePositions(RaceIdentifier raceIdentifier);
RaceTimesInfoDTO getRaceTimesInfo(RaceIdentifier raceIdentifier);
List<MarkDTO> getMarkPositions(RaceIdentifier raceIdentifier, Date date);
@@ -20,12 +20,12 @@ import com.sap.sailing.gwt.ui.shared.GPSFixDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
import com.sap.sailing.gwt.ui.shared.MarkDTO;
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RaceInLeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.SwissTimingRaceRecordDTO;
import com.sap.sailing.gwt.ui.shared.TracTracConfigurationDTO;
@@ -108,7 +108,7 @@ public interface SailingServiceAsync {
Map<CompetitorDTO, Date> from, Map<CompetitorDTO, Date> to,
boolean extrapolate, AsyncCallback<Map<CompetitorDTO, List<GPSFixDTO>>> callback);
void getLegTimePositions(RaceIdentifier raceIdentifier, AsyncCallback<List<LegTimepointDTO>> callback);
void getRaceTimesInfo(RaceIdentifier raceIdentifier, AsyncCallback<RaceTimesInfoDTO> callback);
void getMarkPositions(RaceIdentifier raceIdentifier, Date date, AsyncCallback<List<MarkDTO>> asyncCallback);
@@ -18,13 +18,14 @@ import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IntegerBox;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.LegTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.components.Component;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialog;
import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent;
@@ -32,7 +33,6 @@ import com.sap.sailing.gwt.ui.shared.controls.slider.SliderBar;
public class TimePanel extends FormPanel implements Component<TimePanelSettings>, TimeListener, PlayStateListener, RequiresResize {
private final Timer timer;
private final Button playPauseButton;
private final IntegerBox playSpeedBox;
private final Label timeDelayLabel;
private final Label timeLabel;
@@ -43,6 +43,9 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
private final StringMessages stringMessages;
private final DateTimeFormat dateFormatter = DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_FULL);
private final DateTimeFormat timeFormatter = DateTimeFormat.getFormat("HH:mm:ss");
private final ImageResource playButtonImg;
private final ImageResource pauseButtonImg;
private final Image playPauseImage;
private static ClientResources resources = GWT.create(ClientResources.class);
@@ -68,6 +71,10 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
VerticalPanel vp = new VerticalPanel();
vp.setSize("100%", "100%");
playButtonImg = resources.timesliderPlayActiveIcon();
pauseButtonImg = resources.timesliderPauseIcon();
playPauseImage = new Image(playButtonImg);
sliderBar = new SliderBar();
sliderBar.setEnabled(true);
sliderBar.setLabelFormatter(new SliderBar.LabelFormatter() {
@@ -102,8 +109,9 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
FlowPanel playControlPanel = new FlowPanel();
playControlPanel.setStyleName("timePanel-controls-play");
controlsPanel.add(playControlPanel);
playPauseButton = new Button("&gt;");
playPauseButton.addClickHandler(new ClickHandler() {
playPauseImage.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (TimePanel.this.timer.isPlaying()) {
@@ -113,7 +121,7 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
}
}
});
playControlPanel.add(playPauseButton);
playControlPanel.add(playPauseImage);
// current date and time control
FlowPanel timeControlPanel = new FlowPanel();
@@ -258,21 +266,13 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
}
}
public void setLegMarkers(List<LegTimepointDTO> legTimepoints) {
public void setLegMarkers(List<LegTimesInfoDTO> legTimepoints) {
if(sliderBar.isMinMaxInitialized()) {
sliderBar.clearMarkers();
for (LegTimepointDTO legTimepointDTO : legTimepoints) {
for (LegTimesInfoDTO legTimepointDTO : legTimepoints) {
sliderBar.addMarker(legTimepointDTO.name, new Double(legTimepointDTO.firstPassingDate.getTime()));
}
// Double minValue = sliderBar.getMinValue();
// Double maxValue = sliderBar.getMaxValue();
// int legCount = 5;
// double diff = (maxValue - minValue) / (double) legCount;
// for(int i = 0; i < legCount; i++) {
// sliderBar.addMarker("L" + (i + 1), minValue + i * diff);
// }
sliderBar.redraw();
}
}
@@ -286,7 +286,10 @@ public class TimePanel extends FormPanel implements Component<TimePanelSettings>
@Override
public void playStateChanged(boolean isPlaying) {
playPauseButton.setText(isPlaying ? "||" : ">");
if(isPlaying)
playPauseImage.setResource(pauseButtonImg);
else
playPauseImage.setResource(playButtonImg);
}
public TimePanelSettings getSettings() {
@@ -37,8 +37,8 @@ import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.UserDTO;
import com.sap.sailing.gwt.ui.shared.components.ComponentViewer;
@@ -229,16 +229,18 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
}
break;
}
sailingService.getLegTimePositions(selectedRace.getRaceIdentifier(),
new AsyncCallback<List<LegTimepointDTO>>() {
sailingService.getRaceTimesInfo(selectedRace.getRaceIdentifier(),
new AsyncCallback<RaceTimesInfoDTO>() {
@Override
public void onFailure(Throwable caught) {
errorReporter.reportError("Error obtaining leg timepoints: " + caught.getMessage());
}
@Override
public void onSuccess(List<LegTimepointDTO> legTimepoints) {
timePanel.setLegMarkers(legTimepoints);
public void onSuccess(RaceTimesInfoDTO racesTimesInfo) {
timePanel.setLegMarkers(racesTimesInfo.getLegTimes());
if (racesTimesInfo.getStartOfRace() != null)
timer.setTime(racesTimesInfo.getStartOfRace().getTime());
}
});
}
@@ -111,13 +111,14 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardEntryDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardRowDTO;
import com.sap.sailing.gwt.ui.shared.LegEntryDTO;
import com.sap.sailing.gwt.ui.shared.LegTimepointDTO;
import com.sap.sailing.gwt.ui.shared.LegTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.ManeuverDTO;
import com.sap.sailing.gwt.ui.shared.MarkDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.QuickRankDTO;
import com.sap.sailing.gwt.ui.shared.RaceDTO;
import com.sap.sailing.gwt.ui.shared.RaceInLeaderboardDTO;
import com.sap.sailing.gwt.ui.shared.RaceTimesInfoDTO;
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
import com.sap.sailing.gwt.ui.shared.SpeedWithBearingDTO;
import com.sap.sailing.gwt.ui.shared.SwissTimingConfigurationDTO;
@@ -748,11 +749,17 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
}
@Override
public List<LegTimepointDTO> getLegTimePositions(RaceIdentifier raceIdentifier) {
List<LegTimepointDTO> result = new ArrayList<LegTimepointDTO>();
public RaceTimesInfoDTO getRaceTimesInfo(RaceIdentifier raceIdentifier) {
RaceTimesInfoDTO result = null;
TrackedRace trackedRace = getExistingTrackedRace(raceIdentifier);
if (trackedRace != null) {
result = new RaceTimesInfoDTO();
List<LegTimesInfoDTO> legTimes = new ArrayList<LegTimesInfoDTO>();
result.setLegTimes(legTimes);
Iterable<TrackedLeg> trackedLegs = trackedRace.getTrackedLegs();
Date lastLegPassingTime = null;
int i = 1;
for (TrackedLeg trackedLeg : trackedLegs) {
if(i == 1) {
@@ -778,9 +785,12 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
} else {
currentCompetitorsInTime++;
if(currentCompetitorsInTime == enoughCompetitors) {
LegTimepointDTO legTimepointDTO = new LegTimepointDTO("L0");
legTimepointDTO.firstPassingDate = currentMarkPassing.getTimePoint().asDate();
result.add(legTimepointDTO);
Date passingDate = currentMarkPassing.getTimePoint().asDate();
LegTimesInfoDTO legTimepointDTO = new LegTimesInfoDTO("S");
legTimepointDTO.firstPassingDate = passingDate;
legTimes.add(legTimepointDTO);
result.setStartOfRace(passingDate);
lastLegPassingTime = passingDate;
break;
}
}
@@ -791,10 +801,22 @@ public class SailingServiceImpl extends RemoteServiceServlet implements SailingS
Waypoint to = trackedLeg.getLeg().getTo();
Iterable<MarkPassing> markPassings = trackedRace.getMarkPassingsInOrder(to);
if(markPassings != null) {
MarkPassing firstPassing = markPassings.iterator().next();
LegTimepointDTO legTimepointDTO = new LegTimepointDTO("L" + i++);
legTimepointDTO.firstPassingDate = firstPassing.getTimePoint().asDate();
result.add(legTimepointDTO);
// ensure the passing date is in the right time order
Iterator<MarkPassing> iterator = markPassings.iterator();
while (iterator.hasNext()) {
MarkPassing currentMarkPassing = iterator.next();
Date currentPassingDate = currentMarkPassing.getTimePoint().asDate();
if (lastLegPassingTime == null)
lastLegPassingTime = currentPassingDate;
if (currentPassingDate.after(lastLegPassingTime)) {
LegTimesInfoDTO legTimepointDTO = new LegTimesInfoDTO("L" + i++);
legTimepointDTO.firstPassingDate = currentPassingDate;
legTimes.add(legTimepointDTO);
lastLegPassingTime = currentPassingDate;
break;
}
}
}
}
}
@@ -4,14 +4,14 @@ import java.util.Date;
import com.google.gwt.user.client.rpc.IsSerializable;
public class LegTimepointDTO extends NamedDTO implements IsSerializable {
public class LegTimesInfoDTO extends NamedDTO implements IsSerializable {
public Date firstPassingDate;
public Date lastPassingDate;
public LegTimepointDTO() {}
public LegTimesInfoDTO() {}
public LegTimepointDTO(String name) {
public LegTimesInfoDTO(String name) {
super(name);
}
@@ -0,0 +1,70 @@
package com.sap.sailing.gwt.ui.shared;
import java.util.Date;
import java.util.List;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.domain.common.RaceIdentifier;
public class RaceTimesInfoDTO implements IsSerializable {
private RaceIdentifier raceIdentifier;
private List<LegTimesInfoDTO> legTimes;
private Date startOfRace;
private Date startOfTracking;
private Date endOfTracking;
private Date endOfRace;
public RaceTimesInfoDTO() {}
public RaceIdentifier getRaceIdentifier() {
return raceIdentifier;
}
public void setRaceIdentifier(RaceIdentifier raceIdentifier) {
this.raceIdentifier = raceIdentifier;
}
public List<LegTimesInfoDTO> getLegTimes() {
return legTimes;
}
public void setLegTimes(List<LegTimesInfoDTO> legTimes) {
this.legTimes = legTimes;
}
public Date getStartOfRace() {
return startOfRace;
}
public void setStartOfRace(Date startOfRace) {
this.startOfRace = startOfRace;
}
public Date getStartOfTracking() {
return startOfTracking;
}
public void setStartOfTracking(Date startOfTracking) {
this.startOfTracking = startOfTracking;
}
public Date getEndOfTracking() {
return endOfTracking;
}
public void setEndOfTracking(Date endOfTracking) {
this.endOfTracking = endOfTracking;
}
public Date getEndOfRace() {
return endOfRace;
}
public void setEndOfRace(Date endOfRace) {
this.endOfRace = endOfRace;
}
}
@@ -285,8 +285,6 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI
public Iterator<Widget> iterator() {
return null;
// return WidgetIterators.createWidgetIterator(this,
// new Widget[] {getContent()});
}
public boolean remove(Widget w) {
@@ -4,8 +4,8 @@
}
.gwt-SliderBar-shell .gwt-SliderBar-line {
border: 1px solid #21a0e4;
background-color: #f2f8fc;
border: 1px solid #919191;
background-color: #818181;
height: 4px;
width: 98%;
top: 22pt;
@@ -28,7 +28,7 @@
top: 16pt;
width: 1px;
height: 6pt;
background: black;
background: #919191;
overflow: hidden;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 492 B