diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java index 9bdd988a8cb..54802ce84ea 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/TrackedRacesListComposite.java @@ -111,23 +111,7 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite @Override protected void addControlButtons(HorizontalPanel trackedRacesButtonPanel) { if(actionButtonsEnabled) { - btnRemoveRace = new Button(stringMessages.remove()); - btnRemoveRace.ensureDebugId("RemoveRaceButton"); - btnRemoveRace.addClickHandler(new ClickHandler() { - @Override - public void onClick(ClickEvent event) { - if(askUserForConfirmation()){ - removeAndUntrackRaces(refreshableSelectionModel.getSelectedSet()); - } - } - - private boolean askUserForConfirmation() { - return Window.confirm(stringMessages.doYouReallyWantToRemoveTrackedRaces()); - } - - }); - btnRemoveRace.setEnabled(false); - trackedRacesButtonPanel.add(btnRemoveRace); + btnUntrack = new Button(stringMessages.stopTracking()); btnUntrack.ensureDebugId("StopTrackingButton"); @@ -161,6 +145,28 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite }); btnExport.setEnabled(false); trackedRacesButtonPanel.add(btnExport); + + btnRemoveRace = new Button(stringMessages.remove()); + btnRemoveRace.ensureDebugId("RemoveRaceButton"); + btnRemoveRace.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if(askUserForConfirmation()){ + removeAndUntrackRaces(refreshableSelectionModel.getSelectedSet()); + } + } + + private boolean askUserForConfirmation() { + if(refreshableSelectionModel.itemIsSelectedButNotVisible(raceTable.getVisibleItems())){ + final String trackedRaceNames = refreshableSelectionModel.getSelectedSet().stream().map(e -> e.getRegattaName()+" - "+e.getName()).collect(Collectors.joining("\n")); + return Window.confirm(stringMessages.doYouReallyWantToRemoveNonVisibleTrackedRaces(trackedRaceNames)); + } + return true; + } + + }); + btnRemoveRace.setEnabled(false); + trackedRacesButtonPanel.add(btnRemoveRace); } } @@ -169,10 +175,13 @@ public class TrackedRacesListComposite extends AbstractTrackedRacesListComposite if (actionButtonsEnabled) { if (selectedRaces.isEmpty()) { btnRemoveRace.setEnabled(false); + btnRemoveRace.setText(stringMessages.remove()); btnUntrack.setEnabled(false); btnExport.setEnabled(false); } else { btnRemoveRace.setEnabled(true); + final int numberOfItemsSelected = refreshableSelectionModel.getSelectedSet().size(); + btnRemoveRace.setText(numberOfItemsSelected <= 1 ? stringMessages.remove() : stringMessages.removeNumber(numberOfItemsSelected)); btnUntrack.setEnabled(true); btnExport.setEnabled(true); } diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableSelectionModel.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableSelectionModel.java index 9b926d84c83..1d3a8dee3f2 100644 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableSelectionModel.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableSelectionModel.java @@ -1,5 +1,7 @@ package com.sap.sse.gwt.client.celltable; +import java.util.List; + import com.google.gwt.view.client.HasData; import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.SelectionChangeEvent.Handler; @@ -37,6 +39,8 @@ public interface RefreshableSelectionModel extends SetSelectionModel { * <T>. */ EntityIdentityComparator getEntityIdentityComparator(); - + + boolean itemIsSelectedButNotVisible(List visibleItemList); + void refreshSelectionModel(Iterable newObjects); } \ No newline at end of file diff --git a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableSingleSelectionModel.java b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableSingleSelectionModel.java index bd2f12b2423..5ff184ec44d 100644 --- a/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableSingleSelectionModel.java +++ b/java/com.sap.sse.gwt/src/com/sap/sse/gwt/client/celltable/RefreshableSingleSelectionModel.java @@ -72,6 +72,18 @@ public class RefreshableSingleSelectionModel extends SingleSelectionModel super.setSelected(item, selected); } } + + /** + * Checks if the currently selected object is also visible. + * + * @param visibleItemList + * can be obtained by calling {@link com.google.gwt.user.cellview.client.CellTable#getVisibleItems()} + * method. + * @return true if the list of visible items does not contain the selected item. + */ + public boolean itemIsSelectedButNotVisible(List visibleItemList) { + return !visibleItemList.contains(getSelectedObject()); + } /** * Refreshes the {@link RefreshableSingleSelectionModel} with the newObjects. If the current selected