mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
Merge remote-tracking branch 'origin/master'
Conflicts: java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java
This commit is contained in:
commit
977a7efb9f
19 files changed
+219
-32
No files matched your search
+1
-1
@@ -16,7 +16,7 @@ public class LeaderboardPanelMock extends LeaderboardPanel {
|
||||
public LeaderboardPanelMock(SailingServiceAsync sailingService,
|
||||
String leaderboardName, ErrorReporter errorReporter,
|
||||
StringMessages stringConstants) {
|
||||
super(sailingService, null, new CompetitorSelectionModel(/* hasMultiSelection */ true), leaderboardName, null, errorReporter, stringConstants);
|
||||
super(sailingService, null, new CompetitorSelectionModel(/* hasMultiSelection */ true), leaderboardName, null, errorReporter, stringConstants, null);
|
||||
// TODO Auto-generated constructor stub
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/classes/"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/lib/gflot-1.0.1.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/lib/gwt-maps.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/lib/gwt-servlet.jar" sourcepath="C:/apps/eclipse37RC4/plugins/com.google.gwt.eclipse.sdkbundle_2.4.0.v201112160242-rel-r37/gwt-2.4.0/gwt-user.jar"/>
|
||||
<classpathentry exported="true" kind="lib" path="WEB-INF/lib/gwt-servlet.jar" sourcepath="C:/MyPrograms/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.4.0.v201201120043-rel-r37/gwt-2.4.0/gwt-user.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry exported="true" kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
|
||||
@@ -4,6 +4,12 @@
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<title>SAP Sailing Analytics Leaderboard</title>
|
||||
<meta content='width = device-width, initial-scale = 1.0, user-scalable = yes' name='viewport'>
|
||||
<meta content='yes' name='apple-mobile-web-app-capable'>
|
||||
<meta content='black' name='apple-mobile-web-app-status-bar-style'>
|
||||
<!-- <link href='iphone-splash-screen.png' rel='apple-touch-startup-image'> -->
|
||||
<link href='images/sap-sailing-app-icon.png' rel='apple-touch-icon-precomposed'>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700,300italic,400italic,500italic,700italic' rel='stylesheet' type='text/css'>
|
||||
|
||||
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="highcharts/js/highcharts.js"></script>
|
||||
|
||||
@@ -30,7 +30,7 @@ body {
|
||||
line-height: 1;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
padding: 80px 0 120px 0;
|
||||
padding: 80px 0 160px 0;
|
||||
margin: 0;
|
||||
color: #3b3b3b;
|
||||
}
|
||||
|
||||
@@ -292,12 +292,12 @@ input.magnifier {
|
||||
}
|
||||
|
||||
.welcomeWidget-WelcomePanel{
|
||||
float: right;
|
||||
float: left;
|
||||
width: 485px;
|
||||
color: #3e3e3e;
|
||||
}
|
||||
.welcomeWidget-WelcomePanelWrapper {
|
||||
margin: 104px 13px 0px 13px;
|
||||
margin: 14px 13px 0px 13px;
|
||||
max-width: 1000px;
|
||||
height: 240px;
|
||||
}
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements EventR
|
||||
tabPanel.add(raceMapPanel, stringMessages.map(), /* asHTML */ false);
|
||||
final LeaderboardPanel defaultLeaderboardPanel = new LeaderboardPanel(sailingService, LeaderboardSettingsFactory.getDefaultSettings(),
|
||||
null, new CompetitorSelectionModel(/* hasMultiSelection */true),
|
||||
DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, null, this, stringMessages);
|
||||
DefaultLeaderboardName.DEFAULT_LEADERBOARD_NAME, null, this, stringMessages, userAgentType);
|
||||
defaultLeaderboardPanel.setSize("90%", "90%");
|
||||
tabPanel.add(defaultLeaderboardPanel, stringMessages.defaultLeaderboard(), /* asHTML */ false);
|
||||
final LeaderboardGroupConfigPanel leaderboardGroupConfigPanel = new LeaderboardGroupConfigPanel(sailingService, this, this, stringMessages);
|
||||
|
||||
+1
-6
@@ -40,12 +40,7 @@ public class RaceMapZoomSettings {
|
||||
LatLngBounds newBounds = null;
|
||||
if (typesToConsiderOnZoom != null) {
|
||||
for (ZoomTypes type : typesToConsiderOnZoom) {
|
||||
//Skip the calculation of the boat bounds, if the list contains TAILS.
|
||||
//That's because the tails already contain the boats
|
||||
if (type == ZoomTypes.BOATS && typesToConsiderOnZoom.contains(ZoomTypes.TAILS)) {
|
||||
continue;
|
||||
}
|
||||
//Set the for selected attribute for the corresponding calculaters
|
||||
//Set the forSelected attribute for the corresponding calculaters
|
||||
if (type.calculater instanceof LatLngBoundsCalculaterForSelected) {
|
||||
((LatLngBoundsCalculaterForSelected) type.calculater)
|
||||
.setZoomOnlyToSelectedCompetitors(zoomToSelectedCompetitors);
|
||||
|
||||
+4
@@ -9,6 +9,7 @@ import com.google.gwt.event.dom.client.KeyPressEvent;
|
||||
import com.google.gwt.event.dom.client.KeyPressHandler;
|
||||
import com.google.gwt.event.dom.client.KeyUpEvent;
|
||||
import com.google.gwt.event.dom.client.KeyUpHandler;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.ServiceDefTarget;
|
||||
import com.google.gwt.user.client.ui.Button;
|
||||
import com.google.gwt.user.client.ui.DialogBox;
|
||||
@@ -17,6 +18,7 @@ import com.google.gwt.user.client.ui.HTML;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.RootPanel;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.gwt.ui.client.UserAgentChecker.UserAgentTypes;
|
||||
|
||||
public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
|
||||
|
||||
@@ -24,6 +26,7 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
|
||||
private HTML serverResponseLabel;
|
||||
private Button dialogCloseButton;
|
||||
protected StringMessages stringMessages;
|
||||
protected UserAgentTypes userAgentType;
|
||||
|
||||
/**
|
||||
* Create a remote service proxy to talk to the server-side sailing service.
|
||||
@@ -46,6 +49,7 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter {
|
||||
public void onModuleLoad() {
|
||||
stringMessages = GWT.create(StringMessages.class);
|
||||
errorDialogBox = createErrorDialog();
|
||||
userAgentType = UserAgentChecker.INSTANCE.checkUserAgent(Window.Navigator.getUserAgent());
|
||||
ServiceDefTarget sailingServiceDef = (ServiceDefTarget) sailingService;
|
||||
ServiceDefTarget userManagementServiceDef = (ServiceDefTarget) userManagementService;
|
||||
String moduleBaseURL = GWT.getModuleBaseURL();
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
public interface UserAgentChecker {
|
||||
|
||||
public enum UserAgentTypes{ DESKTOP, MOBILE }
|
||||
public enum UserAgentTypes{ DESKTOP, MOBILE, UNKNOWN }
|
||||
|
||||
public final UserAgentCheckerImpl INSTANCE = new UserAgentCheckerImpl();
|
||||
|
||||
|
||||
+1
-1
@@ -59,7 +59,7 @@ public class LeaderboardPage extends AbstractEntryPoint {
|
||||
BreadcrumbPanel breadcrumbPanel = new BreadcrumbPanel(breadcrumbLinksData, leaderboardName.toUpperCase());
|
||||
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, LeaderboardSettingsFactory.getDefaultSettings(),
|
||||
new CompetitorSelectionModel(/* hasMultiSelection */ true), leaderboardName, leaderboardGroupName,
|
||||
LeaderboardPage.this, stringMessages);
|
||||
LeaderboardPage.this, stringMessages, userAgentType);
|
||||
|
||||
RootPanel.get().add(logoAndTitlePanel);
|
||||
RootPanel.get().add(breadcrumbPanel);
|
||||
|
||||
+34
-10
@@ -43,6 +43,7 @@ import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.gwt.ui.client.Collator;
|
||||
@@ -56,6 +57,7 @@ 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.client.Timer.PlayStates;
|
||||
import com.sap.sailing.gwt.ui.client.UserAgentChecker.UserAgentTypes;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LegDetailColumn.LegDetailField;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
|
||||
@@ -99,7 +101,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
|
||||
private final CellTable<LeaderboardRowDTO> leaderboardTable;
|
||||
|
||||
private final MultiSelectionModel<LeaderboardRowDTO> leaderboardSelectionModel;
|
||||
private final SelectionModel<LeaderboardRowDTO> leaderboardSelectionModel;
|
||||
|
||||
private ListDataProvider<LeaderboardRowDTO> data;
|
||||
|
||||
@@ -788,22 +790,24 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
}
|
||||
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, String leaderboardGroupName,
|
||||
ErrorReporter errorReporter, final StringMessages stringConstants) {
|
||||
this(sailingService, settings, /* preSelectedRace */ null, competitorSelectionProvider, leaderboardName, leaderboardGroupName, errorReporter, stringConstants);
|
||||
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName,
|
||||
String leaderboardGroupName, ErrorReporter errorReporter, final StringMessages stringConstants,
|
||||
final UserAgentTypes userAgentType) {
|
||||
this(sailingService, settings, /* preSelectedRace */null, competitorSelectionProvider, leaderboardName,
|
||||
leaderboardGroupName, errorReporter, stringConstants, userAgentType);
|
||||
}
|
||||
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings, RaceIdentifier preSelectedRace,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, String leaderboardName, String leaderboardGroupName,
|
||||
ErrorReporter errorReporter, final StringMessages stringConstants) {
|
||||
ErrorReporter errorReporter, final StringMessages stringConstants, final UserAgentTypes userAgentType) {
|
||||
this(sailingService, settings, preSelectedRace, competitorSelectionProvider, new Timer(PlayModes.Replay, /* delayBetweenAutoAdvancesInMilliseconds */3000l),
|
||||
leaderboardName, leaderboardGroupName, errorReporter, stringConstants);
|
||||
leaderboardName, leaderboardGroupName, errorReporter, stringConstants, userAgentType);
|
||||
timer.setDelay(getDelayInMilliseconds()); // set time/delay before adding as listener
|
||||
}
|
||||
|
||||
public LeaderboardPanel(SailingServiceAsync sailingService, LeaderboardSettings settings, RaceIdentifier preSelectedRace,
|
||||
CompetitorSelectionProvider competitorSelectionProvider, Timer timer, String leaderboardName, String leaderboardGroupName,
|
||||
ErrorReporter errorReporter, final StringMessages stringConstants) {
|
||||
ErrorReporter errorReporter, final StringMessages stringConstants, final UserAgentTypes userAgentType) {
|
||||
this.sailingService = sailingService;
|
||||
this.preSelectedRace = preSelectedRace;
|
||||
this.competitorSelectionProvider = competitorSelectionProvider;
|
||||
@@ -836,12 +840,16 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
leaderboardTable = new CellTableWithStylableHeaders<LeaderboardRowDTO>(
|
||||
/* pageSize */100, tableResources);
|
||||
getLeaderboardTable().setWidth("100%");
|
||||
leaderboardSelectionModel = new MultiSelectionModel<LeaderboardRowDTO>();
|
||||
if (userAgentType == UserAgentTypes.MOBILE) {
|
||||
leaderboardSelectionModel = new ToggleSelectionModel<LeaderboardRowDTO>();
|
||||
} else {
|
||||
leaderboardSelectionModel = new MultiSelectionModel<LeaderboardRowDTO>();
|
||||
}
|
||||
leaderboardSelectionModel.addSelectionChangeHandler(new Handler() {
|
||||
@Override
|
||||
public void onSelectionChange(SelectionChangeEvent event) {
|
||||
List<CompetitorDTO> selection = new ArrayList<CompetitorDTO>();
|
||||
for (LeaderboardRowDTO row : leaderboardSelectionModel.getSelectedSet()) {
|
||||
for (LeaderboardRowDTO row : getSelectedRows()) {
|
||||
selection.add(row.competitor);
|
||||
}
|
||||
LeaderboardPanel.this.competitorSelectionProvider.setSelection(selection,
|
||||
@@ -1092,7 +1100,7 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
getLeaderboardTable().getColumnSortList().push(getRankColumn());
|
||||
}
|
||||
//Reselect the selected rows
|
||||
leaderboardSelectionModel.clear();
|
||||
clearSelection();
|
||||
for (LeaderboardRowDTO row : data.getList()) {
|
||||
if (competitorSelectionProvider.isSelected(row.competitor)) {
|
||||
leaderboardSelectionModel.setSelected(row, true);
|
||||
@@ -1101,6 +1109,12 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
}
|
||||
}
|
||||
|
||||
private void clearSelection() {
|
||||
for (LeaderboardRowDTO row : getData().getList()) {
|
||||
leaderboardSelectionModel.setSelected(row, false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Considers the {@link #preSelectedRace} field as follows: if <code>null</code>, all race columns that <code>leaderboard</code>
|
||||
* adds on top of the existing {@link #getLeaderboard() leaderboard} are returned. Otherwise, the column list obtained as described before
|
||||
@@ -1565,4 +1579,14 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta
|
||||
public boolean hasBusyIndicator() {
|
||||
return true;
|
||||
}
|
||||
|
||||
private Iterable<LeaderboardRowDTO> getSelectedRows() {
|
||||
ArrayList<LeaderboardRowDTO> selectedRows = new ArrayList<LeaderboardRowDTO>();
|
||||
for (LeaderboardRowDTO row : getData().getList()) {
|
||||
if (leaderboardSelectionModel.isSelected(row)) {
|
||||
selectedRows.add(row);
|
||||
}
|
||||
}
|
||||
return selectedRows;
|
||||
}
|
||||
}
|
||||
+156
@@ -0,0 +1,156 @@
|
||||
package com.sap.sailing.gwt.ui.leaderboard;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.view.client.DefaultSelectionEventManager;
|
||||
import com.google.gwt.view.client.DefaultSelectionEventManager.EventTranslator;
|
||||
import com.google.gwt.view.client.MultiSelectionModel;
|
||||
import com.google.gwt.view.client.ProvidesKey;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.google.gwt.view.client.SelectionModel.AbstractSelectionModel;
|
||||
|
||||
/**
|
||||
* A selection model with multiple selected elements.<br \>
|
||||
* If you select an element, the selected state of it gets toggled.<br \>
|
||||
* <br \>
|
||||
*
|
||||
* This only works, because of some reasons:<br \>
|
||||
* <li>It does NOT extend the {@link MultiSelectionModel}.<br \>
|
||||
* The {@link DefaultSelectionEventManager#onCellPreview(com.google.gwt.view.client.CellPreviewEvent)
|
||||
* DefaultSelectionEventManager} handles MultiSelectinModels and other SelectionModels different.<br \>
|
||||
* For example the selection of a MultiSelectionModel is cleared, if a normal click on the table is performed.</li> <li>
|
||||
* The {@link DefaultSelectionEventManager} doesn't clear the selection of other SelectionModels, when a selection is
|
||||
* performed.</li> <li>The {@link ToggleSelectionModel#isSelected(Object)} method does NOT perform a
|
||||
* {@link ToggleSelectionModel#resolveChanges()}.<br \>
|
||||
* Would result in "blinking" boats in the race board.</li><br \>
|
||||
* <br \>
|
||||
*
|
||||
* If this model doesn't work anymore, have a look if the code of the
|
||||
* {@link DefaultSelectionEventManager#onCellPreview(com.google.gwt.view.client.CellPreviewEvent)
|
||||
* DefaultSelectionEventManager} has changed (This model was developed with GWT 2.4). Therefore see the out commented
|
||||
* code furhter down.<br \><br \>
|
||||
*
|
||||
* If you can't fix the issue, have a look at the
|
||||
* {@link DefaultSelectionEventManager#createCustomManager(com.google.gwt.view.client.DefaultSelectionEventManager.EventTranslator)
|
||||
* DefaultSelectionEventManager.createCustomManager(...)} and a custom {@link EventTranslator}.
|
||||
*
|
||||
* @author Lennart Hensler (D054527)
|
||||
*/
|
||||
//public void onCellPreview(CellPreviewEvent<T> event) {
|
||||
// // Early exit if selection is already handled or we are editing.
|
||||
// if (event.isCellEditing() || event.isSelectionHandled()) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// // Early exit if we do not have a SelectionModel.
|
||||
// HasData<T> display = event.getDisplay();
|
||||
// SelectionModel<? super T> selectionModel = display.getSelectionModel();
|
||||
// if (selectionModel == null) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// // Check for user defined actions.
|
||||
// SelectAction action = (translator == null) ? SelectAction.DEFAULT
|
||||
// : translator.translateSelectionEvent(event);
|
||||
//
|
||||
// // Handle the event based on the SelectionModel type.
|
||||
// if (selectionModel instanceof MultiSelectionModel<?>) {
|
||||
// // Add shift key support for MultiSelectionModel.
|
||||
// handleMultiSelectionEvent(event, action,
|
||||
// (MultiSelectionModel<? super T>) selectionModel);
|
||||
// } else {
|
||||
// // Use the standard handler.
|
||||
// handleSelectionEvent(event, action, selectionModel);
|
||||
// }
|
||||
// }
|
||||
public class ToggleSelectionModel<T> extends AbstractSelectionModel<T> {
|
||||
//!!Before you change something in this Model read the description!!
|
||||
|
||||
// Ensure one value per key
|
||||
private final HashMap<Object, T> selectedSet = new HashMap<Object, T>();
|
||||
|
||||
private final HashMap<T, Boolean> selectionChanges = new HashMap<T, Boolean>();
|
||||
|
||||
public ToggleSelectionModel() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public ToggleSelectionModel(ProvidesKey<T> keyProvider) {
|
||||
super(keyProvider);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the set of selected items as a copy.
|
||||
*
|
||||
* @return the set of selected items
|
||||
*/
|
||||
public Set<T> getSelectedSet() {
|
||||
resolveChanges();
|
||||
return new HashSet<T>(selectedSet.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSelected(T object) {
|
||||
return selectedSet.containsKey(getKey(object));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the selection state of an object.<br \>
|
||||
* If <code>selected</code> is <code>true</code>, then the selection state of the object is toggled.<br \>
|
||||
* Else the state is forced to <code>false</code>. (Needed to clear the model via the methods of the {@link SelectionModel})
|
||||
*/
|
||||
@Override
|
||||
public void setSelected(T object, boolean selected) {
|
||||
if (selected) {
|
||||
selectionChanges.put(object, !isSelected(object));
|
||||
} else {
|
||||
selectionChanges.put(object, false);
|
||||
}
|
||||
scheduleSelectionChangeEvent();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fireSelectionChangeEvent() {
|
||||
if (isEventScheduled()) {
|
||||
setEventCancelled(true);
|
||||
}
|
||||
resolveChanges();
|
||||
}
|
||||
|
||||
private void resolveChanges() {
|
||||
if (selectionChanges.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean changed = false;
|
||||
for (Map.Entry<T, Boolean> entry : selectionChanges.entrySet()) {
|
||||
T object = entry.getKey();
|
||||
boolean selected = entry.getValue();
|
||||
|
||||
Object key = getKey(object);
|
||||
T oldValue = selectedSet.get(key);
|
||||
if (selected) {
|
||||
if (oldValue == null || !oldValue.equals(object)) {
|
||||
selectedSet.put(getKey(object), object);
|
||||
changed = true;
|
||||
}
|
||||
} else {
|
||||
if (oldValue != null) {
|
||||
selectedSet.remove(key);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
selectionChanges.clear();
|
||||
|
||||
// Fire a selection change event.
|
||||
if (changed) {
|
||||
SelectionChangeEvent.fire(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+3
-2
@@ -18,6 +18,7 @@ import com.sap.sailing.gwt.ui.client.CompetitorSelectionModel;
|
||||
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.UserAgentChecker.UserAgentTypes;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardDTO;
|
||||
@@ -249,9 +250,9 @@ public class EditableLeaderboardPanel extends LeaderboardPanel {
|
||||
}
|
||||
|
||||
public EditableLeaderboardPanel(SailingServiceAsync sailingService, String leaderboardName, String leaderboardGroupName,
|
||||
ErrorReporter errorReporter, StringMessages stringConstants) {
|
||||
ErrorReporter errorReporter, StringMessages stringConstants, UserAgentTypes userAgentType) {
|
||||
super(sailingService, null, new CompetitorSelectionModel(/* hasMultiSelection */ true), leaderboardName, leaderboardGroupName,
|
||||
errorReporter, stringConstants);
|
||||
errorReporter, stringConstants, userAgentType);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ public class LeaderboardEditPage extends AbstractEntryPoint {
|
||||
LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages);
|
||||
logoAndTitlePanel.addStyleName("LogoAndTitlePanel");
|
||||
EditableLeaderboardPanel leaderboardPanel = new EditableLeaderboardPanel(sailingService, leaderboardName, null,
|
||||
LeaderboardEditPage.this, stringMessages);
|
||||
LeaderboardEditPage.this, stringMessages, userAgentType);
|
||||
RootPanel.get().add(logoAndTitlePanel);
|
||||
RootPanel.get().add(leaderboardPanel);
|
||||
} else {
|
||||
|
||||
+1
-1
@@ -141,7 +141,7 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint {
|
||||
List<RaceIdentifier> singletonList = Collections.singletonList(selectedRace.getRaceIdentifier());
|
||||
raceSelectionModel.setSelection(singletonList);
|
||||
raceBoardPanel = new RaceBoardPanel(sailingService, raceSelectionModel, leaderboardName, leaderboardGroupName,
|
||||
RaceBoardEntryPoint.this, stringMessages);
|
||||
RaceBoardEntryPoint.this, stringMessages, userAgentType);
|
||||
raceBoardPanel.fillEvents(events);
|
||||
|
||||
logoAndTitlePanel.add(raceBoardPanel.getNavigationWidget());
|
||||
|
||||
+4
-3
@@ -33,6 +33,7 @@ import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.client.TimePanel;
|
||||
import com.sap.sailing.gwt.ui.client.Timer;
|
||||
import com.sap.sailing.gwt.ui.client.Timer.PlayModes;
|
||||
import com.sap.sailing.gwt.ui.client.UserAgentChecker.UserAgentTypes;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings;
|
||||
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
|
||||
@@ -70,7 +71,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
private final RaceSelectionProvider raceSelectionProvider;
|
||||
|
||||
public RaceBoardPanel(SailingServiceAsync sailingService, RaceSelectionProvider raceSelectionProvider, String leaderboardName,
|
||||
String leaderboardGroupName, ErrorReporter errorReporter, final StringMessages stringMessages) {
|
||||
String leaderboardGroupName, ErrorReporter errorReporter, final StringMessages stringMessages, UserAgentTypes userAgentType) {
|
||||
this.sailingService = sailingService;
|
||||
this.raceSelectionProvider = raceSelectionProvider;
|
||||
raceSelectionProvider.addRaceSelectionChangeListener(this);
|
||||
@@ -105,7 +106,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
// create the default leaderboard and select the right race
|
||||
LeaderboardSettings leaderBoardSettings = LeaderboardSettingsFactory.getSettingsForPlayMode(timer.getPlayMode());
|
||||
LeaderboardPanel leaderboardPanel = new LeaderboardPanel(sailingService, leaderBoardSettings, selectedRaceIdentifier, competitorSelectionModel,
|
||||
timer, leaderboardName, leaderboardGroupName, errorReporter, stringMessages);
|
||||
timer, leaderboardName, leaderboardGroupName, errorReporter, stringMessages, userAgentType);
|
||||
|
||||
CollapsableComponentViewer<LeaderboardSettings> leaderboardViewer = new CollapsableComponentViewer<LeaderboardSettings>(
|
||||
leaderboardPanel, "100%", "100%", stringMessages);
|
||||
@@ -226,7 +227,7 @@ public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSel
|
||||
}
|
||||
break;
|
||||
}
|
||||
timer.setPlayMode(PlayModes.Live);
|
||||
//timer.setPlayMode(PlayModes.Live);
|
||||
sailingService.getRaceTimesInfo(selectedRace.getRaceIdentifier(),
|
||||
new AsyncCallback<RaceTimesInfoDTO>() {
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -480,7 +480,7 @@ public class OverviewEventPanel extends AbstractEventPanel {
|
||||
currentLeaderboard = boardToDisplay;
|
||||
CompetitorSelectionModel competitorSelectionModel = new CompetitorSelectionModel(true);
|
||||
displayedLeaderboardPanel = new LeaderboardPanel(sailingService, null, competitorSelectionModel,
|
||||
currentLeaderboard.name, null, errorReporter, stringConstants);
|
||||
currentLeaderboard.name, null, errorReporter, stringConstants, null);
|
||||
leaderboardPanel.add(displayedLeaderboardPanel);
|
||||
}
|
||||
}
|
||||
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 595 B |
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 688 B |
Reference in new issue
Block a user