From 60645aebaf19d23cce3a2933d0fbf7aaaba7e8cd Mon Sep 17 00:00:00 2001 From: fmittag Date: Thu, 26 Nov 2015 17:37:47 +0100 Subject: [PATCH] Changed the way the busy indicator of the LeaderboardPanel is handled in case it's shown outside of the Panel. A new BusyStateChangeListener is used instead of making the BusyIndicator public. --- .../AbstractLeaderboardFullscreenViewer.java | 8 +++ .../partials/old/EventRegattaLeaderboard.gss | 3 + .../old/EventRegattaLeaderboardResources.java | 1 + .../partials/old/LeaderboardDelegate.java | 1 + .../old/leaderboard/OldLeaderboard.java | 17 +++++- .../old/leaderboard/OldLeaderboard.ui.xml | 4 +- .../multileaderboard/OldMultiLeaderboard.java | 29 +++++---- .../OldMultiLeaderboard.ui.xml | 4 +- .../fullscreen/FullscreenContainer.java | 8 ++- .../fullscreen/FullscreenContainer.ui.xml | 3 + .../leaderboard/ExpandableSortableColumn.java | 8 +-- .../gwt/ui/leaderboard/LeaderboardPanel.java | 59 ++++++++++++------- .../EditableLeaderboardPanel.java | 20 +++---- .../MatchAndApplyScoreCorrectionsDialog.java | 4 +- .../ResultSelectionAndApplyDialog.java | 6 +- .../BusyStateChangeListener.java | 14 +++++ .../busyindicator/BusyStateProvider.java | 13 ++++ .../busyindicator/SimpleBusyIndicator.java | 3 +- .../components/IsEmbeddableComponent.java | 5 -- 19 files changed, 147 insertions(+), 63 deletions(-) create mode 100644 java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/BusyStateChangeListener.java create mode 100644 java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/BusyStateProvider.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/AbstractLeaderboardFullscreenViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/AbstractLeaderboardFullscreenViewer.java index 6e1baf957dd..a9cf371a9d4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/AbstractLeaderboardFullscreenViewer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/AbstractLeaderboardFullscreenViewer.java @@ -8,6 +8,8 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import com.sap.sailing.gwt.home.shared.partials.fullscreen.FullscreenContainer; import com.sap.sse.common.Color; +import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator; +import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator; public abstract class AbstractLeaderboardFullscreenViewer extends FullscreenContainer implements LeaderboardDelegate { @@ -19,11 +21,13 @@ public abstract class AbstractLeaderboardFullscreenViewer exte private final Label lastScoringUpdateText = new Label(); protected final Label lastScoringComment = new Label(); protected final Label scoringScheme = new Label(); + protected final BusyIndicator busyIndicator = new SimpleBusyIndicator(); public AbstractLeaderboardFullscreenViewer() { showLogo(); showBorder(); addToolbarInfo(createPanel(lastScoringUpdateText, lastScoringUpdateTime)); + addToolbarBusyIndicator(busyIndicator); addToolbarAction(autoRefreshControl); addToolbarAction(settingsControl); } @@ -88,4 +92,8 @@ public abstract class AbstractLeaderboardFullscreenViewer exte return scoringScheme.getElement(); } + @Override + public Element getBusyIndicatorElement() { + return busyIndicator.getElement(); + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/EventRegattaLeaderboard.gss b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/EventRegattaLeaderboard.gss index 7aee44185c8..32ed3aa2a5d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/EventRegattaLeaderboard.gss +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/EventRegattaLeaderboard.gss @@ -106,6 +106,9 @@ background-color: #f0ab00; } +.regattaleaderboard_meta_busyindicator { +} + .regattaleaderboard_meta_liverace { color: red; font-weight: 600; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/EventRegattaLeaderboardResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/EventRegattaLeaderboardResources.java index fee597cac95..90bef62da36 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/EventRegattaLeaderboardResources.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/EventRegattaLeaderboardResources.java @@ -30,6 +30,7 @@ public interface EventRegattaLeaderboardResources extends ClientBundle { String regattaleaderboard_meta_update_type(); String regattaleaderboard_meta_scoring_timestamp(); String regattaleaderboard_meta_update_timestamp(); + String regattaleaderboard_meta_busyindicator(); String regattaleaderboard_meta_scoring_text(); String regattaleaderboard_meta_update_text(); String regattaleaderboard_meta_reload(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/LeaderboardDelegate.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/LeaderboardDelegate.java index c1523e63036..c52d29d9d6a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/LeaderboardDelegate.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/LeaderboardDelegate.java @@ -24,4 +24,5 @@ public interface LeaderboardDelegate { Element getScoringSchemeElement(); + Element getBusyIndicatorElement(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.java index d7710ed954b..19bdcedb814 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.java @@ -31,12 +31,15 @@ import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel; import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.ui.leaderboard.ScoringSchemeTypeFormatter; +import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator; +import com.sap.sse.gwt.client.controls.busyindicator.BusyStateChangeListener; +import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator; import com.sap.sse.gwt.client.player.Timer; 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 OldLeaderboard extends Composite { +public class OldLeaderboard extends Composite implements BusyStateChangeListener { private static OldLeaderboardUiBinder uiBinder = GWT.create(OldLeaderboardUiBinder.class); interface OldLeaderboardUiBinder extends UiBinder { @@ -58,6 +61,7 @@ public class OldLeaderboard extends Composite { private LeaderboardPanel leaderboardPanel; private Timer autoRefreshTimer; private final OldLeaderboardDelegate delegate; + private final BusyIndicator busyIndicator = new SimpleBusyIndicator(); public OldLeaderboard() { this(null); @@ -70,6 +74,7 @@ public class OldLeaderboard extends Composite { settingsAnchor.setTitle(StringMessages.INSTANCE.settings()); autoRefreshAnchor.setTitle(StringMessages.INSTANCE.refresh()); fullscreenAnchor.setTitle(StringMessages.INSTANCE.openFullscreenView()); + busyIndicatorDiv.appendChild(busyIndicator.getElement()); this.delegate = delegate; this.setupFullscreenDelegate(); } @@ -167,7 +172,7 @@ public class OldLeaderboard extends Composite { this.autoRefreshTimer = timer; this.leaderboardPanel = leaderboardPanel; oldLeaderboardPanel.add(leaderboardPanel); - busyIndicatorDiv.appendChild(leaderboardPanel.getBusyIndicator().getElement()); + leaderboardPanel.addBusyStateChangeListener(this); } public void updatedLeaderboard(LeaderboardDTO leaderboard) { @@ -219,8 +224,14 @@ public class OldLeaderboard extends Composite { } lastScoringUpdateTimeDiv.getStyle().setVisibility(Visibility.HIDDEN); } - + + @Override + public void onBusyStateChange(boolean busyState) { + busyIndicator.setBusy(busyState); + } + public interface OldLeaderboardDelegate extends LeaderboardDelegate { Element getHasLiveRaceElement(); } + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.ui.xml index 17696bafc13..e6bfdd6861f 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/leaderboard/OldLeaderboard.ui.xml @@ -10,8 +10,8 @@
-
-
 
+
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/multileaderboard/OldMultiLeaderboard.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/multileaderboard/OldMultiLeaderboard.java index f73f6ff4f21..f48660575f8 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/multileaderboard/OldMultiLeaderboard.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/multileaderboard/OldMultiLeaderboard.java @@ -4,7 +4,6 @@ import java.util.Date; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.DivElement; -import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Style.Overflow; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.Visibility; @@ -29,16 +28,19 @@ 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; +import com.sap.sailing.gwt.ui.leaderboard.SelectedLeaderboardChangeListener; +import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator; +import com.sap.sse.gwt.client.controls.busyindicator.BusyStateChangeListener; +import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator; import com.sap.sse.gwt.client.player.Timer; 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 implements SelectedLeaderboardChangeListener { +public class OldMultiLeaderboard extends Composite implements SelectedLeaderboardChangeListener, BusyStateChangeListener { private static OldMultiLeaderboardUiBinder uiBinder = GWT.create(OldMultiLeaderboardUiBinder.class); interface OldMultiLeaderboardUiBinder extends UiBinder { @@ -59,8 +61,8 @@ public class OldMultiLeaderboard extends Composite implements SelectedLeaderboar private MultiLeaderboardPanel multiLeaderboardPanel; private Timer autoRefreshTimer; private final OldMultiLeaderboardDelegate delegate; - - private final DivElement emptyDivElement; + private final BusyIndicator busyIndicator = new SimpleBusyIndicator(); + private LeaderboardPanel lastSelectedLeaderboardPanel; public OldMultiLeaderboard() { this(null); @@ -75,8 +77,8 @@ public class OldMultiLeaderboard extends Composite implements SelectedLeaderboar fullscreenAnchor.setTitle(StringMessages.INSTANCE.openFullscreenView()); this.delegate = delegate; this.setupFullscreenDelegate(); - emptyDivElement = Document.get().createDivElement(); - emptyDivElement.setInnerHTML(" "); + busyIndicatorDiv.appendChild(busyIndicator.getElement()); + lastSelectedLeaderboardPanel = null; } private void setupFullscreenDelegate() { @@ -208,11 +210,18 @@ public class OldMultiLeaderboard extends Composite implements SelectedLeaderboar } } + @Override + public void onBusyStateChange(boolean busyState) { + busyIndicator.setBusy(busyState); + } + @Override public void onSelectedLeaderboardChanged(LeaderboardPanel selectedLeaderboard) { - busyIndicatorDiv.removeAllChildren(); - busyIndicatorDiv.appendChild(selectedLeaderboard.getBusyIndicator().getElement()); - busyIndicatorDiv.appendChild(emptyDivElement); + if(lastSelectedLeaderboardPanel != null) { + lastSelectedLeaderboardPanel.removeBusyStateChangeListener(this); + } + selectedLeaderboard.addBusyStateChangeListener(this); + lastSelectedLeaderboardPanel = selectedLeaderboard; } public interface OldMultiLeaderboardDelegate extends LeaderboardDelegate{ diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/multileaderboard/OldMultiLeaderboard.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/multileaderboard/OldMultiLeaderboard.ui.xml index d29f91043ab..1fa03514f31 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/multileaderboard/OldMultiLeaderboard.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/old/multileaderboard/OldMultiLeaderboard.ui.xml @@ -9,8 +9,8 @@
-
-
 
+
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java index 998b211f053..8315428bfd4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.java @@ -37,6 +37,7 @@ public class FullscreenContainer { String popup(); String toolbarInfo(); String toolbarAction(); + String toolbarBusyIndicator(); String content(); String contentBorder(); } @@ -88,7 +89,12 @@ public class FullscreenContainer { widget.addStyleName(style.toolbarAction()); toolbarUi.add(widget); } - + + public void addToolbarBusyIndicator(Widget widget) { + widget.addStyleName(style.toolbarBusyIndicator()); + toolbarUi.add(widget); + } + public void addToolbarInfo(Widget widget) { widget.addStyleName(style.toolbarInfo()); toolbarUi.add(widget); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml index bc1f63ed53d..daf2634a4a2 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml @@ -50,6 +50,9 @@ cursor: pointer; padding: 10px; } + .toolbarBusyIndicator { + display: inline-block; + } .toolbarAction:hover { background-color: #d79900; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ExpandableSortableColumn.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ExpandableSortableColumn.java index 15fad2b3fc8..22a487be9bf 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ExpandableSortableColumn.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/ExpandableSortableColumn.java @@ -149,15 +149,15 @@ public abstract class ExpandableSortableColumn extends LeaderboardSortableCol */ public void toggleExpansion() { if (isExpansionEnabled()) { - final boolean oldBusyState = getLeaderboardPanel().getBusyIndicator().isBusy(); - getLeaderboardPanel().getBusyIndicator().setBusy(true); + final boolean oldBusyState = getLeaderboardPanel().isBusy(); + getLeaderboardPanel().setBusyState(true); setTogglingInProcess(true); final CellTable table = getLeaderboardPanel().getLeaderboardTable(); if (isExpanded()) { for (AbstractSortableColumnWithMinMax column : getAllVisibleChildren()) { getLeaderboardPanel().removeColumn(column); // removes only the children currently displayed } - getLeaderboardPanel().getBusyIndicator().setBusy(false); + getLeaderboardPanel().setBusyState(false); setTogglingInProcess(false); // important: toggle expanded state after asking for all visible children setExpanded(!isExpanded()); @@ -177,7 +177,7 @@ public abstract class ExpandableSortableColumn extends LeaderboardSortableCol } getLeaderboardPanel().getLeaderboardTable().redraw(); } - getLeaderboardPanel().getBusyIndicator().setBusy(oldBusyState); + getLeaderboardPanel().setBusyState(oldBusyState); setTogglingInProcess(false); } }); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java index 11c7854898e..f3537d8cd7c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java @@ -102,6 +102,8 @@ import com.sap.sse.gwt.client.ErrorReporter; import com.sap.sse.gwt.client.async.AsyncActionsExecutor; import com.sap.sse.gwt.client.async.MarkedAsyncCallback; import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator; +import com.sap.sse.gwt.client.controls.busyindicator.BusyStateChangeListener; +import com.sap.sse.gwt.client.controls.busyindicator.BusyStateProvider; import com.sap.sse.gwt.client.controls.busyindicator.SimpleBusyIndicator; import com.sap.sse.gwt.client.player.PlayStateListener; import com.sap.sse.gwt.client.player.TimeListener; @@ -122,7 +124,8 @@ import com.sap.sse.gwt.client.useragent.UserAgentDetails; * */ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayStateListener, DisplayedLeaderboardRowsProvider, - Component, IsEmbeddableComponent, CompetitorSelectionChangeListener, LeaderboardFetcher { + Component, IsEmbeddableComponent, CompetitorSelectionChangeListener, LeaderboardFetcher, + BusyStateProvider { public static final String LOAD_LEADERBOARD_DATA_CATEGORY = "loadLeaderboardData"; protected static final NumberFormat scoreFormat = NumberFormat.getFormat("0.##"); @@ -296,6 +299,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS private ImageResource playIcon; private final BusyIndicator busyIndicator; + private final Set busyStateChangeListeners; /** * Tells whether the leaderboard settings were explicitly changed by an external call to @@ -477,8 +481,8 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS break; } - final boolean oldBusyState = getBusyIndicator().isBusy(); - getBusyIndicator().setBusy(true); + final boolean oldBusyState = isBusy(); + setBusyState(true); Runnable doWhenNecessaryDetailHasBeenLoaded = new Runnable() { @Override public void run() { @@ -501,7 +505,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS getLeaderboardTable().sortColumn(raceColumnByRaceName, /* ascending */true); } } - getBusyIndicator().setBusy(oldBusyState); + setBusyState(oldBusyState); } }; if (oldShallAddOverallDetails == shallAddOverallDetails() || oldShallAddOverallDetails || getLeaderboard().hasOverallDetails()) { @@ -1824,7 +1828,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS contentPanel.setStyleName(STYLE_LEADERBOARD_CONTENT); busyIndicator = new SimpleBusyIndicator(false, 0.8f); busyIndicator.ensureDebugId("BusyIndicator"); - + busyStateChangeListeners = new HashSet<>(); // the information panel if (!isEmbedded) { @@ -1920,7 +1924,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS filterClearButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - getBusyIndicator().setBusy(true); + setBusyState(true); competitorFilterPanel.clearAllActiveFilters(); timeChanged(new Date(), null); } @@ -2237,19 +2241,19 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS @Override public void onSuccess(LeaderboardDTO result) { updateLeaderboard(result); - getBusyIndicator().setBusy(false); + setBusyState(false); } @Override public void onFailure(Throwable caught) { - getBusyIndicator().setBusy(false); + setBusyState(false); getErrorReporter() .reportError("Error trying to obtain leaderboard contents: " + caught.getMessage(), true /* silentMode */); } }); } else { - getBusyIndicator().setBusy(false); + setBusyState(false); } } @@ -2424,7 +2428,7 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS liveRaceLabel.setVisible(hasLiveRace); } informLeaderboardUpdateListenersAboutLeaderboardUpdated(leaderboard); - getBusyIndicator().setBusy(false); + setBusyState(false); } } @@ -3146,16 +3150,6 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS leaderboardSelectionModel.setSelected(row, false); } } - - @Override - public BusyIndicator getBusyIndicator() { - return busyIndicator; - } - - @Override - public boolean hasBusyIndicator() { - return true; - } private Iterable getSelectedRows() { return leaderboardSelectionModel.getSelectedSet(); @@ -3277,4 +3271,29 @@ public class LeaderboardPanel extends SimplePanel implements TimeListener, PlayS public String getDependentCssClassName() { return "leaderboard"; } + + @Override + public void addBusyStateChangeListener(BusyStateChangeListener listener) { + busyStateChangeListeners.add(listener); + } + + @Override + public void removeBusyStateChangeListener(BusyStateChangeListener listener) { + busyStateChangeListeners.remove(listener); + } + + @Override + public boolean isBusy() { + return busyIndicator.isBusy(); + } + + @Override + public void setBusyState(boolean isBusy) { + if (busyIndicator.isBusy() != isBusy) { + busyIndicator.setBusy(isBusy); + for (BusyStateChangeListener listener : busyStateChangeListeners) { + listener.onBusyStateChange(isBusy); + } + } + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java index 78e4426adf6..b6e33545971 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/EditableLeaderboardPanel.java @@ -319,13 +319,13 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { final RowUpdateWhiteboard whiteboard = new RowUpdateWhiteboard( EditableLeaderboardPanel.this.getData()); getWhiteboardOwner().whiteboardProduced(whiteboard); - getBusyIndicator().setBusy(true); + setBusyState(true); getSailingService().updateLeaderboardMaxPointsReason(getLeaderboardName(), row.competitor.getIdAsString(), raceColumnName, value == null || value.trim().length() == 0 ? null : MaxPointsReason.valueOf(value.trim()), getLeaderboardDisplayDate(), new AsyncCallback>() { @Override public void onFailure(Throwable t) { - getBusyIndicator().setBusy(false); + setBusyState(false); getErrorReporter().reportError( "Error trying to update max points reason for competitor " + row.competitor.getName() + " in leaderboard " + getLeaderboardName() @@ -334,7 +334,7 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { @Override public void onSuccess(Util.Triple newNetAndTotalPointsAndIsCorrected) { - getBusyIndicator().setBusy(false); + setBusyState(false); row.fieldsByRaceColumnName.get(raceColumnName).reasonForMaxPoints = value == null || value.length() == 0 ? null : MaxPointsReason.valueOf(value.trim()); row.fieldsByRaceColumnName.get(raceColumnName).netPoints = newNetAndTotalPointsAndIsCorrected.getA(); @@ -444,14 +444,14 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { final RowUpdateWhiteboard whiteboard = new RowUpdateWhiteboard( EditableLeaderboardPanel.this.getData()); getWhiteboardOwner().whiteboardProduced(whiteboard); - getBusyIndicator().setBusy(true); + setBusyState(true); getSailingService().updateLeaderboardScoreCorrection(getLeaderboardName(), row.competitor.getIdAsString(), raceColumnName, value == null || value.trim().length() == 0 ? null : value.trim().equals("n/a") ? null : Double.valueOf(value.trim()), getLeaderboardDisplayDate(), new AsyncCallback>() { @Override public void onFailure(Throwable t) { - getBusyIndicator().setBusy(false); + setBusyState(false); getErrorReporter().reportError("Error trying to update score correction for competitor "+ row.competitor.getName()+" in leaderboard "+getLeaderboardName()+ " for race "+raceColumnName+": "+t.getMessage()+ @@ -460,7 +460,7 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { @Override public void onSuccess(Util.Triple newNetAndTotalPointsAndIsCorrected) { - getBusyIndicator().setBusy(false); + setBusyState(false); final LeaderboardEntryDTO leaderboardEntryDTO = row.fieldsByRaceColumnName.get(raceColumnName); leaderboardEntryDTO.netPoints = value == null || value.length() == 0 ? newNetAndTotalPointsAndIsCorrected .getA() : Double.valueOf(value.trim()); @@ -523,13 +523,13 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { row.fieldsByRaceColumnName.get(raceColumnName).netPoints, new DialogCallback>() { @Override public void ok(final Util.Pair editedObject) { - getBusyIndicator().setBusy(true); + setBusyState(true); getSailingService().updateLeaderboardScoreCorrection(getLeaderboardName(), row.competitor.getIdAsString(), raceColumnName, editedObject.getB(), getLeaderboardDisplayDate(), new AsyncCallback>() { @Override public void onFailure(Throwable t) { - getBusyIndicator().setBusy(false); + setBusyState(false); getErrorReporter().reportError("Error trying to update score correction for competitor "+ row.competitor.getName()+" in leaderboard "+getLeaderboardName()+ " for race "+raceColumnName+": "+t.getMessage()+ @@ -543,7 +543,7 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { new AsyncCallback>() { @Override public void onFailure(Throwable t) { - getBusyIndicator().setBusy(false); + setBusyState(false); getErrorReporter().reportError("Error trying to update score correction for competitor "+ row.competitor.getName()+" in leaderboard "+getLeaderboardName()+ " for race "+raceColumnName+": "+t.getMessage()+ @@ -552,7 +552,7 @@ public class EditableLeaderboardPanel extends LeaderboardPanel { @Override public void onSuccess(Util.Triple newNetAndTotalPointsAndIsCorrected) { - getBusyIndicator().setBusy(false); + setBusyState(false); final LeaderboardEntryDTO leaderboardEntryDTO = row.fieldsByRaceColumnName.get(raceColumnName); leaderboardEntryDTO.reasonForMaxPoints = editedObject.getA(); leaderboardEntryDTO.netPoints = newNetAndTotalPointsAndIsCorrected.getA(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/MatchAndApplyScoreCorrectionsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/MatchAndApplyScoreCorrectionsDialog.java index 61bf83687bb..066d0212239 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/MatchAndApplyScoreCorrectionsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/MatchAndApplyScoreCorrectionsDialog.java @@ -409,11 +409,11 @@ public class MatchAndApplyScoreCorrectionsDialog extends DataEntryDialog() { @Override public void onFailure(Throwable caught) { - leaderboardPanel.getBusyIndicator().setBusy(false); + leaderboardPanel.setBusyState(false); errorReporter.reportError(stringMessages.errorUpdatingScoresForLeaderboard(result.getLeaderboardName(), caught.getMessage())); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/ResultSelectionAndApplyDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/ResultSelectionAndApplyDialog.java index ffe969fe32e..660be8c30ad 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/ResultSelectionAndApplyDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/ResultSelectionAndApplyDialog.java @@ -214,19 +214,19 @@ public class ResultSelectionAndApplyDialog extends DataEntryDialog() { @Override public void onFailure(Throwable caught) { - leaderboardPanel.getBusyIndicator().setBusy(false); + leaderboardPanel.setBusyState(false); errorReporter.reportError(stringMessages.errorObtainingScoreCorrections(scoreCorrectionProviderName, eventName, boatClassName, timePointWhenResultPublished.toString(), caught.getMessage())); } @Override public void onSuccess(RegattaScoreCorrectionDTO result) { - leaderboardPanel.getBusyIndicator().setBusy(false); + leaderboardPanel.setBusyState(false); new MatchAndApplyScoreCorrectionsDialog(leaderboardPanel, stringMessages, sailingService, errorReporter, result).show(); } diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/BusyStateChangeListener.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/BusyStateChangeListener.java new file mode 100644 index 00000000000..f302065808d --- /dev/null +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/BusyStateChangeListener.java @@ -0,0 +1,14 @@ +package com.sap.sse.gwt.client.controls.busyindicator; + + +/** + * Allows UI components to observe the busy state of an operation. + */ +public interface BusyStateChangeListener { + + /** + * @param busyState the new busy state + */ + void onBusyStateChange(boolean busyState); + +} diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/BusyStateProvider.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/BusyStateProvider.java new file mode 100644 index 00000000000..d886b844853 --- /dev/null +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/BusyStateProvider.java @@ -0,0 +1,13 @@ +package com.sap.sse.gwt.client.controls.busyindicator; + + +public interface BusyStateProvider { + + void addBusyStateChangeListener(BusyStateChangeListener listener); + + void removeBusyStateChangeListener(BusyStateChangeListener listener); + + void setBusyState(boolean isBusy); + + boolean isBusy(); +} diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/SimpleBusyIndicator.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/SimpleBusyIndicator.java index 5a607e233d6..f9635ef3e36 100644 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/SimpleBusyIndicator.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/controls/busyindicator/SimpleBusyIndicator.java @@ -1,5 +1,6 @@ package com.sap.sse.gwt.client.controls.busyindicator; +import com.google.gwt.dom.client.Style.Visibility; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.Image; @@ -39,6 +40,6 @@ public class SimpleBusyIndicator extends BusyIndicator { @Override public void setBusy(boolean busy) { super.setBusy(busy); - busyIndicator.setVisible(busy); + busyIndicator.getElement().getStyle().setVisibility(busy ? Visibility.VISIBLE : Visibility.HIDDEN); } } diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/components/IsEmbeddableComponent.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/components/IsEmbeddableComponent.java index 0f83295b75c..f07d2bf1fbe 100644 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/components/IsEmbeddableComponent.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/shared/components/IsEmbeddableComponent.java @@ -1,7 +1,6 @@ package com.sap.sse.gwt.client.shared.components; import com.google.gwt.user.client.ui.Widget; -import com.sap.sse.gwt.client.controls.busyindicator.BusyIndicator; public interface IsEmbeddableComponent { @@ -13,11 +12,7 @@ public interface IsEmbeddableComponent { Widget getLegendWidget(); - BusyIndicator getBusyIndicator(); - boolean isEmbedded(); boolean hasToolbar(); - - boolean hasBusyIndicator(); }