improved the way the UI informed about the change of the selected leaderboard in a multileaderobard

This commit is contained in:
fmittag committed 2015-11-26 14:07:19 +01:00
1 parent 9434c48e8c
commit 84b744c7d0
4 files changed
+72 -19

No files matched your search

@@ -28,6 +28,8 @@ import com.sap.sailing.gwt.home.desktop.partials.old.LeaderboardDelegate;
import com.sap.sailing.gwt.ui.client.DebugIdHelper;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.SelectedLeaderboardChangeListener;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
import com.sap.sailing.gwt.ui.leaderboard.MultiLeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter;
@@ -36,7 +38,7 @@ import com.sap.sse.gwt.client.player.Timer.PlayModes;
import com.sap.sse.gwt.client.player.Timer.PlayStates;
import com.sap.sse.gwt.client.shared.components.SettingsDialog;
public class OldMultiLeaderboard extends Composite {
public class OldMultiLeaderboard extends Composite implements SelectedLeaderboardChangeListener {
private static OldMultiLeaderboardUiBinder uiBinder = GWT.create(OldMultiLeaderboardUiBinder.class);
interface OldMultiLeaderboardUiBinder extends UiBinder<Widget, OldMultiLeaderboard> {
@@ -169,16 +171,12 @@ public class OldMultiLeaderboard extends Composite {
public void setMultiLeaderboard(MultiLeaderboardPanel multiLeaderboardPanel, final Timer timer) {
this.autoRefreshTimer = timer;
this.multiLeaderboardPanel = multiLeaderboardPanel;
this.multiLeaderboardPanel.addSelectedLeaderboardChangeListener(this);
oldMultiLeaderboardPanel.add(multiLeaderboardPanel);
}
public void updatedMultiLeaderboard(LeaderboardDTO leaderboard, boolean hasLiveRace) {
if(multiLeaderboardPanel.getSelectedLeaderboardPanel() != null) {
busyIndicatorDiv.removeAllChildren();
busyIndicatorDiv.appendChild(multiLeaderboardPanel.getSelectedLeaderboardPanel().getBusyIndicator().getElement());
busyIndicatorDiv.appendChild(emptyDivElement);
}
if(leaderboard != null) {
String comment = leaderboard.getComment() != null ? leaderboard.getComment() : "";
String scoringScheme = leaderboard.scoringScheme != null ? ScoringSchemeTypeFormatter.getDescription(leaderboard.scoringScheme, StringMessages.INSTANCE) : "";
@@ -209,6 +207,13 @@ public class OldMultiLeaderboard extends Composite {
}
}
}
@Override
public void onSelectedLeaderboardChanged(LeaderboardPanel selectedLeaderboard) {
busyIndicatorDiv.removeAllChildren();
busyIndicatorDiv.appendChild(selectedLeaderboard.getBusyIndicator().getElement());
busyIndicatorDiv.appendChild(emptyDivElement);
}
public interface OldMultiLeaderboardDelegate extends LeaderboardDelegate<MultiLeaderboardPanel>{
}
@@ -3,8 +3,10 @@ package com.sap.sailing.gwt.ui.leaderboard;
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;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.dom.client.Style.FontWeight;
@@ -35,7 +37,7 @@ import com.sap.sse.gwt.client.useragent.UserAgentDetails;
* A panel managing multiple {@link LeaderboardPanel}s (e.g. from a meta leaderboard) so that the user can switch between them.
* @author Frank
*/
public class MultiLeaderboardPanel extends AbstractLazyComponent<LeaderboardSettings> implements TimeListener {
public class MultiLeaderboardPanel extends AbstractLazyComponent<LeaderboardSettings> implements TimeListener, SelectedLeaderboardChangeProvider {
private LeaderboardPanel selectedLeaderboardPanel;
private FlowPanel selectedLeaderboardFlowPanel;
@@ -60,7 +62,8 @@ public class MultiLeaderboardPanel extends AbstractLazyComponent<LeaderboardSett
private final String metaLeaderboardName;
private final boolean isEmbedded;
private List<LeaderboardUpdateListener> leaderboardUpdateListener;
private final Set<LeaderboardUpdateListener> leaderboardUpdateListeners;
private final Set<SelectedLeaderboardChangeListener> selectedLeaderboardChangeListeners;
public MultiLeaderboardPanel(SailingServiceAsync sailingService, String metaLeaderboardName, AsyncActionsExecutor asyncActionsExecutor,
Timer timer, boolean isEmbedded, String preselectedLeaderboardName, RaceIdentifier preselectedRace,
@@ -81,7 +84,8 @@ public class MultiLeaderboardPanel extends AbstractLazyComponent<LeaderboardSett
selectedLeaderboardPanel = null;
leaderboardNamesAndDisplayNames = new ArrayList<Util.Pair<String, String>>();
leaderboardNamesAndSettings = new HashMap<String, LeaderboardSettings>();
leaderboardUpdateListener = new ArrayList<LeaderboardUpdateListener>();
leaderboardUpdateListeners = new HashSet<LeaderboardUpdateListener>();
selectedLeaderboardChangeListeners = new HashSet<SelectedLeaderboardChangeListener>();
}
private LeaderboardSettings getOrCreateLeaderboardSettings(String leaderboardName, LeaderboardSettings currentLeaderboardSettings) {
@@ -152,7 +156,7 @@ public class MultiLeaderboardPanel extends AbstractLazyComponent<LeaderboardSett
}
public void addLeaderboardUpdateListener(LeaderboardUpdateListener listener) {
this.leaderboardUpdateListener.add(listener);
this.leaderboardUpdateListeners.add(listener);
}
public void setLeaderboardNames(List<Util.Pair<String, String>> newLeaderboardNamesAndDisplayNames) {
@@ -177,10 +181,10 @@ public class MultiLeaderboardPanel extends AbstractLazyComponent<LeaderboardSett
});
}
public LeaderboardPanel getSelectedLeaderboardPanel() {
return selectedLeaderboardPanel;
}
// public LeaderboardPanel getSelectedLeaderboardPanel() {
// return selectedLeaderboardPanel;
// }
//
private void updateLeaderboardSelection() {
if(leaderboardsTabPanel != null) {
leaderboardsTabPanel.clear();
@@ -219,16 +223,16 @@ public class MultiLeaderboardPanel extends AbstractLazyComponent<LeaderboardSett
selectedLeaderboardFlowPanel = (FlowPanel) leaderboardsTabPanel.getWidget(newTabIndex);
LeaderboardSettings newLeaderboardSettings = getOrCreateLeaderboardSettings(newSelectedLeaderboardName, leaderboardNamesAndSettings.get(selectedLeaderboardName));
selectedLeaderboardPanel = new LeaderboardPanel(sailingService, asyncActionsExecutor, newLeaderboardSettings, isEmbedded,
LeaderboardPanel newSelectedLeaderboardPanel = new LeaderboardPanel(sailingService, asyncActionsExecutor, newLeaderboardSettings, isEmbedded,
/* preselectedRace*/ null, new CompetitorSelectionModel(true), timer,
null, newSelectedLeaderboardName, errorReporter, stringMessages, userAgent,
showRaceDetails, /* competitorSearchTextBox */ null, /* showSelectionCheckbox */ true, /* raceTimesInfoProvider */null,
false, /* adjustTimerDelay */ true, /*autoApplyTopNFilter*/ false, false);
selectedLeaderboardFlowPanel.add(selectedLeaderboardPanel);
for(LeaderboardUpdateListener listener: leaderboardUpdateListener) {
selectedLeaderboardPanel.addLeaderboardUpdateListener(listener);
selectedLeaderboardFlowPanel.add(newSelectedLeaderboardPanel);
for(LeaderboardUpdateListener listener: leaderboardUpdateListeners) {
newSelectedLeaderboardPanel.addLeaderboardUpdateListener(listener);
}
setSelectedLeaderboard(newSelectedLeaderboardPanel);
} else {
if(selectedLeaderboardPanel != null && selectedLeaderboardFlowPanel != null) {
selectedLeaderboardPanel.removeAllListeners();
@@ -258,4 +262,23 @@ public class MultiLeaderboardPanel extends AbstractLazyComponent<LeaderboardSett
}
}
@Override
public void addSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener) {
selectedLeaderboardChangeListeners.add(listener);
}
@Override
public void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener) {
selectedLeaderboardChangeListeners.remove(listener);
}
@Override
public void setSelectedLeaderboard(LeaderboardPanel selectedLeaderboard) {
if(this.selectedLeaderboardPanel != selectedLeaderboard) {
this.selectedLeaderboardPanel = selectedLeaderboard;
for (SelectedLeaderboardChangeListener listener : selectedLeaderboardChangeListeners) {
listener.onSelectedLeaderboardChanged(selectedLeaderboardPanel);
}
}
}
}
@@ -0,0 +1,14 @@
package com.sap.sailing.gwt.ui.leaderboard;
/**
* Allows UI components to observe a change of the selected leaderboard in a Multi-Leaderboard scenario.
*/
public interface SelectedLeaderboardChangeListener {
/**
* @param selectedLeaderboard the selected non-<code>null</code> LeaderboardPanel
*/
void onSelectedLeaderboardChanged(LeaderboardPanel selectedLeaderboard);
}
@@ -0,0 +1,11 @@
package com.sap.sailing.gwt.ui.leaderboard;
public interface SelectedLeaderboardChangeProvider {
void addSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener);
void removeSelectedLeaderboardChangeListener(SelectedLeaderboardChangeListener listener);
void setSelectedLeaderboard(LeaderboardPanel selectedLeaderboard);
}