added Timer to rank chart

This commit is contained in:
Axel Uhl
2012-11-17 00:20:07 +01:00
parent 189c3e81aa
commit f940b8df6e
8 changed files with 50 additions and 14 deletions
@@ -437,4 +437,5 @@ public interface StringMessages extends Messages {
String loadingCompetitorData();
String rankNAfterRace(long l, String string);
String afterRace();
String showRankChart();
}
@@ -437,4 +437,5 @@ live=live
errorFetchingRankingChartData=Error fetching ranking chart data: {0}
loadingCompetitorData=Loading competitor data...
rankNAfterRace=Rank {0} after race {1}
afterRace=after race
afterRace=after race
showRankChart=Show rank chart
@@ -438,4 +438,5 @@ live=live
errorFetchingRankingChartData=Fehler beim Laden der Daten für das Ranglisten-Chart: {0}
loadingCompetitorData=Lade Teilnehmer-Daten
rankNAfterRace=Rang {0} nach Rennen {1}
afterRace=nach Rennen
afterRace=nach Rennen
showRankChart=Rang-Diagramm anzeigen
@@ -1232,6 +1232,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
}
};
ImageResource chartIcon = resources.chartIcon();
ImageResource rankChartIcon = resources.rankChartIcon();
ImageResource leaderboardSettingsIcon = resources.leaderboardSettingsIcon();
pauseIcon = resources.pauseIcon();
playIcon = resources.playIcon();
@@ -1247,8 +1248,8 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
playPause.addClickHandler(playPauseHandler);
playStateChanged(timer.getPlayState(), timer.getPlayMode());
refreshPanel.add(playPause);
Anchor rankChartsAnchor = new Anchor(AbstractImagePrototype.create(chartIcon).getSafeHtml());
rankChartsAnchor.setTitle(stringMessages.showCharts());
Anchor rankChartsAnchor = new Anchor(AbstractImagePrototype.create(rankChartIcon).getSafeHtml());
rankChartsAnchor.setTitle(stringMessages.showRankChart());
rankChartsAnchor.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -2096,7 +2097,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
private void showRankChartDialog() {
RankChartDialog chartDialog = new RankChartDialog(sailingService, leaderboardName, competitorSelectionProvider,
stringMessages, errorReporter, /* compactChart */ false);
timer, stringMessages, errorReporter, /* compactChart */ false);
chartDialog.show();
}
@@ -28,6 +28,9 @@ interface LeaderboardResources extends ClientBundle {
@Source("com/sap/sailing/gwt/ui/client/images/chart.png")
ImageResource chartIcon();
@Source("com/sap/sailing/gwt/ui/client/images/rankchart.png")
ImageResource rankChartIcon();
@Source("com/sap/sailing/gwt/ui/client/images/magnifier.png")
ImageResource magnifierIcon();
@@ -6,16 +6,18 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.shared.charts.LeaderboardRankChart;
public class RankChartDialog extends DialogBoxExt {
public RankChartDialog(SailingServiceAsync sailingService, String leaderboardName, CompetitorSelectionProvider competitorSelectionProvider,
StringMessages stringMessages, ErrorReporter errorReporter, boolean compactChart) {
Timer timer, StringMessages stringMessages, ErrorReporter errorReporter, boolean compactChart) {
super(new Label(stringMessages.close()));
this.setPopupPosition(15, 15);
this.setHTML(stringMessages.compareCompetitors());
this.setWidth(Window.getClientWidth() - 250 + "px");
this.setAnimationEnabled(true);
setWidget(new LeaderboardRankChart(sailingService, leaderboardName, competitorSelectionProvider, stringMessages, errorReporter, compactChart));
setWidget(new LeaderboardRankChart(sailingService, leaderboardName, competitorSelectionProvider, timer,
stringMessages, errorReporter, compactChart));
}
}
@@ -2,6 +2,7 @@ package com.sap.sailing.gwt.ui.shared.charts;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -11,6 +12,7 @@ import org.moxieapps.gwt.highcharts.client.Chart;
import org.moxieapps.gwt.highcharts.client.ChartTitle;
import org.moxieapps.gwt.highcharts.client.Color;
import org.moxieapps.gwt.highcharts.client.Credits;
import org.moxieapps.gwt.highcharts.client.Point;
import org.moxieapps.gwt.highcharts.client.Series;
import org.moxieapps.gwt.highcharts.client.ToolTip;
import org.moxieapps.gwt.highcharts.client.ToolTipData;
@@ -31,18 +33,33 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionProvider;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.client.TimeListener;
import com.sap.sailing.gwt.ui.client.Timer;
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
public class LeaderboardRankChart extends SimplePanel implements RequiresResize {
public class LeaderboardRankChart extends SimplePanel implements RequiresResize, TimeListener {
private static final int LINE_WIDTH = 1;
private final CompetitorSelectionProvider competitorSelectionProvider;
private final Map<CompetitorDTO, Series> competitorSeries;
private final Chart chart;
private final List<String> raceColumnNames;
private final Timer timer;
private final String leaderboardName;
private final StringMessages stringMessages;
private final SailingServiceAsync sailingService;
private final ErrorReporter errorReporter;
public LeaderboardRankChart(SailingServiceAsync sailingService, String leaderboardName,
CompetitorSelectionProvider competitorSelectionProvider, final StringMessages stringMessages, ErrorReporter errorReporter, boolean compactChart) {
CompetitorSelectionProvider competitorSelectionProvider, Timer timer,
final StringMessages stringMessages, ErrorReporter errorReporter, boolean compactChart) {
this.competitorSelectionProvider = competitorSelectionProvider;
this.stringMessages = stringMessages;
this.sailingService = sailingService;
this.errorReporter = errorReporter;
this.timer = timer;
timer.addTimeListener(this);
this.leaderboardName = leaderboardName;
competitorSeries = new HashMap<CompetitorDTO, Series>();
raceColumnNames = new ArrayList<String>();
chart = new Chart()
@@ -92,12 +109,12 @@ public class LeaderboardRankChart extends SimplePanel implements RequiresResize
}
setWidget(chart);
setSize("100%", "100%");
loadChartData(leaderboardName, stringMessages, errorReporter, sailingService);
// show the loading message only upon initial load
chart.showLoading(stringMessages.loadingCompetitorData());
timeChanged(timer.getTime());
}
private void loadChartData(String leaderboardName, final StringMessages stringMessages,
final ErrorReporter errorReporter, SailingServiceAsync sailingService) {
chart.showLoading(stringMessages.loadingCompetitorData());
private void loadChartData(Date date) {
sailingService.getRankedCompetitorsFromBestToWorstAfterEachRaceColumn(leaderboardName,
/* date: null means "now" or "live" */ null, new AsyncCallback<List<Pair<String,List<CompetitorDTO>>>>() {
@Override
@@ -105,6 +122,11 @@ public class LeaderboardRankChart extends SimplePanel implements RequiresResize
List<Series> chartSeries = new ArrayList<Series>(Arrays.asList(chart.getSeries()));
chart.hideLoading();
raceColumnNames.clear();
for (Series series : competitorSeries.values()) {
for (Point p : new ArrayList<Point>(Arrays.asList(series.getPoints()))) {
series.removePoint(p, /* redraw */ false, /* animation */ false);
}
}
int raceNumber = 0;
int maxCompetitorCount = 0;
for (Pair<String, List<CompetitorDTO>> entry : result) {
@@ -117,7 +139,7 @@ public class LeaderboardRankChart extends SimplePanel implements RequiresResize
chart.addSeries(series);
chartSeries.add(series);
}
series.addPoint(raceNumber, -rank);
series.addPoint(raceNumber, -rank, /* redraw */ false, /* shift */ false, /* animation */ false);
rank++;
}
raceNumber++;
@@ -160,4 +182,9 @@ public class LeaderboardRankChart extends SimplePanel implements RequiresResize
chart.redraw();
}
}
@Override
public void timeChanged(Date date) {
loadChartData(timer.getPlayMode() == PlayModes.Live ? null : date);
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B