Adding display options based on UI.

This commit is contained in:
Nidhi Sawhney committed 2012-05-08 13:36:10 +02:00
1 parent f6a65351df
commit f4104a9659
8 files changed
+274 -97

No files matched your search

@@ -2,11 +2,13 @@ package com.sap.sailing.gwt.ui.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
import com.sap.sailing.gwt.ui.shared.WindLatticeDTO;
import com.sap.sailing.gwt.ui.shared.WindLatticeGenParamsDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO.WindPattern;
@RemoteServiceRelativePath("simulator")
public interface SimulatorService extends RemoteService {
@@ -16,4 +18,8 @@ public interface SimulatorService extends RemoteService {
public WindLatticeDTO getWindLatice(WindLatticeGenParamsDTO params);
public WindFieldDTO getWindField(WindFieldGenParamsDTO params);
public WindPattern[] getWindPatterns();
public BoatClassDTO[] getBoatClasses();
}
@@ -1,11 +1,13 @@
package com.sap.sailing.gwt.ui.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
import com.sap.sailing.gwt.ui.shared.WindLatticeDTO;
import com.sap.sailing.gwt.ui.shared.WindLatticeGenParamsDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO.WindPattern;
public interface SimulatorServiceAsync {
@@ -17,4 +19,7 @@ public interface SimulatorServiceAsync {
void getWindField(WindFieldGenParamsDTO params,
AsyncCallback<WindFieldDTO> callback);
void getWindPatterns(AsyncCallback<WindPattern[]> callback);
void getBoatClasses(AsyncCallback<BoatClassDTO[]> callback);
}
@@ -294,4 +294,37 @@ public interface StringMessages extends Messages {
String finishLine();
String advantageLine();
String courseMiddleLine();
/*Start of simulator related messages*/
String simulator();
String optionsBar();
String update();
String setup();
String pattern();
String strength();
String oscillation();
String oscillating();
String amplitude();
String frequency();
String noise();
String sailing();
String boatClass();
String optimality();
String maximumTurns();
String raceDirection();
String upWind();
String downWind();
String strategies();
String omniscient();
String opportunistic();
String mixed();
String maps();
String startEnd();
String course();
String summary();
String replay();
String display();
/*End of simulator related messages*/
}
@@ -289,3 +289,31 @@ startLine=Start line
finishLine=Finish line
advantageLine=Advantage line
courseMiddleLine=Course middle line
simulator=Simulator
optionsBar=Optionsbar
update=Update
setup=Setup
pattern=Pattern
strength=Strength(in kn)
oscillation=Oscillation
oscillating=Oscillating
amplitude=Amplitude(in Grad)
frequency=Frequency(in 1/h)
noise=Noise
sailing=Sailing
boatClass=Boat Class
optimality=Optimality
maximumTurns=Maximum Turns
raceDirection=Race Direction
upWind=Upwind
downWind=Downwind
strategies=Strategies
omniscient=Omniscient
opportunistic=Opportunistic
mixed=Mixed
maps=Maps
startEnd=Start-End
course=Course
summary=Summary
replay=Replay
display=Display
@@ -290,3 +290,31 @@ startLine=Startlinie
finishLine=Ziellinie
advantageLine=Führungslinie
courseMiddleLine=Kursmittellinie
simulator=Simulator
optionsBar=Optionsbar
update=Update
setup=Setup
pattern=Pattern
strength=Strength(in kn)
oscillation=Oscillation
oscillating=Oscillating
amplitude=Amplitude(in Grad)
frequency=Frequency(in 1/h)
noise=Noise
sailing=Sailing
boatClass=Boat Class
optimality=Optimality
maximumTurns=Maximum Turns
raceDirection=Race Direction
upWind=Upwind
downWind=Downwind
strategies=Strategies
omniscient=Omniscient
opportunistic=Opportunistic
mixed=Mixed
maps=Maps
startEnd=Start-End
course=Course
summary=Summary
replay=Replay
display=Display
@@ -12,10 +12,12 @@ import com.sap.sailing.domain.common.impl.DegreePosition;
import com.sap.sailing.domain.common.impl.NauticalMileDistance;
import com.sap.sailing.domain.tracking.Wind;
import com.sap.sailing.gwt.ui.client.SimulatorService;
import com.sap.sailing.gwt.ui.shared.BoatClassDTO;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.WindDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO.WindPattern;
import com.sap.sailing.gwt.ui.shared.WindLatticeDTO;
import com.sap.sailing.gwt.ui.shared.WindLatticeGenParamsDTO;
import com.sap.sailing.simulator.WindField;
@@ -137,4 +139,14 @@ public class SimulatorServiceImpl extends RemoteServiceServlet implements Simul
}
public WindPattern[] getWindPatterns() {
return WindFieldGenParamsDTO.WindPattern.values();
}
public BoatClassDTO[] getBoatClasses() {
BoatClassDTO boatClassDTO = new BoatClassDTO("49er");
return new BoatClassDTO[]{boatClassDTO};
}
}
@@ -3,7 +3,11 @@ package com.sap.sailing.gwt.ui.shared;
import java.io.Serializable;
public class WindFieldGenParamsDTO implements Serializable {
public enum WindPattern {
CONSTANT,
OSCILLATING
}
private static final long serialVersionUID = 1L;
private PositionDTO northWest;
@@ -15,6 +15,7 @@ import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.SplitLayoutPanel;
@@ -25,129 +26,187 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.PositionDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO;
import com.sap.sailing.gwt.ui.shared.WindFieldGenParamsDTO.WindPattern;
public class SimulatorMainPanel extends SplitLayoutPanel {
private FlowPanel leftPanel = new FlowPanel();
private FlowPanel rightPanel = new FlowPanel();
Button updateButton;
Button courseInputButton;
RadioButton summaryButton = new RadioButton("Map Display Options", "Summary");
RadioButton replayButton = new RadioButton("Map Display Options", "Replay");
RadioButton windDisplayButton = new RadioButton("Map Display Options", "Wind Display");
RadioButton summaryButton;
RadioButton replayButton;
RadioButton windDisplayButton;
private WindFieldCanvasOverlay windFieldCanvasOverlay;
private RaceCourseCanvasOverlay raceCourseCanvasOverlay;
private final StringMessages stringMessages;
private MapWidget mapw;
private SimulatorServiceAsync simulatorSvc;
private ListBox patternSelector = new ListBox();
private ListBox boatSelector = new ListBox();
private static Logger logger = Logger.getLogger("com.sap.sailing");
public SimulatorMainPanel(MapWidget mapw, StringMessages stringMessages,SimulatorServiceAsync svc) {
//splitPanel = new SplitLayoutPanel();
public SimulatorMainPanel(MapWidget mapw, StringMessages stringMessages, SimulatorServiceAsync svc) {
// splitPanel = new SplitLayoutPanel();
super();
this.mapw = mapw;
this.stringMessages = stringMessages;
this.simulatorSvc = svc;
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel("Simulator", stringMessages);
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.simulator(), stringMessages);
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
this.addNorth(logoAndTitlePanel,68);
//leftPanel.getElement().getStyle().setBackgroundColor("#4f4f4f");
this.addNorth(logoAndTitlePanel, 68);
// leftPanel.getElement().getStyle().setBackgroundColor("#4f4f4f");
createOptionsPanelTop();
createOptionsPanel();
createMapOptionsPanel();
this.addWest(leftPanel, 400);
//leftPanel.getElement().getStyle().setFloat(Style.Float.LEFT);
// leftPanel.getElement().getStyle().setFloat(Style.Float.LEFT);
rightPanel.getElement().getStyle().setBackgroundColor("#e0e0e0");
this.add(rightPanel);
//rightPanel.getElement().getStyle().setFloat(Style.Float.RIGHT);
// rightPanel.getElement().getStyle().setFloat(Style.Float.RIGHT);
addOverlays();
}
private void createOptionsPanelTop() {
HorizontalPanel optionsPanel = new HorizontalPanel();
optionsPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
optionsPanel.setTitle("Optionsbar");
Label options = new Label("Optionsbar");
Label options = new Label(stringMessages.optionsBar());
optionsPanel.setSize("100%", "7%");
optionsPanel.add(options);
optionsPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
initUpdateButton();
//updateButton.getElement().getStyle().setFloat(Style.Float.RIGHT);
// updateButton.getElement().getStyle().setFloat(Style.Float.RIGHT);
optionsPanel.add(updateButton);
leftPanel.add(optionsPanel);
}
private void createOptionsPanel() {
FlowPanel controlPanel = new FlowPanel();
controlPanel.setSize("100%", "92%");
controlPanel.setTitle("Control Settings");
controlPanel.getElement().getStyle().setBackgroundColor(" #e0e0e0");
Label windSetupLabel = new Label("Wind Setup");
String windSetup = stringMessages.wind() + " " + stringMessages.setup();
Label windSetupLabel = new Label(windSetup);
controlPanel.add(windSetupLabel);
leftPanel.add(controlPanel);
Label pattern = new Label(stringMessages.pattern());
controlPanel.add(pattern);
simulatorSvc.getWindPatterns(new AsyncCallback<WindPattern[]>() {
@Override
public void onFailure(Throwable message) {
Window.alert("Failed to initialize wind patterns\n" + message);
}
@Override
public void onSuccess(WindPattern[] patterns) {
for (int i = 0; i < patterns.length; ++i) {
patternSelector.addItem(patterns[i].toString());
}
}
});
controlPanel.add(patternSelector);
leftPanel.add(controlPanel);
}
private void createSailingSetup(Panel controlPanel) {
String sailingSetup = stringMessages.sailing() + " " + stringMessages.setup();
Label sailingSetupLabel = new Label(sailingSetup);
controlPanel.add(sailingSetupLabel);
Label boatClassLabel = new Label(stringMessages.boatClass());
controlPanel.add(boatClassLabel);
simulatorSvc.getWindPatterns(new AsyncCallback<WindPattern[]>() {
@Override
public void onFailure(Throwable message) {
Window.alert("Failed to initialize wind patterns\n" + message);
}
@Override
public void onSuccess(WindPattern[] patterns) {
for (int i = 0; i < patterns.length; ++i) {
patternSelector.addItem(patterns[i].toString());
}
}
});
controlPanel.add(patternSelector);
leftPanel.add(controlPanel);
}
private void createMapOptionsPanel() {
HorizontalPanel mapOptions = new HorizontalPanel();
mapOptions.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
mapOptions.setSize("100%", "7%");
mapOptions.setTitle("Maps");
Label mapsLabel = new Label("Maps");
Label mapsLabel = new Label(stringMessages.maps());
mapOptions.add(mapsLabel);
mapOptions.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
initCourseInputButton();
mapOptions.add(courseInputButton);
rightPanel.add(mapOptions);
initDisplayOptions(mapOptions);
FlowPanel mapPanel = new FlowPanel();
mapPanel.setTitle("Map");
mapPanel.add(mapw);
//mapPanel.setSize("100%", "80%");
// mapPanel.setSize("100%", "80%");
rightPanel.add(mapPanel);
}
private void addOverlays() {
raceCourseCanvasOverlay = new RaceCourseCanvasOverlay();
mapw.addOverlay(raceCourseCanvasOverlay);
windFieldCanvasOverlay = new WindFieldCanvasOverlay();
//mapw.addOverlay(windFieldCanvasOverlay);
// mapw.addOverlay(windFieldCanvasOverlay);
}
private void generateWindField() {
logger.info("In generateWindField");
WindFieldGenParamsDTO params = new WindFieldGenParamsDTO();
PositionDTO startPointDTO = new PositionDTO(raceCourseCanvasOverlay.startPoint.getLatitude(), raceCourseCanvasOverlay.startPoint.getLongitude());
PositionDTO endPointDTO = new PositionDTO(raceCourseCanvasOverlay.endPoint.getLatitude(), raceCourseCanvasOverlay.endPoint.getLongitude());
PositionDTO startPointDTO = new PositionDTO(raceCourseCanvasOverlay.startPoint.getLatitude(),
raceCourseCanvasOverlay.startPoint.getLongitude());
PositionDTO endPointDTO = new PositionDTO(raceCourseCanvasOverlay.endPoint.getLatitude(),
raceCourseCanvasOverlay.endPoint.getLongitude());
params.setNorthWest(startPointDTO);
params.setSouthEast(endPointDTO);
params.setxRes(5);
params.setyRes(5);
params.setWindBearing(45);
params.setWindSpeed(7.2);
simulatorSvc.getWindField(params, new AsyncCallback<WindFieldDTO>() {
@Override
public void onFailure(Throwable message) {
@@ -160,106 +219,108 @@ public class SimulatorMainPanel extends SplitLayoutPanel {
refreshWindFieldOverlay(wl);
}
});
}
private void refreshWindFieldOverlay(WindFieldDTO wl) {
windFieldCanvasOverlay.setWindField(wl);
windFieldCanvasOverlay.redraw(true);
}
}
private void initUpdateButton() {
updateButton = new Button("Update");
updateButton = new Button(stringMessages.update());
updateButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
if (raceCourseCanvasOverlay.isCourseSet()) {
if (windDisplayButton.isChecked()) {
mapw.addOverlay(windFieldCanvasOverlay);
generateWindField();
//raceCourseCanvasOverlay.setVisible(true);
if (windDisplayButton.getValue()) {
mapw.addOverlay(windFieldCanvasOverlay);
generateWindField();
// raceCourseCanvasOverlay.setVisible(true);
}
} else {
Window.alert("No course set, please initialize the course with Start-End Input");
}
}
});
}
private void initCourseInputButton() {
courseInputButton = new Button("Start-End");
courseInputButton = new Button(stringMessages.startEnd());
courseInputButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
mapw.removeOverlay(windFieldCanvasOverlay);
//raceCourseCanvasOverlay.setSelected(true);
//raceCourseCanvasOverlay.setVisible(true);
mapw.removeOverlay(windFieldCanvasOverlay);
// raceCourseCanvasOverlay.setSelected(true);
// raceCourseCanvasOverlay.setVisible(true);
raceCourseCanvasOverlay.reset();
raceCourseCanvasOverlay.redraw(true);
raceCourseCanvasOverlay.redraw(true);
}
});
});
}
private void initDisplayOptions(Panel mapOptions) {
summaryButton = new RadioButton("Map Display Options", stringMessages.summary());
summaryButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
mapw.removeOverlay(windFieldCanvasOverlay);
mapw.removeOverlay(windFieldCanvasOverlay);
}
});
replayButton = new RadioButton("Map Display Options", stringMessages.replay());
replayButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
mapw.removeOverlay(windFieldCanvasOverlay);
mapw.removeOverlay(windFieldCanvasOverlay);
}
});
windDisplayButton = new RadioButton("Map Display Options", stringMessages.wind() + " "
+ stringMessages.display());
windDisplayButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent arg0) {
if (raceCourseCanvasOverlay.isCourseSet()) {
if (windDisplayButton.isChecked()) {
mapw.addOverlay(windFieldCanvasOverlay);
generateWindField();
//raceCourseCanvasOverlay.setVisible(true);
}
mapw.addOverlay(windFieldCanvasOverlay);
generateWindField();
// raceCourseCanvasOverlay.setVisible(true);
} else {
Window.alert("No course set, please initialize the course with Start-End Input");
}
}
});
HorizontalPanel p = new HorizontalPanel();
DecoratorPanel d = new DecoratorPanel();
p.add(summaryButton);
p.add(replayButton);
p.add(windDisplayButton);
//windDisplayButton.setValue(true);
d.add(p);
mapOptions.add(d);
}
}