From 1c5b82a5ae3226c35e2489781842f774336144dc Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 18 Jan 2012 18:10:11 +0100 Subject: [PATCH] added hover in WindChart --- .../gwt/ui/adminconsole/WindChart.java | 85 ++++++++----------- .../ui/leaderboard/AbstractChartPanel.java | 1 + 2 files changed, 38 insertions(+), 48 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindChart.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindChart.java index 8f94c0fb2b6..9f1ed497f7d 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindChart.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/WindChart.java @@ -1,8 +1,10 @@ package com.sap.sailing.gwt.ui.adminconsole; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -29,6 +31,8 @@ import ca.nanometrics.gflot.client.options.SeriesOptions; import ca.nanometrics.gflot.client.options.TickFormatter; import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.domain.common.WindSource; import com.sap.sailing.gwt.ui.client.ColorMap; @@ -46,7 +50,9 @@ public class WindChart implements Component { private PlotWithOverviewModel model; private final Set windSourcesToDisplay; private final ColorMap colorMap; - private final HashMap stripChartSeries; + private final Map stripChartSeries; + private final List seriesHandlersInOrder; + private final Label selectedPointLabel; private final ErrorReporter errorReporter; private PlotWithOverview plot; @@ -58,6 +64,8 @@ public class WindChart implements Component { dateFormat = DateTimeFormat.getFormat("HH:mm:ss"); this.colorMap = new ColorMap(); this.stripChartSeries = new HashMap(); + this.seriesHandlersInOrder = new ArrayList(); + this.selectedPointLabel = new Label(); } @Override @@ -67,6 +75,8 @@ public class WindChart implements Component { @Override public Widget getEntryWidget() { + VerticalPanel vp = new VerticalPanel(); + vp.add(selectedPointLabel); model = new PlotWithOverviewModel(PlotModelStrategy.defaultStrategy()); PlotOptions plotOptions = new PlotOptions(); plotOptions.setDefaultLineSeriesOptions(new LineSeriesOptions().setLineWidth(1).setShow(true)); @@ -84,11 +94,10 @@ public class WindChart implements Component { plotOptions.setGridOptions(new GridOptions().setHoverable(true).setMouseActiveRadius(5).setAutoHighlight(true)); plotOptions.setSelectionOptions(new SelectionOptions().setDragging(true).setMode("x")); // select along x-axis only for (WindSource windSource : windSourcesToDisplay) { - SeriesHandler series = model.addSeries(""+windSource.name(), colorMap.getColorByID(windSource)); + SeriesHandler series = addSeries(windSource); series.setOptions(SeriesType.LINES, getLinesOptions(/* visible */ windSourcesToDisplay.contains(windSource))); series.setOptions(SeriesType.POINTS, getPointsOptions(/* visible */ false)); series.setVisible(false); - stripChartSeries.put(windSource, series); } this.plot = new PlotWithOverview(model, plotOptions) { @Override @@ -102,45 +111,13 @@ public class WindChart implements Component { // add hover listener plot.addHoverListener(new PlotHoverListener() { public void onPlotHover(Plot plot, PlotPosition position, PlotItem item) { - /* TODO show some reasonable hover tooltip in wind strip chart - CompetitorDAO competitor = competitorID.get(seriesID.indexOf(item.getSeries())); - if (item != null && competitor != null) { - if (item.getSeries().getLabel().toLowerCase().contains("mark")){ - selectedPointLabel.setText(competitor.name + " passed " + markPassingBuoyName.get(competitor.id + (long) item.getDataPoint().getX()) +" at " + dateFormat.format(new Date((long) item.getDataPoint().getX()))); - } - else { - String unit = ""; - switch (dataToShow){ - case CURRENT_SPEED_OVER_GROUND_IN_KNOTS: - unit = stringConstants.currentSpeedOverGroundInKnotsUnit(); - break; - case DISTANCE_TRAVELED: - unit = stringConstants.distanceInMetersUnit(); - break; - case GAP_TO_LEADER_IN_SECONDS: - unit = stringConstants.gapToLeaderInSecondsUnit(); - break; - case VELOCITY_MADE_GOOD_IN_KNOTS: - unit = stringConstants.velocityMadeGoodInKnotsUnit(); - break; - case WINDWARD_DISTANCE_TO_OVERALL_LEADER: - unit = stringConstants.windwardDistanceToGoInMetersUnit(); - } - String decimalPlaces = ""; - for (int i = 0; i < dataToShow.getPrecision(); i++){ - if (i == 0){ - decimalPlaces += "."; - } - decimalPlaces += "0"; - } - NumberFormat numberFormat = NumberFormat.getFormat("0" +decimalPlaces); - selectedPointLabel.setText(competitor.name + " at " + dateFormat.format(new Date((long) item.getDataPoint().getX())) - + ": " + numberFormat.format(item.getDataPoint().getY()) + unit); - } + if (item != null) { + SeriesHandler seriesHandler = seriesHandlersInOrder.get(item.getSeriesIndex()); + WindSource windSource = getWindSource(seriesHandler); + selectedPointLabel.setText(windSource.name()); } else { - selectedPointLabel.setText(stringConstants.noSelection()); + selectedPointLabel.setText(""); } - */ } }, true); plot.addSelectionListener(new SelectionListener() { @@ -165,10 +142,25 @@ public class WindChart implements Component { plot.setLinearSelection(x1, x2); } }); -// plot.setHeight(height); -// plot.setWidth(width); plot.setOverviewHeight(60); - return plot; + vp.add(plot); + return vp; + } + + private WindSource getWindSource(SeriesHandler seriesHandler) { + for (Map.Entry e : stripChartSeries.entrySet()) { + if (e.getValue() == seriesHandler) { + return e.getKey(); + } + } + return null; + } + + private SeriesHandler addSeries(WindSource windSource) { + SeriesHandler series = model.addSeries(windSource.name(), colorMap.getColorByID(windSource)); + seriesHandlersInOrder.add(series); + stripChartSeries.put(windSource, series); + return series; } public void updateStripChartSeries(WindInfoForRaceDAO result) { @@ -184,11 +176,9 @@ public class WindChart implements Component { } } else { if (seriesHandler == null) { - seriesHandler = model.addSeries("" + windSource.name(), - colorMap.getColorByID(windSource)); + seriesHandler = addSeries(windSource); seriesHandler.setOptions(SeriesType.LINES, getLinesOptions(/* visible */ windSourcesToDisplay.contains(windSource))); seriesHandler.setOptions(SeriesType.POINTS, getPointsOptions(/* visible */ false)); - stripChartSeries.put(windSource, seriesHandler); } else { seriesHandler.clear(); } @@ -237,8 +227,7 @@ public class WindChart implements Component { windSourcesToDisplay.clear(); windSourcesToDisplay.addAll(newSettings.getWindSourcesToDisplay()); for (Map.Entry e : stripChartSeries.entrySet()) { - e.getValue().setOptions(SeriesType.LINES, getLinesOptions(windSourcesToDisplay.contains(e.getKey()))); - e.getValue().setOptions(SeriesType.POINTS, getPointsOptions(windSourcesToDisplay.contains(e.getKey()))); + e.getValue().setVisible(windSourcesToDisplay.contains(e.getKey())); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractChartPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractChartPanel.java index f1513f5fd1f..02cc377c8b4 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractChartPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/AbstractChartPanel.java @@ -409,6 +409,7 @@ public abstract class AbstractChartPanel ext // add hover listener plot.addHoverListener(new PlotHoverListener() { public void onPlotHover(Plot plot, PlotPosition position, PlotItem item) { + // FIXME can the indexOf ever find anything? seriesID is a List; item.getSeries() returns a Series object CompetitorDAO competitor = competitorID.get(seriesID.indexOf(item.getSeries())); if (item != null && competitor != null) { if (item.getSeries().getLabel().toLowerCase().contains("mark")) {