From 99913a16aec4e0c6fca621a5f4c6a3f7f6decae6 Mon Sep 17 00:00:00 2001 From: Leon Radeck Date: Thu, 20 Jul 2017 10:59:11 +0200 Subject: [PATCH] When deleting tracked races only show warning if a tracked race is selected but not visible in the table. Adjusted delete button to show number of items to delete. Also changed position of the delete button to far right to avoid shifting other items to the right when the button text is changed. Added method itemIsSelectedButNotVisible to RefreshableSingleSelectionModel. --- .../TrackedRacesListComposite.java | 43 +++++++++++-------- .../celltable/RefreshableSelectionModel.java | 6 ++- .../RefreshableSingleSelectionModel.java | 12 ++++++ 3 files changed, 43 insertions(+), 18 deletions(-) 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