extends TrackImpl
}
/**
- * When redefining this method, make sure to redefine {@link #invalidateValidityAndDistanceCaches(GPSFix)}
+ * When redefining this method, make sure to redefine {@link #invalidateValidityAndEstimatedSpeedAndDistanceCaches(GPSFix)}
* accordingly. This implementation checks the immediate previous and next fix for e. Therefore, when
* adding a fix, only immediately adjacent fix's validity caches need to be invalidated.
*
@@ -875,7 +916,7 @@ public class GPSFixTrackImpl extends TrackImpl
isValid = true;
} else {
if (e.isValidityCached()) {
- isValid = e.isValid();
+ isValid = e.isValidCached();
} else {
FixType previous = rawFixes.lower(e);
final boolean atLeastOnePreviousFixInRange = previous != null && e.getTimePoint().asMillis() - previous.getTimePoint().asMillis() <= getMillisecondsOverWhichToAverageSpeed();
@@ -918,7 +959,7 @@ public class GPSFixTrackImpl extends TrackImpl
* of the gpsFix "upwards." However, if the adjacent earlier fixes have changed their validity by the addition
* of gpsFix, the distance cache must be invalidated starting with the first fix whose validity changed.
*/
- protected void invalidateValidityAndDistanceCaches(FixType gpsFix) {
+ protected void invalidateValidityAndEstimatedSpeedAndDistanceCaches(FixType gpsFix) {
assertWriteLock();
TimePoint distanceCacheInvalidationStart = gpsFix.getTimePoint();
// see also bug 968: cache entries for intervals ending after the last fix need to be removed because they are
@@ -930,6 +971,10 @@ public class GPSFixTrackImpl extends TrackImpl
distanceCacheInvalidationStart = last.getTimePoint().plus(1); // add one millisecond to invalidate *after* the last fix only
}
gpsFix.invalidateCache();
+ for (FixType fixOnWhichToInvalidateEstimatedSpeed : getFixesRelevantForSpeedEstimation(gpsFix.getTimePoint(),
+ getInternalRawFixes())) {
+ fixOnWhichToInvalidateEstimatedSpeed.invalidateEstimatedSpeedCache();
+ }
Iterable lowers = getEarlierFixesWhoseValidityMayBeAffected(gpsFix);
for (FixType lower : lowers) {
boolean lowerWasValid = isValid(getRawFixes(), lower);
@@ -1014,7 +1059,7 @@ public class GPSFixTrackImpl extends TrackImpl
try {
firstFixInTrack = getRawFixes().isEmpty();
result = addWithoutLocking(fix);
- invalidateValidityAndDistanceCaches(fix);
+ invalidateValidityAndEstimatedSpeedAndDistanceCaches(fix);
} finally {
unlockAfterWrite();
}
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java
index f725b950405..f01da52e594 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedLegImpl.java
@@ -257,7 +257,7 @@ public class TrackedLegImpl implements TrackedLeg, RaceChangeListener {
@Override
public void waypointAdded(int zeroBasedIndex, Waypoint waypointThatGotAdded) {
clearCaches(); // necessary because the competitor tracks ordered by rank may change for legs adjacent to the waypoint added
- }
+ } // and because the leg's from/to waypoints may have changed
@Override
public void waypointRemoved(int zeroBasedIndex, Waypoint waypointThatGotRemoved) {
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java
index 1b2491871b4..60bb970f31f 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java
@@ -220,7 +220,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
* them.
*/
private transient SmartFutureCache>, EmptyUpdateInterval> maneuverCache;
-
+
private transient Map> directionFromStartToNextMarkCache;
private final ConcurrentHashMap> markTracks;
@@ -234,7 +234,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
private transient Timer cacheInvalidationTimer;
private transient Object cacheInvalidationTimerLock;
- protected transient HashMap attachedRaceLogs;
+ protected transient ConcurrentHashMap attachedRaceLogs;
/**
* The time delay to the current point in time in milliseconds.
@@ -289,7 +289,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
super(race, trackedRegatta, windStore, millisecondsOverWhichToAverageWind);
shortTimeWindCache = new ShortTimeWindCache(this, millisecondsOverWhichToAverageWind / 2);
locksForMarkPassings = new IdentityHashMap<>();
- attachedRaceLogs = new HashMap<>();
+ attachedRaceLogs = new ConcurrentHashMap<>();
this.status = new TrackedRaceStatusImpl(TrackedRaceStatusEnum.PREPARED, 0.0);
this.statusNotifier = new Object[0];
this.loadingFromWindStoreLock = new NamedReentrantReadWriteLock("Loading from wind store lock for tracked race "
@@ -467,7 +467,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
*/
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
- attachedRaceLogs = new HashMap<>();
+ attachedRaceLogs = new ConcurrentHashMap<>();
markPassingsTimes = new ArrayList>>();
cacheInvalidationTimerLock = new Object();
windStore = EmptyWindStore.INSTANCE;
@@ -491,7 +491,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
@Override
public synchronized void waitForLoadingFromGPSFixStoreToFinishRunning(RaceLog fromRaceLog) throws InterruptedException {
- while (! attachedRaceLogs.containsKey(fromRaceLog.getId()) || loadingFromGPSFixStore) {
+ while (!attachedRaceLogs.containsKey(fromRaceLog.getId()) || loadingFromGPSFixStore) {
wait();
}
}
@@ -506,7 +506,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl
}
}, /* nameForLocks */"Maneuver cache for race " + getRace().getName());
}
-
+
/**
* Precondition: race has already been set, e.g., in constructor before this method is called
*/
diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/util/SmartFutureCache.java b/java/com.sap.sailing.domain/src/com/sap/sailing/util/SmartFutureCache.java
index b20bd3c8809..a1867c15b94 100755
--- a/java/com.sap.sailing.domain/src/com/sap/sailing/util/SmartFutureCache.java
+++ b/java/com.sap.sailing.domain/src/com/sap/sailing/util/SmartFutureCache.java
@@ -507,7 +507,7 @@ public class SmartFutureCache> {
* from the cache straight away (waitForLatest==false) or, if a re-calculation for the key is still
* ongoing, the result of that ongoing re-calculation is returned.
*/
- public V get(K key, boolean waitForLatest) {
+ public V get(final K key, boolean waitForLatest) {
V value = null;
if (waitForLatest) {
FutureTaskWithCancelBlocking future;
@@ -545,11 +545,12 @@ public class SmartFutureCache> {
}
} // else no calculation currently going on; value has been fetched from latest cache entry
} else {
- LockUtil.lockForRead(getOrCreateLockForKey(key));
+ final NamedReentrantReadWriteLock lock = getOrCreateLockForKey(key);
+ LockUtil.lockForRead(lock);
try {
value = cache.get(key);
} finally {
- LockUtil.unlockAfterRead(getOrCreateLockForKey(key));
+ LockUtil.unlockAfterRead(lock);
}
}
return value;
@@ -576,4 +577,11 @@ public class SmartFutureCache> {
return smartFutureCacheTaskReuseCounter;
}
+ /**
+ * Removes the key from the cache. If any updates are still running, they may again insert the key into hte cache.
+ */
+ public void remove(K key) {
+ cache(key, null);
+ }
+
}
diff --git a/java/com.sap.sailing.gwt.ui.test/.classpath b/java/com.sap.sailing.gwt.ui.test/.classpath
index 5cc60e2c543..d03a3fcb224 100755
--- a/java/com.sap.sailing.gwt.ui.test/.classpath
+++ b/java/com.sap.sailing.gwt.ui.test/.classpath
@@ -1,10 +1,10 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java
index f56b53061f8..18f7842172e 100644
--- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java
+++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/GwtTestCaseColumnToggling.java
@@ -149,7 +149,7 @@ public class GwtTestCaseColumnToggling extends GWTTestCase {
@Override
public void onSuccess(Void result) {
System.out.println("Added column to leaderboard.");
- RaceColumnDTO race = new RaceColumnDTO(/* isValidInTotalScore */ null);
+ RaceColumnDTO race = new RaceColumnDTO();
race.setName(COLUMN1_NAME);
race.setMedalRace(false);
leaderboardPanel.addColumn(leaderboardPanel.createRaceColumn(race));
diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java
index 411b5379c72..6ee5c04a7c8 100644
--- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java
+++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/LeaderboardPanelMock.java
@@ -9,7 +9,7 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardPanel;
import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettingsFactory;
-import com.sap.sailing.gwt.ui.leaderboard.SortableColumn;
+import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSortableColumnWithMinMax;
import com.sap.sailing.gwt.ui.leaderboard.SortedCellTable;
import com.sap.sse.gwt.client.async.AsyncActionsExecutor;
import com.sap.sse.gwt.client.useragent.UserAgentDetails;
@@ -20,12 +20,12 @@ public class LeaderboardPanelMock extends LeaderboardPanel {
String leaderboardName, ErrorReporter errorReporter,
StringMessages stringMessages) {
super(sailingService, new AsyncActionsExecutor(), LeaderboardSettingsFactory.getInstance().createNewDefaultSettings(
- /* racesToShow */null, /* namesOfRacesToShow */ null, null, /* autoExpandFirstRace */ false), new CompetitorSelectionModel(
+ /* racesToShow */null, /* namesOfRacesToShow */ null, null, /* autoExpandFirstRace */ false, /* showRegattaRank */ true), new CompetitorSelectionModel(
/* hasMultiSelection */true), leaderboardName, errorReporter, stringMessages, new UserAgentDetails("gecko1_8"), /* showRaceDetails */ true);
}
@Override
- public void addColumn(SortableColumn column) {
+ public void addColumn(LeaderboardSortableColumnWithMinMax column) {
// TODO Auto-generated method stub
super.addColumn(column);
}
diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PolarSheetGenerationServiceTest.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PolarSheetGenerationServiceTest.java
index db4b3ba8ab5..ba99ba90492 100755
--- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PolarSheetGenerationServiceTest.java
+++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/PolarSheetGenerationServiceTest.java
@@ -209,7 +209,7 @@ public class PolarSheetGenerationServiceTest {
}
@Override
- public boolean isValid() {
+ public boolean isValidCached() {
return true;
}
diff --git a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java
index 00113e74ea5..b828e4b4245 100755
--- a/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java
+++ b/java/com.sap.sailing.gwt.ui.test/src/com/sap/sailing/gwt/ui/test/TestColumnSwapping.java
@@ -61,9 +61,9 @@ public class TestColumnSwapping {
return UUID.randomUUID().toString();
}
}, /* hasOverallDetails */ false);
- leaderboardOriginalDTO.addRace("Race1", /* explicitFactor */ null, 2., DEFAULT_FLEET, true, null, null);
- leaderboardOriginalDTO.addRace("Race3", /* explicitFactor */ null, 2., DEFAULT_FLEET, true, null, null);
- leaderboardOriginalDTO.addRace("Race2", /* explicitFactor */ null, 2., DEFAULT_FLEET, true, null, null);
+ leaderboardOriginalDTO.addRace("Race1", /* explicitFactor */ null, 2., /* regattaName */ null, /* seriesName */ null, DEFAULT_FLEET, true, null, null);
+ leaderboardOriginalDTO.addRace("Race3", /* explicitFactor */ null, 2., /* regattaName */ null, /* seriesName */ null, DEFAULT_FLEET, true, null, null);
+ leaderboardOriginalDTO.addRace("Race2", /* explicitFactor */ null, 2., /* regattaName */ null, /* seriesName */ null, DEFAULT_FLEET, true, null, null);
} catch (Exception e) {
e.printStackTrace();
}
@@ -126,9 +126,9 @@ public class TestColumnSwapping {
}
}, /* hasOverallDetails */ false);
assertNotNull("Leaderboard != NULL", lb);
- lb.addRace("1", /* explicitFactor */ null, 1., DEFAULT_FLEET, false, null, null);
- lb.addRace("2", /* explicitFactor */ null, 1., DEFAULT_FLEET, false, null, null);
- lb.addRace("3", /* explicitFactor */ null, 1., DEFAULT_FLEET, true, null, null);
+ lb.addRace("1", /* explicitFactor */ null, 1., /* regattaName */ null, /* seriesName */ null, DEFAULT_FLEET, false, null, null);
+ lb.addRace("2", /* explicitFactor */ null, 1., /* regattaName */ null, /* seriesName */ null, DEFAULT_FLEET, false, null, null);
+ lb.addRace("3", /* explicitFactor */ null, 1., /* regattaName */ null, /* seriesName */ null, DEFAULT_FLEET, true, null, null);
lb.moveRaceDown("1");
String[] s = new String[] { "2", "1", "3" };
for (int i = 0; i < lb.getRaceList().size(); i++) {
diff --git a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs
index 946db750b2f..b7c13760e13 100755
--- a/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs
+++ b/java/com.sap.sailing.gwt.ui/.settings/com.google.gwt.eclipse.core.prefs
@@ -1,4 +1,3 @@
eclipse.preferences.version=1
entryPointModules=
filesCopiedToWebInfLib=gwt-servlet.jar
-gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgLiAtbG9jYWxXb3JrZXJzIDMgLXN0cmljdCAtbG9nTGV2ZWwgVFJBQ0UgLWNvbXBpbGVSZXBvcnQgLVhzb3ljRGV0YWlsZWRdXT48L2V4dHJhLWFyZ3M+PHZtLWFyZ3M+PCFbQ0RBVEFbLVhteDIwMjRtIC1EZ3d0LnVzZWFyY2hpdmVzPWZhbHNlXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLnNhcC5zYWlsaW5nLmd3dC51aS5SYWNlQm9hcmQ8L2VudHJ5LXBvaW50LW1vZHVsZT48L2d3dC1jb21waWxlLXNldHRpbmdzPg\=\=
diff --git a/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs b/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs
index 548f1163d5a..8aa4ae5d789 100755
--- a/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs
+++ b/java/com.sap.sailing.gwt.ui/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,4 @@
eclipse.preferences.version=1
+encoding//src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties=UTF-8
encoding//src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties=UTF-8
encoding//src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties=UTF-8
diff --git a/java/com.sap.sailing.gwt.ui/AdminConsole.css b/java/com.sap.sailing.gwt.ui/AdminConsole.css
index 22a9b491cb8..d87c9892dd9 100644
--- a/java/com.sap.sailing.gwt.ui/AdminConsole.css
+++ b/java/com.sap.sailing.gwt.ui/AdminConsole.css
@@ -151,6 +151,7 @@ fieldset legend {
.gwt-Button {
margin: 3px 2px 3px 5px;
+ outline: 0;
}
.gwt-Button:hover {
diff --git a/java/com.sap.sailing.gwt.ui/CommonControls.css b/java/com.sap.sailing.gwt.ui/CommonControls.css
old mode 100644
new mode 100755
index 23b8c26a282..68dd8edf6e6
--- a/java/com.sap.sailing.gwt.ui/CommonControls.css
+++ b/java/com.sap.sailing.gwt.ui/CommonControls.css
@@ -30,6 +30,8 @@ body ::-webkit-scrollbar-track {
background: #b6b6b6;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
+ -o-border-radius: 5px;
+ -ms-border-radius: 5px;
border-radius: 5px;
overflow: hidden;
border: 1px solid #aaaaaa;
@@ -41,6 +43,8 @@ body ::-webkit-scrollbar-track {
margin: 12px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
+ -o-border-radius: 5px;
+ -ms-border-radius: 5px;
border-radius: 5px;
width: auto !important;
border: 1px solid #aaaaaa;
@@ -54,9 +58,13 @@ body ::-webkit-scrollbar-track {
position: relative;
-webkit-border-top-left-radius: 4px;
-moz-border-top-left-radius: 4px;
+ -o-border-top-left-radius: 4px;
+ -ms-border-top-left-radius: 4px;
border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
-moz-border-top-right-radius: 4px;
+ -o-border-top-right-radius: 4px;
+ -ms-border-top-right-radius: 4px;
border-top-right-radius: 4px;
}
@@ -136,10 +144,6 @@ body ::-webkit-scrollbar-track {
color:#A1A1A1;
}
-.gwt-SplitLayoutPanel-HDragger {
- width: 20px;
-}
-
.gwt-ToggleButton {
background: url(images/btn-cta-orangeleft.png) center top repeat-x;
padding: 8px;
@@ -152,18 +156,179 @@ body ::-webkit-scrollbar-track {
color: #fff;
}
-.gwt-SplitLayoutPanel-HDragger {
- width: 12px;
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Panel {
+ position: absolute;
+ right: 10px;
+ top: 3px;
+}
+
+.gwt-SplitLayoutPanel-EastToggleButton-Panel {
+ position: absolute;
+ bottom: 77px;
+ margin-left: -35px;
+}
+
+.gwt-SplitLayoutPanel-EastToggleButton {
+ height: 40px;
+ background-color: white;
+ border: none;
+ -webkit-transform: rotate(-90deg);
+ -moz-transform: rotate(-90deg);
+ -o-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ padding-right: 25px;
+ padding-left: 30px;
+ margin-left: -15px;
+ border-bottom: 1px solid #cecece;
+ border-right: 1px solid #cecece;
+ border-left: 1px solid #cecece;
+ border-bottom-right-radius: 10px;
+ border-bottom-left-radius: 10px;
+}
+
+.gwt-SplitLayoutPanel-EastToggleButton-Open {
+ background: white url(images/arrows_top_black_small.png) 96% 50% no-repeat;
+}
+
+.gwt-SplitLayoutPanel-EastToggleButton-Closed {
+ background: white url(images/arrows_bottom_black_small.png) 96% 50% no-repeat;
+}
+
+.gwt-SplitLayoutPanel-EastToggleButton:hover {
+ background-color: #ececec;
+}
+
+.gwt-SplitLayoutPanel-EastToggleButton:focus {
+ outline:0 !important;
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton {
+ height: 33px;
+ background-color: #fff;
+ border: 1px solid #cecece;
+ margin-left: 5px;
+ padding: 2px 40px;
+ border-radius: 7px;
+ margin-top: 0px;
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Closed {
+ background: white url(images/arrows_top_black_small.png) 95% 50% no-repeat;
+ font-weight: normal;
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Open {
+ background: white url(images/arrows_bottom_black_small.png) 95% 50% no-repeat;
+ font-weight: bold;
+ border-width: 3px;
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton:focus {
+ outline:0 !important;
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton:hover {
+ background-color: #ececec;
}
.gwt-SplitLayoutPanel-HDragger {
- background: #cbcaca url(images/thumb_vertical.png) center center no-repeat;
- cursor: col-resize;
+ position: absolute;
+ height: 60px !important;
+ width: 25px !important;
+ margin-left: 3px;
+ top: 40% !important;
+ background: #ffffff url(images/thumb_vertical.png) 70% 50% no-repeat;
+ border: 2px solid #cecece;
+ border-left: 0px;
+ cursor: col-resize;
+ border-top-right-radius: 25px;
+ border-bottom-right-radius: 25px;
+ z-index: 1;
+}
+
+.SplitLayoutPanel-Divider-Horizontal {
+ background: #ffffff;
+}
+
+.SplitLayoutPanel-Divider-Vertical {
+ background: #ffffff;
+ border-top: 1px solid #cecece;
}
.gwt-SplitLayoutPanel-VDragger {
- background: #cbcaca url(images/thumb_horz.png) center center no-repeat;
- cursor: row-resize;
+ position: absolute;
+ width: 60px !important;
+ height: 21px !important;
+ left: 48% !important;
+ top: 2px !important;
+ background: #ffffff url(images/thumb_horz.png) 50% 30% no-repeat;
+ cursor: row-resize;
+ border: 2px solid #cecece;
+ border-bottom: 0px;
+ border-top-left-radius: 25px;
+ border-top-right-radius: 25px;
+ opacity: .7;
+ z-index: 1;
+}
+
+.gwt-SplitLayoutPanel-CloseAndSettingsButton-Panel {
+ position: absolute;
+ right: 2px;
+ top: 2px;
+ z-index: 1;
+}
+
+.gwt-SplitLayoutPanel-CloseButton {
+ margin-left: 10px;
+ border-top-left-radius: 25px;
+ border-top-right-radius: 25px;
+ border-bottom-left-radius: 25px;
+ border-bottom-right-radius: 25px;
+ background: white url(images/close_black.png) center no-repeat;
+ z-index: 1;
+ width: 28px;
+ height: 28px;
+ cursor: pointer;
+}
+
+.gwt-SplitLayoutPanel-CloseButton:focus {
+ outline:0 !important;
+}
+
+.gwt-SplitLayoutPanel-CloseButton:hover {
+ background-color: #ececec;
+}
+
+.gwt-SettingsButton {
+ border: none;
+ background: grey url(images/SAP_RV_Settings.png) center no-repeat;
+ z-index: 1;
+ width: 28px;
+ height: 28px;
+ cursor: pointer;
+}
+
+.gwt-SettingsButton:hover {
+ background-color: #cecece;
+}
+
+.gwt-SettingsButton:focus {
+ outline: 0 !important;
+}
+
+.gwt-MapSettingsButton {
+ margin-right: 30px;
+ margin-top: 5px;
+ border-top-left-radius: 25px;
+ border-top-right-radius: 25px;
+ border-bottom-left-radius: 25px;
+ border-bottom-right-radius: 25px;
+ border: none;
+ background: white url(images/SAP_RV_SettingsBlack.png) center no-repeat;
+ z-index: 1;
+ width: 28px;
+ height: 28px;
+ cursor: pointer;
}
.gwt-ToggleButton-up-hovering, .gwt-ToggleButton-down-hovering {
@@ -310,15 +475,13 @@ body ::-webkit-scrollbar-track {
}
.timeLinePanel {
- color: #fff;
+ color: black;
width: 100%;
position: fixed;
bottom: 0;
z-index: 9;
- background: #7c7b7c;
- box-shadow: 0 0 20px #858585;
- -webkit-box-shadow: 0 0 20px #858585;
- -moz-box-shadow: 0 0 20px #858585;
+ background: #f6f6f6;
+ border-top: 2px solid #cecece;
}
.timeLineInnerBgPanel {
@@ -337,8 +500,6 @@ body ::-webkit-scrollbar-track {
.timePanel-controls {
margin: 0;
padding: 7px 12px 0 12px;
- -webkit-box-shadow: 0px -7px 8px 0px rgba(84, 84, 84, 1);
- box-shadow: 0px -7px 8px 0px rgba(84, 84, 84, 1);
height: 29px;
}
@@ -352,7 +513,7 @@ body ::-webkit-scrollbar-track {
.timePanel-timeslider-play {
float:left;
- padding: 10px;
+ padding: 10px 4px;
height: 24px;
margin: 5px 14px 5px 0;
}
@@ -395,7 +556,7 @@ body ::-webkit-scrollbar-track {
.timePanel-controls-timeDelay {
float: right;
- margin: 0 10px 0 0;
+ margin: 0 50px 0 0;
}
.timePanel-controls-playmode{
@@ -421,8 +582,6 @@ body ::-webkit-scrollbar-track {
}
.timePanelInnerWrapper {
- -webkit-box-shadow: inset 0px -7px 13px 0px rgba(84, 84, 84, 1);
- box-shadow: inset 0px -7px 13px 0px rgba(84, 84, 84, 1);
}
@@ -438,6 +597,8 @@ body ::-webkit-scrollbar-track {
box-shadow: 0 0 20px #858585;
-moz-box-shadow: 0 0 20px #858585;
-webkit-box-shadow: 0 0 20px #858585;
+ -o-box-shadow: 0 0 20px #858585;
+ -ms-box-shadow: 0 0 20px #858585;
z-index: 1;
}
@@ -456,7 +617,7 @@ body ::-webkit-scrollbar-track {
right:0;
}
-.globalNavigationLink, .globalNavigationLink:visited {
+.globalNavigation-Link, .globalNavigation-Link:visited {
font-family: OpenSansSemiBold, Verdana, Arial, sans-serif;
border: none;
display: inline-block;
@@ -476,13 +637,13 @@ body ::-webkit-scrollbar-track {
white-space: nowrap;
}
-.globalNavigationLink:active {
+.globalNavigation-Link:active {
top: 1px;
position: relative;
border: none;
}
-.globalNavigationLink:hover {
+.globalNavigation-Link:hover {
background: url(images/btn-cta-orangeleft.png) center -30px repeat-x;
cursor: pointer;
}
@@ -537,12 +698,17 @@ body ::-webkit-scrollbar-track {
.gwt-DialogBox .Caption {
font-size: 14px;
- padding: 14px 10px;
- background: url(images/dialogBox-bg.png) 0 0 repeat-x;
+ padding: 8px 10px;
+ background-color: #cecece;
+ border: 1px solid #cecece;
-webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
+ -o-border-radius-topleft: 5px;
+ -o-border-radius-topright: 5px;
+ -ms-border-radius-topleft: 5px;
+ -ms-border-radius-topright: 5px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
font-family: OpenSansSemiBold, Verdana, Arial, sans-serif;
@@ -551,9 +717,13 @@ body ::-webkit-scrollbar-track {
.gwt-DialogBox .dialogContent {
background: #ffffff;
padding: 10px;
- border: 10px solid #a6a6a6;
+ border: 1px solid #cecece;
-webkit-border-bottom-right-radius: 5px;
-webkit-border-bottom-left-radius: 5px;
+ -o-border-bottom-right-radius: 5px;
+ -o-border-bottom-left-radius: 5px;
+ -ms-border-bottom-right-radius: 5px;
+ -ms-border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px;
-moz-border-radius-bottomleft: 5px;
border-bottom-right-radius: 5px;
@@ -563,23 +733,26 @@ body ::-webkit-scrollbar-track {
.gwt-Button, .gwt-Button:visited {
font-family: OpenSansSemiBold, Verdana, Arial, sans-serif;
border: none;
-
- background: url(images/btn-cta-orangeleft.png) center top repeat-x;
+ background: url(images/btn-cta-orangeleft.png) center top repeat-x;
display: inline-block;
padding: 2px 10px 4px;
color: #fff;
text-decoration: none;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
+ -o-border-radius: 5px;
+ -ms-border-radius: 5px;
border-radius: 5px;
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
cursor: pointer;
height: 24px;
white-space: nowrap;
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
}
.gwt-Button:active {
@@ -600,6 +773,8 @@ body ::-webkit-scrollbar-track {
border: 1px solid #919090;
-moz-box-shadow: none;
-webkit-box-shadow: none;
+ -o-box-shadow: none;
+ -ms-box-shadow: none;
box-shadow: none;
border: none;
text-shadow: none;
@@ -659,7 +834,6 @@ body ::-webkit-scrollbar-track {
}
.SettingsDialogComponent .dialogInnerHeadline {
- background: url(images/settingsDialog_bg.png) repeat-x 0 0 #E5E5E5;
border: 1px solid #CCCCCC;
font-family: OpenSansSemiBold,Arial,Verdana,sans-serif;
height: 21px;
@@ -667,6 +841,8 @@ body ::-webkit-scrollbar-track {
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
+ -o-border-radius: 3px;
+ -ms-border-radius: 3px;
margin: 0 0 10px 0;
}
@@ -743,4 +919,49 @@ video {
.pointeredLink {
cursor: pointer;
cursor: hand;
-}
\ No newline at end of file
+}
+
+.betterCheckboxCellSelected {
+ margin: 0px;
+ height: 18px;
+ width: 18px;
+ border: 1px;
+ background-color: #acacac;
+ vertical-align: middle;
+}
+
+.betterCheckboxCellDeselected {
+ margin-left: 2px; /* account for the selection border that pushes a selected checkbox to the side */
+ margin-top: 0px;
+ margin-bottom: 0px;
+ margin-right: 0px;
+ border: 1px;
+ height: 18px;
+ width: 18px;
+ vertical-align: middle;
+}
+
+.LeaderboardPanel-FilterControl-Panel {
+ width: 380px;
+ border-top: 1px solid #ececec;
+ margin-top: 3px;
+}
+
+.LeaderboardPanel-FilterClear-Button {
+ margin-top: 2px;
+ font-size: 10px;
+ outline: 0;
+ height: 23px;
+ background-color: #fff;
+ border: 1px solid #cecece;
+ border-radius: 7px;
+}
+
+.LeaderboardPanel-FilterClear-Button:hover {
+ background-color: #ececec;
+}
+
+.LeaderboardPanel-FilterControl-StatusLabel {
+ padding: 8px 2px;
+ font-size: 10px;
+}
diff --git a/java/com.sap.sailing.gwt.ui/CommonGwtControls.css b/java/com.sap.sailing.gwt.ui/CommonGwtControls.css
deleted file mode 100644
index e3449e68e54..00000000000
--- a/java/com.sap.sailing.gwt.ui/CommonGwtControls.css
+++ /dev/null
@@ -1,209 +0,0 @@
-.gwt-SplitLayoutPanel-HDragger {
- width: 20px;
-}
-
-.gwt-ToggleButton {
- background: url(images/btn-cta-orangeleft.png) center top repeat-x;
- padding: 8px;
- margin: 0 11px 0 0;
- border: 0;
-}
-
-.gwt-ToggleButton-down {
- background: url(images/btn-cta-orangeleft.png) center -30px repeat-x;
- color: #fff;
-}
-
-.gwt-SplitLayoutPanel-HDragger {
- width: 12px;
-}
-
-.gwt-SplitLayoutPanel-HDragger {
- background: #cbcaca url(images/thumb_vertical.png) center center no-repeat;
- cursor: col-resize;
-}
-
-.gwt-SplitLayoutPanel-VDragger {
- background: #cbcaca url(images/thumb_horz.png) center center no-repeat;
- cursor: row-resize;
-}
-
-.gwt-ToggleButton-up-hovering, .gwt-ToggleButton-down-hovering {
- background: url(images/btn-cta-orangeleft-down.png) center top repeat-x;
- color: #fff;
-}
-
-.gwt-MenuBarPopup .menuPopupTopLeft {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupTopCenter {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupTopCenter {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupTopRight {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupMiddleLeft {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupMiddleRight {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupMiddleRight {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupBottomCenter {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupBottomRight {
- background: none !important;
-}
-
-.gwt-MenuBarPopup .menuPopupBottomLeft {
- background: none !important;
-}
-
-.gwt-MenuBar-vertical .gwt-MenuItem {
- padding: 10px;
- padding-bottom: 5px;
- padding-top: 5px;
-}
-
-.gwt-MenuBar .gwt-MenuItem-selected {
- background: none repeat scroll 0 0 #efaa00;
-}
-
-.gwt-DialogBox {
- -webkit-box-shadow: 7px 7px 5px rgba(50, 50, 50, 0.75);
- -moz-box-shadow: 7px 7px 5px rgba(50, 50, 50, 0.75);
- box-shadow: 7px 7px 5px rgba(50, 50, 50, 0.75);
- line-height: 1.4;
-}
-
-.gwt-DialogBox .Caption {
- font-size: 14px;
- padding: 14px 10px;
- background: url(images/dialogBox-bg.png) 0 0 repeat-x;
- -webkit-border-top-left-radius: 5px;
- -webkit-border-top-right-radius: 5px;
- -moz-border-radius-topleft: 5px;
- -moz-border-radius-topright: 5px;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
- font-family: UbuntuBold, Verdana, Arial, sans-serif;
-}
-
-.gwt-DialogBox .dialogContent {
- background: #ffffff;
- padding: 10px;
- border: 10px solid #a6a6a6;
- -webkit-border-bottom-right-radius: 5px;
- -webkit-border-bottom-left-radius: 5px;
- -moz-border-radius-bottomright: 5px;
- -moz-border-radius-bottomleft: 5px;
- border-bottom-right-radius: 5px;
- border-bottom-left-radius: 5px;
-}
-
-.gwt-Button, .gwt-Button:visited {
- font-family: UbuntuBold, Verdana, Arial, sans-serif;
- border: none;
-
- background: url(images/btn-cta-orangeleft.png) center top repeat-x;
- display: inline-block;
- padding: 2px 10px 4px;
- color: #fff;
- text-decoration: none;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
- text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
- border-bottom: 1px solid rgba(0, 0, 0, 0.25);
- cursor: pointer;
- height: 24px;
- white-space: nowrap;
-}
-
-.gwt-Button:active {
- top: 1px;
- position: relative;
- border: none;
-}
-
-.gwt-Button:hover {
- background: url(images/btn-cta-orangeleft.png) center -30px repeat-x;
- cursor: pointer;
-}
-
-.gwt-Button[disabled] {
- cursor: default;
- color: #888;
- background: #F1F1F1;
- border: 1px solid #919090;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
- box-shadow: none;
- border: none;
- text-shadow: none;
-}
-
-.gwt-Button[disabled]:hover {
- cursor: default;
- color: #888;
- background: #F1F1F1;
-}
-
-.gwt-Button[disabled]:active {
- cursor: default;
- color: #888;
- background: #F1F1F1;
- top: 0;
-}
-
-.gwt-ButtonLarge
-.gwt-ButtonMedium
-.gwt-ButtonSmall
-
-.gwt-DialogBox .boxPanel {
- padding: 0 0 10px 0;
-}
-
-.gwt-DialogBox .boxPanel:after {
- display: inline-block;
- content: " ";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-.gwt-DialogBox .settingsDialogLabel {
- float: left;
- padding: 3px 6px 0 0;
-}
-
-.gwt-DialogBox .settingsDialogValue {
- float: right;
-}
-
-.gwt-DialogBox .additionalWidgets {
- padding: 5px 0 0 0;
- text-align: right;
-}
-
-.gwt-DialogBox .gwt-Label {
- line-height: 1.4;
-}
diff --git a/java/com.sap.sailing.gwt.ui/DataMining.css b/java/com.sap.sailing.gwt.ui/DataMining.css
index 4fdabcb0f2e..a1e0d76ae36 100644
--- a/java/com.sap.sailing.gwt.ui/DataMining.css
+++ b/java/com.sap.sailing.gwt.ui/DataMining.css
@@ -80,6 +80,8 @@ table {
box-shadow: 0 0 20px #858585;
-moz-box-shadow: 0 0 20px #858585;
-webkit-box-shadow: 0 0 20px #858585;
+ -o-box-shadow: 0 0 20px #858585;
+ -ms-box-shadow: 0 0 20px #858585;
}
.LogoAndTitlePanel:after {
@@ -192,9 +194,13 @@ input.magnifier {
text-decoration: none;
-moz-border-radius: 5px 0 0 5px;
-webkit-border-radius: 5px 0 0 5px;
+ -o-border-radius: 5px 0 0 5px;
+ -ms-border-radius: 5px 0 0 5px;
border-radius: 5px 0 0 5px;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
@@ -208,9 +214,12 @@ input.magnifier {
height: 23px;
margin: 0 12px 0 1px;
-webkit-border-radius: 0px 3px 3px 0px;
+ -moz-border-radius: 0px 3px 3px 0px;
+ -o-border-radius: 0px 3px 3px 0px;
+ -ms-border-radius: 0px 3px 3px 0px;
border-radius: 0px 3px 3px 0px;
}
.dataTypeLabel {
font-weight: bold;
-}
\ No newline at end of file
+}
diff --git a/java/com.sap.sailing.gwt.ui/Home.html b/java/com.sap.sailing.gwt.ui/Home.html
index 319a40e0491..b834326a418 100644
--- a/java/com.sap.sailing.gwt.ui/Home.html
+++ b/java/com.sap.sailing.gwt.ui/Home.html
@@ -7,13 +7,14 @@
+
-
+
diff --git a/java/com.sap.sailing.gwt.ui/Leaderboard.css b/java/com.sap.sailing.gwt.ui/Leaderboard.css
index 270d817cdc7..6bdeedb1d78 100755
--- a/java/com.sap.sailing.gwt.ui/Leaderboard.css
+++ b/java/com.sap.sailing.gwt.ui/Leaderboard.css
@@ -134,15 +134,23 @@ body, table td, select, button {
height: 8px;
-moz-border-radius-topleft: 50%;
-webkit-border-top-left-radius: 50%;
+ -o-border-top-left-radius: 50%;
+ -ms-border-top-left-radius: 50%;
border-top-left-radius: 50%;
-moz-border-radius-topright: 50%;
-webkit-border-top-right-radius: 50%;
+ -o-border-top-right-radius: 50%;
+ -ms-border-top-right-radius: 50%;
border-top-right-radius: 50%;
-moz-border-radius-bottomleft: 50%;
-webkit-border-bottom-left-radius: 50%;
+ -o-border-bottom-left-radius: 50%;
+ -ms-border-bottom-left-radius: 50%;
border-bottom-left-radius: 50%;
-moz-border-radius-bottomright: 50%;
-webkit-border-bottom-right-radius: 50%;
+ -o-border-bottom-right-radius: 50%;
+ -ms-border-bottom-right-radius: 50%;
border-bottom-right-radius: 50%;
float: left;
}
diff --git a/java/com.sap.sailing.gwt.ui/LeaderboardNewHome.css b/java/com.sap.sailing.gwt.ui/LeaderboardNewHome.css
new file mode 100644
index 00000000000..94f6c74fc11
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/LeaderboardNewHome.css
@@ -0,0 +1,122 @@
+@import url(fontface.css);
+@import url(CommonControls.css);
+@import url(ViewerToolbar.css);
+
+table {
+ border-collapse: separate; }
+
+.leaderboardContent {
+}
+
+.leaderboardContent td, .leaderboardContent th {
+ vertical-align: bottom;
+ line-height: 1.3;
+ padding-top: 2px;
+}
+
+.leaderboardContent-toolbar {
+
+}
+
+.leaderboardLabel {
+ border-bottom: 2px solid #007dc0;
+ font-weight: bold;
+ margin: 5px;
+ }
+
+.refreshAndSettings {
+ background: #f8f8f8;
+ height: 30px; }
+
+.refreshAndSettings table td {
+ padding: 0 10px 0 0;}
+
+.refreshAndSettings table table td{
+ padding: 0 0 0 0;}
+
+input.magnifier{
+ display: block;
+ margin: 3px auto 0 auto !important;
+}
+
+body, table td, select, button {
+ font-family: 'OpenSansLight', Arial, Verdana, sans-serif;
+ font-size: 14px;
+}
+
+.errorLabel {
+ color: #FF0000;
+}
+
+.abstractChartPanel-importantMessageOfChart {
+ font-family: 'OpenSansBold',Arial,Verdana,sans-serif;
+ font-size: 20px;
+ height: 70px;
+ margin: 0 auto;
+ padding: 49px 0 0 80px;
+ width: 300px;
+ color: #7c7c7c;
+ background: url(images/important-message.png) left center no-repeat;
+}
+
+.LeaderboardHeader {
+ position: relative;
+ margin: 0 auto;
+ width: 400px;
+ text-align: center;
+ font-family: 'OpenSansRegular', Arial, Verdana, sans-serif;
+ font-size: 18px;
+ color: #fff;
+ margin-top: 22px;
+}
+
+.leaderboardHeading {
+ font-size: 16px;
+ font-family: 'OpenSansRegular', Arial, Verdana, sans-serif;
+ font-weight: bold;
+}
+
+.gwt-DialogBox {
+ z-index: 20;
+}
+
+.bold {
+ font-family: "OpenSansCondensedBold", sans-serif;
+}
+
+.trackingQuality-circle {
+ width: 8px;
+ height: 8px;
+ -moz-border-radius-topleft: 50%;
+ -webkit-border-top-left-radius: 50%;
+ border-top-left-radius: 50%;
+ -moz-border-radius-topright: 50%;
+ -webkit-border-top-right-radius: 50%;
+ border-top-right-radius: 50%;
+ -moz-border-radius-bottomleft: 50%;
+ -webkit-border-bottom-left-radius: 50%;
+ border-bottom-left-radius: 50%;
+ -moz-border-radius-bottomright: 50%;
+ -webkit-border-bottom-right-radius: 50%;
+ border-bottom-right-radius: 50%;
+ float: left;
+}
+
+.circleYellow {
+ background: #fbba00;
+}
+
+.circleGreen {
+ background: #8ab54e;
+}
+
+.circleRed {
+ background: #f01010;
+}
+
+.busyIndicator-Simple {
+ margin-top: 7px;
+}
+
+.busyIndicator-Circle {
+}
diff --git a/java/com.sap.sailing.gwt.ui/PolarSheets.html b/java/com.sap.sailing.gwt.ui/PolarSheets.html
index fdf8b1e9f87..19e100f2629 100644
--- a/java/com.sap.sailing.gwt.ui/PolarSheets.html
+++ b/java/com.sap.sailing.gwt.ui/PolarSheets.html
@@ -11,7 +11,7 @@
-
+
diff --git a/java/com.sap.sailing.gwt.ui/Profile SailingGWT.launch b/java/com.sap.sailing.gwt.ui/Profile SailingGWT.launch
new file mode 100755
index 00000000000..32331edf760
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/Profile SailingGWT.launch
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/com.sap.sailing.gwt.ui/RaceBoard.css b/java/com.sap.sailing.gwt.ui/RaceBoard.css
index f3daea67dce..86583207d0f 100644
--- a/java/com.sap.sailing.gwt.ui/RaceBoard.css
+++ b/java/com.sap.sailing.gwt.ui/RaceBoard.css
@@ -30,7 +30,7 @@ iframe {display: block; width: 100%; height: 100%; border: none; overflow-y: aut
}
body {
- background: #ebebeb;
+ background: white;
font-family: 'OpenSansRegular', Arial, Verdana, sans-serif;
line-height: 1;
font-size: 14px;
@@ -68,13 +68,18 @@ table {
.CombinedWindPanel {
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
+ -o-border-radius: 4px;
+ -ms-border-radius: 4px;
border-radius: 4px;
background-color: rgba(255, 255, 255, 0.75);
border: 1px solid #C9CACA;
}
-.RaceBoardHeaderPanel {
- margin: 0 12px 14px 12px;
+.RaceMap-HeaderPanel {
+ height: 60px;
+ width: 100%;
+ background-color: #333;
+ opacity: .5;
}
.leaderboardLabel {
@@ -193,6 +198,9 @@ img.openColumn {
height: 23px;
margin: 0 12px 0 1px;
-webkit-border-radius: 0px 3px 3px 0px;
+ -moz-border-radius: 0px 3px 3px 0px;
+ -o-border-radius: 0px 3px 3px 0px;
+ -ms-border-radius: 0px 3px 3px 0px;
border-radius: 0px 3px 3px 0px;
}
@@ -203,17 +211,6 @@ img.openColumn {
cursor: pointer;
}
-.raceBoardNavigation-filterButton {
- background: url(images/filter_white.png), url(images/btn-cta-orangeleft.png);
- background-position: center, center 0;
- background-repeat: no-repeat, repeat-x;
- width: 27px;
- height: 23px;
- margin: 0 12px 0 1px;
- -webkit-border-radius: 0px 3px 3px 0px;
- border-radius: 0px 3px 3px 0px;
-}
-
.raceBoardNavigation-filterButton:hover {
background-image: url(images/filter_white.png), url(images/btn-cta-orangeleft.png);
background-position: center, center -30px;
@@ -236,9 +233,13 @@ img.openColumn {
text-decoration: none;
-moz-border-radius: 5px 0 0 5px;
-webkit-border-radius: 5px 0 0 5px;
+ -o-border-radius: 5px 0 0 5px;
+ -ms-border-radius: 5px 0 0 5px;
border-radius: 5px 0 0 5px;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
@@ -271,12 +272,16 @@ img.openColumn {
text-decoration: none;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
border-radius: 5px 5px 5px 5px;
-moz-border-radius: 5px 0 0 5px;
-webkit-border-radius: 5px 5px 5px 5px;
+ -o-border-radius: 5px 5px 5px 5px;
+ -ms-border-radius: 5px 5px 5px 5px;
}
.raceBoardNavigation-standaloneElement:active {
@@ -298,41 +303,79 @@ img.openColumn {
margin: 0 0 0 5px;
}
+.timePanelButton-SlowDown {
+ background-color: red !important;
+}
+
+.timePanelButton-SpeedUp {
+ background-color: green !important;
+}
+
.playPauseButton {
padding: 0;
float: left;
- width: 28px;
- height: 25px;
- background: url(images/timeslider-play-active-icon.png) 0 0 no-repeat;
+ width: 32px;
+ height: 28px;
+ background: url(images/viewicons/@1x/img/SAP_RV_Play_INACTIVE.png) center no-repeat;
cursor: pointer;
+ border: 1px solid #cecece;
+ border-radius: 4px;
+ outline: 0;
}
.playPauseButton:hover{
- background: url(images/playbutton-hover.png) 0 0 no-repeat !important;
cursor: pointer;
+ background-color: #cecece;
}
.playPauseButtonPause {
- background: url(images/timeslider-pause-icon.png) 0 0 no-repeat;
+ background: url(images/viewicons/@2x/img/SAP_RV_Pause_INACTIVE.png) 2px 0 no-repeat;
+ outline: 0;
+ background-size: contain;
}
.playPauseButtonPause:hover {
- background: url(images/playbuttonPause-hover.png) 0 0 no-repeat !important;
cursor: pointer;
}
.backToLivePlayButton {
- background: url(images/btn-cta-greenleft.png) center top repeat-x;
- margin: 0 0 0 5px;
+ position: absolute;
+ right: 15px;
+ top: 8px;
+ width: 42px;
+ height: 38px;
+ font-size: 8px;
+ white-space: normal;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -o-border-radius: 5px;
+ -ms-border-radius: 5px;
+ border-radius: 5px;
+ border: none;
+ cursor: pointer;
+}
+
+.backToLivePlayButton-Inactive {
+ color: #6dc021;
+ background-color: white;
+ font-weight: bold;
+}
+
+.backToLivePlayButton-Active {
+ background-color: #6dc021;
+ color: white;
+ font-weight: normal;
}
.backToLivePlayButton:hover {
- background: url(images/btn-cta-greenleft.png) center -30px repeat-x;
- margin: 0 0 0 5px;
+ border: 2px solid gray;
+}
+
+.backToLivePlayButton:focus {
+ outline: 0 !important;
}
.dockLayoutPanel div[style="position: absolute; overflow: hidden; left: 0px; right: 0px; bottom: 0px; height: 90px;"] {
- box-shadow: 0 0 8px #424242;
z-index: 10;
}
@@ -346,15 +389,23 @@ img.openColumn {
height: 8px;
-moz-border-radius-topleft: 50%;
-webkit-border-top-left-radius: 50%;
+ -o-border-top-left-radius: 50%;
+ -ms-border-top-left-radius: 50%;
border-top-left-radius: 50%;
-moz-border-radius-topright: 50%;
-webkit-border-top-right-radius: 50%;
+ -o-border-top-right-radius: 50%;
+ -ms-border-top-right-radius: 50%;
border-top-right-radius: 50%;
-moz-border-radius-bottomleft: 50%;
-webkit-border-bottom-left-radius: 50%;
+ -o-border-bottom-left-radius: 50%;
+ -ms-border-bottom-left-radius: 50%;
border-bottom-left-radius: 50%;
-moz-border-radius-bottomright: 50%;
-webkit-border-bottom-right-radius: 50%;
+ -o-border-bottom-right-radius: 50%;
+ -ms-border-bottom-right-radius: 50%;
border-bottom-right-radius: 50%;
float: left;
}
@@ -372,8 +423,222 @@ img.openColumn {
}
.busyIndicator-Simple {
- margin-top: 7px;
+ position: absolute;
+ top: 0.7em;
+ right: 7.4em;
}
.busyIndicator-Circle {
}
+
+.raceBoard-TitlePanel {
+ position: relative;
+ top: 10px;
+ z-index: 10;
+ color: #fff;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.raceBoard-TitlePanel-RaceNameLabel {
+ font-size: 32px;
+ font-weight: bold;
+ padding: 7px;
+}
+
+.raceBoard-Logo {
+ position: absolute;
+ top: 6px;
+ left: 10px;
+ z-index: 10;
+ cursor: pointer;
+}
+
+.SideBySideComponentViewer-MainPanel {
+ top: 12px;
+}
+
+.TimePanel-ShowExtended-Button {
+ width: 29px;
+ height: 28px;
+ float: left;
+ cursor: pointer;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ border: 1px solid #ececec;
+}
+
+.TimePanel-ShowExtended-Button-Open {
+ background: white url(images/arrows_top_black.png) center no-repeat;
+}
+
+.TimePanel-ShowExtended-Button-Closed {
+ background: white url(images/arrows_bottom_black.png) center no-repeat;
+}
+
+.TimePanel-ShowExtended-Button:hover {
+ background-color: #cecece;
+}
+
+.TimePanel-ShowExtended-Button:focus {
+ outline: 0 !important;
+}
+
+.RaceBoard-globalNavigation-Link {
+ display: inline;
+ margin-right: 3px;
+}
+
+.RaceBoard-globalNavigation-Link a {
+ color: #fff;
+ cursor: pointer;
+}
+
+.RaceBoard-globalNavigation-Link+.RaceBoard-globalNavigation-Link:before {
+ content: ' \00bb\00a0';
+}
+
+.TimePanel-settingsButtonStyle {
+ position: absolute;
+ right: 0px;
+ z-index: 1;
+ border: none;
+}
+
+.TimePanel-settingsButtonStyle:focus {
+ outline: 0 !important;
+}
+
+.TimePanel-settingsButtonStyle:hover {
+ border: 1px solid gray;
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Closed-multiCompetitorRaceChart {
+ background-color: white;
+ background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png), url(images/arrows_top_black_small.png);
+ background-repeat: no-repeat, no-repeat;
+ background-position: 5% 50%, 95% 50%
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Open-multiCompetitorRaceChart {
+ background-color: white;
+ background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png), url(images/arrows_bottom_black_small.png);
+ background-repeat: no-repeat, no-repeat;
+ background-position: 5% 50%, 95% 50%
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Closed-windChart {
+ background-color: white;
+ background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png), url(images/arrows_top_black_small.png);
+ background-repeat: no-repeat, no-repeat;
+ background-position: 5% 50%, 95% 50%
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Open-windChart {
+ background-color: white;
+ background-image: url(images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png), url(images/arrows_bottom_black_small.png);
+ background-repeat: no-repeat, no-repeat;
+ background-position: 5% 50%, 95% 50%
+}
+
+.gwt-SplitLayoutPanel-EastToggleButton-Open-leaderboard {
+ background-color: white;
+ background-image: url(images/viewicons/@1x/img/SAP_RV_Leaderboard_GHOSTED.png), url(images/arrows_top_black_small.png);
+ background-repeat: no-repeat, no-repeat;
+ background-position: 4% 50%, 96% 50%
+}
+
+.gwt-SplitLayoutPanel-EastToggleButton-Closed-leaderboard {
+ background-color: white;
+ background-image: url(images/viewicons/@1x/img/SAP_RV_Leaderboard_INACTIVE.png), url(images/arrows_bottom_black_small.png);
+ background-repeat: no-repeat, no-repeat;
+ background-position: 4% 50%, 96% 50%
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Closed-media {
+ background-color: white;
+ background-image: url(images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png);
+ background-repeat: no-repeat, no-repeat;
+ background-position: 4% 50%, 96% 50%
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Open-media {
+ background-color: white;
+ background-image: url(images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png);
+ background-repeat: no-repeat, no-repeat;
+ background-position: 4% 50%, 96% 50%
+}
+
+.gwt-SplitLayoutPanel-NorthSouthToggleButton-Small-media {
+ background-position: 50% 50%, 100% 50% !important;
+ margin-left: 0px !important;
+ padding: 2px 20px !important;
+}
+
+.RegattaRaceInformation-Header {
+ position: relative;
+ left: 140px;
+ top: 11px;
+}
+
+.RegattaRaceInformation-Header .RaceName-Label {
+ display: inline;
+ color: white;
+ margin-right: 10px;
+ font-size: 36px;
+}
+
+.RegattaRaceInformation-Header .RaceSeriesAndFleet-Label {
+ display: inline;
+ color: white;
+ font-size: 15px;
+}
+
+.RegattaAndRaceTime-Header {
+ position: absolute;
+ right: 10px;
+ top: 13px;
+ text-align: right;
+ color: white;
+}
+
+.RegattaAndRaceTime-Header .RegattaName-Anchor {
+ font-size: 15px;
+ color: white;
+ text-decoration: none;
+ padding-left: 25px;
+ background-image: url(images/home.png);
+ background-repeat: no-repeat;
+ background-size: 17px;
+ background-position: 4px 1px;
+}
+
+.RegattaAndRaceTime-Header .RegattaName-Anchor:hover {
+ text-decoration: underline;
+}
+
+.RegattaAndRaceTime-Header .RaceTime-Label {
+ font-size: 15px;
+ margin-top: 5px;
+}
+
+.VideoPopup-Close-Button {
+ border: none;
+}
+
+.gwt-Button, .gwt-Button:visited {
+ background-color: #fcbb22;
+ background-image: none !important;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ -o-box-shadow: none;
+ -ms-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+}
+
+.gwt-Button:hover {
+ background-color: #fcbb22 !important;
+}
\ No newline at end of file
diff --git a/java/com.sap.sailing.gwt.ui/RegattaOverview.css b/java/com.sap.sailing.gwt.ui/RegattaOverview.css
index fa4fb0cf139..87fc2aaaa64 100644
--- a/java/com.sap.sailing.gwt.ui/RegattaOverview.css
+++ b/java/com.sap.sailing.gwt.ui/RegattaOverview.css
@@ -80,6 +80,8 @@ table {
box-shadow: 0 0 20px #858585;
-moz-box-shadow: 0 0 20px #858585;
-webkit-box-shadow: 0 0 20px #858585;
+ -o-box-shadow: 0 0 20px #858585;
+ -ms-box-shadow: 0 0 20px #858585;
}
.LogoAndTitlePanel:after {
@@ -136,15 +138,23 @@ table {
background: url(images/functionBar_bg.png) 0 0 repeat-x;
-moz-border-radius-topleft: 5px;
-webkit-border-top-left-radius: 5px;
+ -o-border-top-left-radius: 5px;
+ -ms-border-top-left-radius: 5px;
border-top-left-radius: 5px;
-moz-border-radius-topright: 5px;
-webkit-border-top-right-radius: 5px;
+ -o-border-top-right-radius: 5px;
+ -ms-border-top-right-radius: 5px;
border-top-right-radius: 5px;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
+ -o-border-bottom-left-radius: 5px;
+ -ms-border-bottom-left-radius: 5px;
border-bottom-left-radius: 5px;
-moz-border-radius-bottomright: 5px;
-webkit-border-bottom-right-radius: 5px;
+ -o-border-bottom-right-radius: 5px;
+ -ms-border-bottom-right-radius: 5px;
border-bottom-right-radius: 5px;
margin: 0 0 15px 0;
}
@@ -162,15 +172,23 @@ table {
height: 10px;
-moz-border-radius-topleft: 50%;
-webkit-border-top-left-radius: 50%;
+ -o-border-top-left-radius: 50%;
+ -ms-border-top-left-radius: 50%;
border-top-left-radius: 50%;
-moz-border-radius-topright: 50%;
-webkit-border-top-right-radius: 50%;
+ -o-border-top-right-radius: 50%;
+ -ms-border-top-right-radius: 50%;
border-top-right-radius: 50%;
-moz-border-radius-bottomleft: 50%;
-webkit-border-bottom-left-radius: 50%;
+ -o-border-bottom-left-radius: 50%;
+ -ms-border-bottom-left-radius: 50%;
border-bottom-left-radius: 50%;
-moz-border-radius-bottomright: 50%;
-webkit-border-bottom-right-radius: 50%;
+ -o-border-bottom-right-radius: 50%;
+ -ms-border-bottom-right-radius: 50%;
border-bottom-right-radius: 50%;
float: left;
margin: 2px 6px 0 0;
@@ -226,9 +244,13 @@ table {
text-decoration: none;
-moz-border-radius: 5px 0 0 5px;
-webkit-border-radius: 5px 0 0 5px;
+ -o-border-radius: 5px 0 0 5px;
+ -ms-border-radius: 5px 0 0 5px;
border-radius: 5px 0 0 5px;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling.launch b/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch
similarity index 74%
rename from java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling.launch
rename to java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch
index 1b84b74772a..0b8d83049f1 100755
--- a/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling.launch
+++ b/java/com.sap.sailing.gwt.ui/SailingGWT Remote Profiling (Run-Mode only).launch
@@ -4,7 +4,8 @@
-
+
+
@@ -18,7 +19,7 @@
-
+
@@ -40,13 +41,20 @@
+
+
+
+
+
+
+
-
+
-
+
diff --git a/java/com.sap.sailing.gwt.ui/Simulator.css b/java/com.sap.sailing.gwt.ui/Simulator.css
index 35389cf3dd5..71f9f9baee2 100644
--- a/java/com.sap.sailing.gwt.ui/Simulator.css
+++ b/java/com.sap.sailing.gwt.ui/Simulator.css
@@ -1,385 +1,392 @@
-@import url(fontface.css);
-//@import url(CommonControls.css);
-
-/** Add css rules here for your application. */
-/*
- body #calendar:after
- content: " ";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-*/
-.clear {
- clear: both;
- font-size: 1px;
- height: 0px;
- line-height: 0px;
- margin: -1px 0 0;
- width: 100%;
-}
-
-.cover {
- left: -1000px;
- overflow: hidden;
- position: absolute;
- top: -1000px;
-}
-
-.titleLabelWrapper {
- position: relative;
- margin-left: auto;
- margin-right: auto;
- width: 50%;
-}
-
-.titleLabel {
- text-align: center;
- font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif;
- font-size: 18px;
- color: #fff;
- margin: 23px 0 0 0;
-}
-
-body {
- background: #ebebeb;
- font-family: 'OpenSansRegular', Arial, Verdana, sans-serif;
- line-height: 1;
- font-size: 14px;
- font-weight: 400;
- padding: 80px 0 160px 0;
- margin: 0;
- color: #7c7c7c;
-}
-
-table td,select,button {
- font-family: 'OpenSansLight', Arial, Verdana, sans-serif;
- line-height: 1;
- font-size: 14px;
-}
-
-.contentOuterPanel {
- background: #dddcdc;
- margin: 0 12px 0 12px;
- padding: 12px;
-}
-
-/** Example rules used by the template application (remove for your app) */
-h1 {
- font-size: 2em;
- font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif;
- color: #777777;
- margin: 40px 0px 70px;
- text-align: center;
-}
-
-table {
- border-collapse: separate;
-}
-
-/*.RaceBoardHeaderPanel {
- margin: 0 12px 14px 12px;
-}*/
-.sapLogo {
- float: left;
- margin: 13px 0 0 12px;
-}
-
-.pioLogo {
- float: right;
- margin: 11px 20px 0 12px;
-}
-
-.sailingAnalyticsLabelPanel {
- margin: 10px 0 0 0;
-}
-
-.sailingAnalyticsLabel {
- float: left;
- color: #fff;
- font-size: 14px;
- font-weight: bold;
- margin: 15px 0 0 0;
-}
-
-.timePanelSettings {
- display: none;
-}
-
-/*.leaderboardLabel {
- border-bottom: 2px solid #007dc0;
- padding: 0 0 6px 0;
- font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif;
-}*/
-.refreshAndSettings {
- background: #f2f2f2;
- border-bottom: 2px solid #fff;
- border-top: 2px solid #fff;
- height: 30px;
-}
-
-.refreshAndSettings table td {
- padding: 0 10px 0 0;
-}
-
-.refreshAndSettings table table td {
- padding: 0 0 0 0;
-}
-
-.race-name {
- line-height: 1.0;
-}
-
-input.magnifier {
- display: block;
- margin: 3px auto 0 auto !important;
-}
-
-.breadcrumbPanel {
- height: 30px;
- margin: 0 12px 13px 12px;
-}
-
-.mainPanel {
- width: 100%;
-}
-
-/*.raceBoardNavigation {
- float: right;
- margin: 26px 0 0 0;
- font-family: 'OpenSansLight', Arial, Verdana, sans-serif;
-}
-
-.raceBoardNavigation-navigationitem {
- color: #dddcdc;
- text-transform: uppercase;
- font-weight: 500;
- margin: 0 12px 0 0;
- padding: 0 0 5px 0;
-}
-
-.raceBoardNavigation-navigationitem:hover {
- border-bottom: 4px solid #f0ab00;
- color: #dddcdc;
- text-decoration: none;
-}
-
-.raceBoardNavigation-navigationitem:active {
- border-bottom: 4px solid #f0ab00;
- color: #dddcdc;
- text-decoration: none;
-}*/
-.abstractChartPanel-importantMessageOfChart {
- font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif;
- font-size: 20px;
- height: 70px;
- margin: 0 auto;
- padding: 49px 0 0 80px;
- width: 300px;
- color: #7c7c7c;
- background: url(images/important-message.png) left center no-repeat;
-}
-
-/*.breadcrumbPanel-NextArrow {
- display: none;
-}*/
-.replayPanel {
- position: relative;
- z-index: 10;
-}
-
-.innerHeadline {
- font-family: OpenSansSemiBold, Arial, Verdana, sans-serif;
- font-size: 16px;
- color: #7c7c7c;
- margin: 15px 0
-}
-
-.sectorHeadline {
- font-family: OpenSansLight, Arial, Verdana, sans-serif;
- font-size: 16px;
-}
-
-.controlPanelInnerWrapper {
- margin: 0 10px;
-}
-
-.windPanel {
- width: 100%;
-}
-
-.choosePattern {
- width: 100%;
- margin: 0 0 15px 0;
-}
-
-.choosePattern td:last-child {
- text-align: right;
-}
-
-.optionsPanel {
- background: url(images/simulator/panel_bg.png) 0 0 repeat-x;
- border-bottom: 4px solid #7c7b7c;
- padding: 0 10px;
-}
-
-.mapOptions {
- background: url(images/simulator/panel_bg.png) 0 0 repeat-x;
- border-bottom: 4px solid #7c7b7c;
- padding: 0 10px;
-}
-
-.timePanelButton {
- float: left;
- margin: 0 0 0 5px;
-}
-
-.playPauseButton {
- padding: 0;
- width: 28px;
- height: 24px;
- background: url(images/timeslider-play-active-icon.png) 0 0 no-repeat;
- cursor: pointer;
-}
-
-.playPauseButton:hover{
- background: url(images/playbutton-hover.png) 0 0 no-repeat !important;
- cursor: pointer;
-}
-
-.playPauseButtonPause {
- background: url(images/timeslider-pause-icon.png) 0 0 no-repeat;
-}
-
-.playPauseButtonPause:hover {
- background: url(images/playbuttonPause-hover.png) 0 0 no-repeat !important;
- cursor: pointer;
-}
-
-
-.backToLivePlayButton {
- float: left;
- padding: 3px 10px 4px;
-}
-
-
-.sliderWrapper {
- float: left;
- width: 100%;
- margin: 0 0 7px 0;
-}
-
-.sliderLabel {
- width: 200px;
- padding: 12px 0 14px 12px;
-}
-
-/* styles for the masterPanel */
-#masterPanelLeft .gwt-SliderBar-shell {
- background: url(images/simulator/slider_bg.png) 0 0 repeat-x;
- border-radius: 3px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border: 1px solid #ccc;
- height: 36px;
-}
-
-#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-line {
- border: 1px solid #919191;
- background-color: #818181;
- height: 4px;
- width: 90%;
- top: 23px;
- overflow: hidden;
-}
-
-#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-line-disabled {
- border: 1px solid gray;
-}
-
-/*#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-knob {
- top: 14px;
- width: 11px;
- height: 21px;
- z-index: 1;
- cursor: pointer;
-}*/
-
-#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-tick {
- top: 18px;
- width: 1px;
- height: 6pt;
- background: #919191;
- overflow: hidden;
-}
-
-#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-mark {
- top: 21pt;
- width: 6px;
- height: 6pt;
- background: #f0ab00;
- overflow: hidden;
- border-left: 4px solid #fff;
- border-right: 4px solid #fff;
-}
-
-#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-tick-disabled {
- background: gray;
-}
-
-#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-ticklabel {
- font-size: 12px;
- cursor: default;
- font-family: 'OpenSansSemiBold',Arial,Verdana,sans-serif;
- top: 5px;
-}
-
-#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-markerlabel {
- top: 30pt;
- font-size: 12px;
- color: #bc9434;
- cursor: default;
- font-family: 'OpenSansSemiBold',Arial,Verdana,sans-serif;
-}
-
-#masterPanelLeft .gwt-SliderBar-shell-focused {
-
-}
-
-#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-line-sliding {
- cursor: pointer;
-}
-
-.boatClassLabel {
- width: 235px;
- margin: 0 0 15px 0;
-}
-
-.sailingPanel {
- width: 100%;
-}
-
-.dockLayoutPanel div[style="position: absolute; overflow: hidden; left: 0px; right: 0px; bottom: 0px; height: 90px;"] {
- box-shadow: 0 0 8px #424242;
- z-index: 10;
-}
-
-.MapDisplayOptions {
- margin: 0 15px 0 0;
-}
-
-.MapDisplayOptions label,.gwt-RadioButton label {
- margin: 0 0 0 5px;
-}
-.MapDisplayOptions {
- margin: 0 0 0 5px;
-}
-
-.timeSliderWrapperPanel{
- -webkit-box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.15); /* WebKit */
- -moz-box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.15); /* Firefox */
- box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.15); /* Standard */
-}
-.polarDiv
-{background-color: white;width:100%;height:100px;border-radius: 5px; -moz-border-radius: 5px;
+@import url(fontface.css);
+//@import url(CommonControls.css);
+
+/** Add css rules here for your application. */
+/*
+ body #calendar:after
+ content: " ";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+*/
+.clear {
+ clear: both;
+ font-size: 1px;
+ height: 0px;
+ line-height: 0px;
+ margin: -1px 0 0;
+ width: 100%;
+}
+
+.cover {
+ left: -1000px;
+ overflow: hidden;
+ position: absolute;
+ top: -1000px;
+}
+
+.titleLabelWrapper {
+ position: relative;
+ margin-left: auto;
+ margin-right: auto;
+ width: 50%;
+}
+
+.titleLabel {
+ text-align: center;
+ font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif;
+ font-size: 18px;
+ color: #fff;
+ margin: 23px 0 0 0;
+}
+
+body {
+ background: #ebebeb;
+ font-family: 'OpenSansRegular', Arial, Verdana, sans-serif;
+ line-height: 1;
+ font-size: 14px;
+ font-weight: 400;
+ padding: 80px 0 160px 0;
+ margin: 0;
+ color: #7c7c7c;
+}
+
+table td,select,button {
+ font-family: 'OpenSansLight', Arial, Verdana, sans-serif;
+ line-height: 1;
+ font-size: 14px;
+}
+
+.contentOuterPanel {
+ background: #dddcdc;
+ margin: 0 12px 0 12px;
+ padding: 12px;
+}
+
+/** Example rules used by the template application (remove for your app) */
+h1 {
+ font-size: 2em;
+ font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif;
+ color: #777777;
+ margin: 40px 0px 70px;
+ text-align: center;
+}
+
+table {
+ border-collapse: separate;
+}
+
+/*.RaceBoardHeaderPanel {
+ margin: 0 12px 14px 12px;
+}*/
+.sapLogo {
+ float: left;
+ margin: 13px 0 0 12px;
+}
+
+.pioLogo {
+ float: right;
+ margin: 11px 20px 0 12px;
+}
+
+.sailingAnalyticsLabelPanel {
+ margin: 10px 0 0 0;
+}
+
+.sailingAnalyticsLabel {
+ float: left;
+ color: #fff;
+ font-size: 14px;
+ font-weight: bold;
+ margin: 15px 0 0 0;
+}
+
+.timePanelSettings {
+ display: none;
+}
+
+/*.leaderboardLabel {
+ border-bottom: 2px solid #007dc0;
+ padding: 0 0 6px 0;
+ font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif;
+}*/
+.refreshAndSettings {
+ background: #f2f2f2;
+ border-bottom: 2px solid #fff;
+ border-top: 2px solid #fff;
+ height: 30px;
+}
+
+.refreshAndSettings table td {
+ padding: 0 10px 0 0;
+}
+
+.refreshAndSettings table table td {
+ padding: 0 0 0 0;
+}
+
+.race-name {
+ line-height: 1.0;
+}
+
+input.magnifier {
+ display: block;
+ margin: 3px auto 0 auto !important;
+}
+
+.breadcrumbPanel {
+ height: 30px;
+ margin: 0 12px 13px 12px;
+}
+
+.mainPanel {
+ width: 100%;
+}
+
+/*.raceBoardNavigation {
+ float: right;
+ margin: 26px 0 0 0;
+ font-family: 'OpenSansLight', Arial, Verdana, sans-serif;
+}
+
+.raceBoardNavigation-navigationitem {
+ color: #dddcdc;
+ text-transform: uppercase;
+ font-weight: 500;
+ margin: 0 12px 0 0;
+ padding: 0 0 5px 0;
+}
+
+.raceBoardNavigation-navigationitem:hover {
+ border-bottom: 4px solid #f0ab00;
+ color: #dddcdc;
+ text-decoration: none;
+}
+
+.raceBoardNavigation-navigationitem:active {
+ border-bottom: 4px solid #f0ab00;
+ color: #dddcdc;
+ text-decoration: none;
+}*/
+.abstractChartPanel-importantMessageOfChart {
+ font-family: 'OpenSansSemiBold', Arial, Verdana, sans-serif;
+ font-size: 20px;
+ height: 70px;
+ margin: 0 auto;
+ padding: 49px 0 0 80px;
+ width: 300px;
+ color: #7c7c7c;
+ background: url(images/important-message.png) left center no-repeat;
+}
+
+/*.breadcrumbPanel-NextArrow {
+ display: none;
+}*/
+.replayPanel {
+ position: relative;
+ z-index: 10;
+}
+
+.innerHeadline {
+ font-family: OpenSansSemiBold, Arial, Verdana, sans-serif;
+ font-size: 16px;
+ color: #7c7c7c;
+ margin: 15px 0
+}
+
+.sectorHeadline {
+ font-family: OpenSansLight, Arial, Verdana, sans-serif;
+ font-size: 16px;
+}
+
+.controlPanelInnerWrapper {
+ margin: 0 10px;
+}
+
+.windPanel {
+ width: 100%;
+}
+
+.choosePattern {
+ width: 100%;
+ margin: 0 0 15px 0;
+}
+
+.choosePattern td:last-child {
+ text-align: right;
+}
+
+.optionsPanel {
+ background: url(images/simulator/panel_bg.png) 0 0 repeat-x;
+ border-bottom: 4px solid #7c7b7c;
+ padding: 0 10px;
+}
+
+.mapOptions {
+ background: url(images/simulator/panel_bg.png) 0 0 repeat-x;
+ border-bottom: 4px solid #7c7b7c;
+ padding: 0 10px;
+}
+
+.timePanelButton {
+ float: left;
+ margin: 0 0 0 5px;
+}
+
+.playPauseButton {
+ padding: 0;
+ width: 28px;
+ height: 24px;
+ background: url(images/timeslider-play-active-icon.png) 0 0 no-repeat;
+ cursor: pointer;
+}
+
+.playPauseButton:hover{
+ background: url(images/playbutton-hover.png) 0 0 no-repeat !important;
+ cursor: pointer;
+}
+
+.playPauseButtonPause {
+ background: url(images/timeslider-pause-icon.png) 0 0 no-repeat;
+}
+
+.playPauseButtonPause:hover {
+ background: url(images/playbuttonPause-hover.png) 0 0 no-repeat !important;
+ cursor: pointer;
+}
+
+
+.backToLivePlayButton {
+ float: left;
+ padding: 3px 10px 4px;
+}
+
+
+.sliderWrapper {
+ float: left;
+ width: 100%;
+ margin: 0 0 7px 0;
+}
+
+.sliderLabel {
+ width: 200px;
+ padding: 12px 0 14px 12px;
+}
+
+/* styles for the masterPanel */
+#masterPanelLeft .gwt-SliderBar-shell {
+ background: url(images/simulator/slider_bg.png) 0 0 repeat-x;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -o-border-radius: 3px;
+ -ms-border-radius: 3px;
+ border: 1px solid #ccc;
+ height: 36px;
+}
+
+#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-line {
+ border: 1px solid #919191;
+ background-color: #818181;
+ height: 4px;
+ width: 90%;
+ top: 23px;
+ overflow: hidden;
+}
+
+#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-line-disabled {
+ border: 1px solid gray;
+}
+
+/*#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-knob {
+ top: 14px;
+ width: 11px;
+ height: 21px;
+ z-index: 1;
+ cursor: pointer;
+}*/
+
+#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-tick {
+ top: 18px;
+ width: 1px;
+ height: 6pt;
+ background: #919191;
+ overflow: hidden;
+}
+
+#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-mark {
+ top: 21pt;
+ width: 6px;
+ height: 6pt;
+ background: #f0ab00;
+ overflow: hidden;
+ border-left: 4px solid #fff;
+ border-right: 4px solid #fff;
+}
+
+#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-tick-disabled {
+ background: gray;
+}
+
+#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-ticklabel {
+ font-size: 12px;
+ cursor: default;
+ font-family: 'OpenSansSemiBold',Arial,Verdana,sans-serif;
+ top: 5px;
+}
+
+#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-markerlabel {
+ top: 30pt;
+ font-size: 12px;
+ color: #bc9434;
+ cursor: default;
+ font-family: 'OpenSansSemiBold',Arial,Verdana,sans-serif;
+}
+
+#masterPanelLeft .gwt-SliderBar-shell-focused {
+
+}
+
+#masterPanelLeft .gwt-SliderBar-shell .gwt-SliderBar-line-sliding {
+ cursor: pointer;
+}
+
+.boatClassLabel {
+ width: 235px;
+ margin: 0 0 15px 0;
+}
+
+.sailingPanel {
+ width: 100%;
+}
+
+.dockLayoutPanel div[style="position: absolute; overflow: hidden; left: 0px; right: 0px; bottom: 0px; height: 90px;"] {
+ box-shadow: 0 0 8px #424242;
+ z-index: 10;
+}
+
+.MapDisplayOptions {
+ margin: 0 15px 0 0;
+}
+
+.MapDisplayOptions label,.gwt-RadioButton label {
+ margin: 0 0 0 5px;
+}
+.MapDisplayOptions {
+ margin: 0 0 0 5px;
+}
+
+.timeSliderWrapperPanel{
+ -webkit-box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.15); /* WebKit */
+ -moz-box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.15); /* Firefox */
+ -o-box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.15); /* Firefox */
+ -ms-box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.15); /* Firefox */
+ box-shadow: inset 0px 5px 10px 0px rgba(0, 0, 0, 0.15); /* Standard */
+}
+.polarDiv
+{background-color: white;width:100%;height:100px;border-radius: 5px; -moz-border-radius: 5px;
-webkit-border-radius: 5px; border: 1px solid #177980;}
+ -moz-border-radius: 5px; border: 1px solid #177980;}
+ -o-border-radius: 5px; border: 1px solid #177980;}
+ -ms-border-radius: 5px; border: 1px solid #177980;}
diff --git a/java/com.sap.sailing.gwt.ui/Simulator.html b/java/com.sap.sailing.gwt.ui/Simulator.html
index a90d4a20796..5e66810b126 100644
--- a/java/com.sap.sailing.gwt.ui/Simulator.html
+++ b/java/com.sap.sailing.gwt.ui/Simulator.html
@@ -14,7 +14,7 @@
-
+
diff --git a/java/com.sap.sailing.gwt.ui/Spectator.css b/java/com.sap.sailing.gwt.ui/Spectator.css
index c45f733f108..1afd3de0213 100644
--- a/java/com.sap.sailing.gwt.ui/Spectator.css
+++ b/java/com.sap.sailing.gwt.ui/Spectator.css
@@ -80,6 +80,8 @@ table {
box-shadow: 0 0 20px #858585;
-moz-box-shadow: 0 0 20px #858585;
-webkit-box-shadow: 0 0 20px #858585;
+ -o-box-shadow: 0 0 20px #858585;
+ -ms-box-shadow: 0 0 20px #858585;
}
.LogoAndTitlePanel:after {
@@ -210,6 +212,8 @@ input.magnifier {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
+ -o-border-radius: 4px;
+ -ms-border-radius: 4px;
}
.leaderboardGroupPanel-ActiveRace, .leaderboardGroupPanel-InactiveRace, .leaderboardGroupPanel-LegendTracked {
@@ -220,6 +224,8 @@ input.magnifier {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
+ -o-border-radius: 4px;
+ -ms-border-radius: 4px;
background: url("images/btn-cta-blueleft.png") repeat-x -10px 0 #e7e7e7;
text-decoration: none;
color: #fff;
@@ -235,6 +241,8 @@ input.magnifier {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
+ -o-border-radius: 4px;
+ -ms-border-radius: 4px;
background: url("images/btn-cta-greenleft.png") repeat-x -10px 0 #e7e7e7;
text-decoration: none;
color: #fff;
@@ -250,6 +258,8 @@ input.magnifier {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
+ -o-border-radius: 4px;
+ -ms-border-radius: 4px;
background: url("images/btn-cta-orangeleft.png") repeat-x -10px 0 #e7e7e7;
text-decoration: none;
color: #fff;
@@ -262,6 +272,8 @@ input.magnifier {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
+ -o-border-radius: 4px;
+ -ms-border-radius: 4px;
background: url("images/btn-cta-blueleft.png") repeat-x 0px 0 #e7e7e7;
text-decoration: none;
color: #fff;
diff --git a/java/com.sap.sailing.gwt.ui/ViewerToolbar.css b/java/com.sap.sailing.gwt.ui/ViewerToolbar.css
index dcea3a8a731..3fd42f875f5 100644
--- a/java/com.sap.sailing.gwt.ui/ViewerToolbar.css
+++ b/java/com.sap.sailing.gwt.ui/ViewerToolbar.css
@@ -41,6 +41,9 @@
height: 23px;
margin: 0 12px 0 1px;
-webkit-border-radius: 0px 3px 3px 0px;
+ -moz-border-radius: 0px 3px 3px 0px;
+ -o-border-radius: 0px 3px 3px 0px;
+ -ms-border-radius: 0px 3px 3px 0px;
border-radius: 0px 3px 3px 0px;
}
@@ -78,9 +81,13 @@
text-decoration: none;
-moz-border-radius: 5px 0 0 5px;
-webkit-border-radius: 5px 0 0 5px;
+ -o-border-radius: 5px 0 0 5px;
+ -ms-border-radius: 5px 0 0 5px;
border-radius: 5px 0 0 5px;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
@@ -113,12 +120,16 @@
text-decoration: none;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
+ -ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
border-radius: 5px 5px 5px 5px;
-moz-border-radius: 5px 0 0 5px;
-webkit-border-radius: 5px 5px 5px 5px;
+ -o-border-radius: 5px 5px 5px 5px;
+ -ms-border-radius: 5px 5px 5px 5px;
}
.viewerToolbar-standaloneElement:active {
diff --git a/java/com.sap.sailing.gwt.ui/build.properties b/java/com.sap.sailing.gwt.ui/build.properties
index 3e0c785617a..6e4fd18d28b 100755
--- a/java/com.sap.sailing.gwt.ui/build.properties
+++ b/java/com.sap.sailing.gwt.ui/build.properties
@@ -7,6 +7,7 @@ bin.includes = META-INF/,\
AdminConsole.css,\
AdminConsole.html,\
Leaderboard.css,\
+ LeaderboardNewHome.css,\
Leaderboard.html,\
LeaderboardEditing.html,\
UserManagement.html,\
@@ -46,7 +47,6 @@ bin.includes = META-INF/,\
PolarSheets.css,\
PolarSheets.html,\
ViewerToolbar.css,\
- CommonGwtControls.css,\
com.sap.sailing.gwt.ui.DataMining/,\
DataMining.css,\
DataMining.html,\
diff --git a/java/com.sap.sailing.gwt.ui/images/SAP_RV_Settings.png b/java/com.sap.sailing.gwt.ui/images/SAP_RV_Settings.png
new file mode 100644
index 00000000000..fbe4d7d99d8
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/SAP_RV_Settings.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/SAP_RV_SettingsBlack.png b/java/com.sap.sailing.gwt.ui/images/SAP_RV_SettingsBlack.png
new file mode 100644
index 00000000000..9b63ce60c98
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/SAP_RV_SettingsBlack.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/arrows_bottom_black.png b/java/com.sap.sailing.gwt.ui/images/arrows_bottom_black.png
new file mode 100644
index 00000000000..824b928db71
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/arrows_bottom_black.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/arrows_bottom_black_small.png b/java/com.sap.sailing.gwt.ui/images/arrows_bottom_black_small.png
new file mode 100644
index 00000000000..5d06cf1589f
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/arrows_bottom_black_small.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/arrows_right_black.png b/java/com.sap.sailing.gwt.ui/images/arrows_right_black.png
new file mode 100644
index 00000000000..274a9f0c8d1
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/arrows_right_black.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/arrows_top_black.png b/java/com.sap.sailing.gwt.ui/images/arrows_top_black.png
new file mode 100644
index 00000000000..02d02e1cde6
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/arrows_top_black.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/arrows_top_black_small.png b/java/com.sap.sailing.gwt.ui/images/arrows_top_black_small.png
new file mode 100644
index 00000000000..4eddabb57b9
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/arrows_top_black_small.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/close_black.png b/java/com.sap.sailing.gwt.ui/images/close_black.png
new file mode 100644
index 00000000000..188969f926f
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/close_black.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/home.png b/java/com.sap.sailing.gwt.ui/images/home.png
new file mode 100644
index 00000000000..5b13eae6506
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/home.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/home/busy_indicator.gif b/java/com.sap.sailing.gwt.ui/images/home/busy_indicator.gif
new file mode 100644
index 00000000000..ed72b117dd9
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/home/busy_indicator.gif differ
diff --git a/java/com.sap.sailing.gwt.ui/images/home/location-icon.png b/java/com.sap.sailing.gwt.ui/images/home/location-icon.png
new file mode 100644
index 00000000000..737b6e4e2d0
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/home/location-icon.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/home/reload.png b/java/com.sap.sailing.gwt.ui/images/home/reload.png
new file mode 100644
index 00000000000..a333086fa24
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/home/reload.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/home/settings.png b/java/com.sap.sailing.gwt.ui/images/home/settings.png
new file mode 100644
index 00000000000..1f16ed08149
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/home/settings.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/home/social-icons.png b/java/com.sap.sailing.gwt.ui/images/home/social-icons.png
new file mode 100644
index 00000000000..f9566384566
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/home/social-icons.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/sap_logo_header.png b/java/com.sap.sailing.gwt.ui/images/sap_logo_header.png
new file mode 100644
index 00000000000..e5d2daf91f3
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/sap_logo_header.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/settings_black.png b/java/com.sap.sailing.gwt.ui/images/settings_black.png
new file mode 100644
index 00000000000..a1969e23b01
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/settings_black.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/SAP_RV_TweekSprite_a00.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/SAP_RV_TweekSprite_a00.png
new file mode 100755
index 00000000000..8ffc474113f
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/SAP_RV_TweekSprite_a00.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_ACTIVE.png
new file mode 100755
index 00000000000..73f224bde91
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_GHOSTED.png
new file mode 100755
index 00000000000..cdaa4261f8d
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png
new file mode 100755
index 00000000000..e123081fc31
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_AudioVideo_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Checkbox_CHECKED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Checkbox_CHECKED.png
new file mode 100755
index 00000000000..fb678245b17
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Checkbox_CHECKED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Checkbox_UNCHECKED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Checkbox_UNCHECKED.png
new file mode 100755
index 00000000000..66dbf06d92c
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Checkbox_UNCHECKED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Clear.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Clear.png
new file mode 100755
index 00000000000..c9a92b7a63a
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Clear.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_ACTIVE.png
new file mode 100755
index 00000000000..8a38e267534
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png
new file mode 100755
index 00000000000..188192c8e81
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png
new file mode 100755
index 00000000000..c58f87ba96d
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorCharts_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_ACTIVE.png
new file mode 100755
index 00000000000..0d3d9c1ca44
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_GHOSTED.png
new file mode 100755
index 00000000000..194c13de49a
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_INACTIVE.png
new file mode 100755
index 00000000000..a689e2101bc
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_CompetitorsFilter_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_ACTIVE.png
new file mode 100755
index 00000000000..fb0fc5e8d68
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_GHOSTED.png
new file mode 100755
index 00000000000..73bd5698fa8
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_INACTIVE.png
new file mode 100755
index 00000000000..a933b3dc3c4
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Leaderboard_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_ACTIVE.png
new file mode 100755
index 00000000000..eaf9e9ccfe2
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_GHOSTED.png
new file mode 100755
index 00000000000..954a80eb32a
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_INACTIVE.png
new file mode 100755
index 00000000000..6795ac0f02e
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_LivePlay_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_ACTIVE.png
new file mode 100755
index 00000000000..12811f5881c
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_GHOSTED.png
new file mode 100755
index 00000000000..f8a0fd719fd
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_INACTIVE.png
new file mode 100755
index 00000000000..d35eb30aa6b
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Map_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_PlaySpeed.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_PlaySpeed.png
new file mode 100755
index 00000000000..128d31c2151
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_PlaySpeed.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_ACTIVE.png
new file mode 100755
index 00000000000..e4edff8cbde
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_GHOSTED.png
new file mode 100755
index 00000000000..2c1285bc534
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_INACTIVE.png
new file mode 100755
index 00000000000..2144eacf6c8
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Play_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Search.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Search.png
new file mode 100755
index 00000000000..22698de84ad
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Search.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Settings.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Settings.png
new file mode 100755
index 00000000000..fbe4d7d99d8
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Settings.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_TweekSprite_a00_29.jpg b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_TweekSprite_a00_29.jpg
new file mode 100755
index 00000000000..46323c6c6c3
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_TweekSprite_a00_29.jpg differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_TweekSprite_a00_32.jpg b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_TweekSprite_a00_32.jpg
new file mode 100755
index 00000000000..3d258927a58
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_TweekSprite_a00_32.jpg differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_ACTIVE.png
new file mode 100755
index 00000000000..110f48efada
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_GHOSTED.png
new file mode 100755
index 00000000000..9d326fb2e37
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_INACTIVE.png
new file mode 100755
index 00000000000..746b9b37f3f
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@1x/img/SAP_RV_Wind_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/SAP_RV_TweekSprite_a00.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/SAP_RV_TweekSprite_a00.png
new file mode 100755
index 00000000000..9f2f9ff5ab2
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/SAP_RV_TweekSprite_a00.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_ACTIVE.png
new file mode 100755
index 00000000000..44d1bbb626d
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_GHOSTED.png
new file mode 100755
index 00000000000..c924f99480d
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_INACTIVE.png
new file mode 100755
index 00000000000..e7c4026d648
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_AudioVideo_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Checkbox_CHECKED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Checkbox_CHECKED.png
new file mode 100755
index 00000000000..65b76a26fd3
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Checkbox_CHECKED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Checkbox_UNCHECKED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Checkbox_UNCHECKED.png
new file mode 100755
index 00000000000..de9eedc724e
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Checkbox_UNCHECKED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Clear.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Clear.png
new file mode 100755
index 00000000000..2108ec5b9a1
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Clear.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_ACTIVE.png
new file mode 100755
index 00000000000..38890afa4cc
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_GHOSTED.png
new file mode 100755
index 00000000000..68d21fcc689
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_INACTIVE.png
new file mode 100755
index 00000000000..37412eabfc9
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorCharts_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_ACTIVE.png
new file mode 100755
index 00000000000..7a015ebfca0
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_GHOSTED.png
new file mode 100755
index 00000000000..561a34f9c0c
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_INACTIVE.png
new file mode 100755
index 00000000000..0a050a30305
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_CompetitorsFilter_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_ACTIVE.png
new file mode 100755
index 00000000000..1e24f619098
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_GHOSTED.png
new file mode 100755
index 00000000000..d8d0d7fc441
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_INACTIVE.png
new file mode 100755
index 00000000000..ff1f70ee98c
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Leaderboard_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_ACTIVE.png
new file mode 100755
index 00000000000..2202da0998f
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_GHOSTED.png
new file mode 100755
index 00000000000..be3e1ffc961
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_INACTIVE.png
new file mode 100755
index 00000000000..4b305220449
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_LivePlay_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_ACTIVE.png
new file mode 100755
index 00000000000..49b2f6a7b91
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_GHOSTED.png
new file mode 100755
index 00000000000..449e081eb2a
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_INACTIVE.png
new file mode 100755
index 00000000000..a736707b684
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Map_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Pause_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Pause_INACTIVE.png
new file mode 100644
index 00000000000..f38f74c7ad1
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Pause_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_PlaySpeed.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_PlaySpeed.png
new file mode 100755
index 00000000000..bc5b691963c
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_PlaySpeed.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_ACTIVE.png
new file mode 100755
index 00000000000..8ca76b0b44d
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_GHOSTED.png
new file mode 100755
index 00000000000..e4f8256df5d
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_INACTIVE.png
new file mode 100755
index 00000000000..09d9f3da798
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Play_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Search.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Search.png
new file mode 100755
index 00000000000..c294f7f2ead
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Search.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Settings.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Settings.png
new file mode 100755
index 00000000000..3b35b62d820
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Settings.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_TweekSprite_a00_29.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_TweekSprite_a00_29.png
new file mode 100755
index 00000000000..92ceb496a7e
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_TweekSprite_a00_29.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_TweekSprite_a00_32.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_TweekSprite_a00_32.png
new file mode 100755
index 00000000000..e230cfb16db
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_TweekSprite_a00_32.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_ACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_ACTIVE.png
new file mode 100755
index 00000000000..32816de58b5
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_ACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_GHOSTED.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_GHOSTED.png
new file mode 100755
index 00000000000..8e61221881f
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_GHOSTED.png differ
diff --git a/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_INACTIVE.png b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_INACTIVE.png
new file mode 100755
index 00000000000..ddc63c21bd7
Binary files /dev/null and b/java/com.sap.sailing.gwt.ui/images/viewicons/@2x/img/SAP_RV_Wind_INACTIVE.png differ
diff --git a/java/com.sap.sailing.gwt.ui/pom.xml b/java/com.sap.sailing.gwt.ui/pom.xml
index 33ae1e4bfce..c9c3330cc12 100644
--- a/java/com.sap.sailing.gwt.ui/pom.xml
+++ b/java/com.sap.sailing.gwt.ui/pom.xml
@@ -84,7 +84,7 @@
- -Dgwt.persistentunitcache=false
+ -Dgwt.persistentunitcache=false -Xmx4096m
@@ -109,8 +109,10 @@
3
${basedir}
${basedir}/src/main/resources
-
+
compile
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/BoatClassImageResolver.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/BoatClassImageResolver.java
new file mode 100644
index 00000000000..a8f1fd84cc1
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/BoatClassImageResolver.java
@@ -0,0 +1,71 @@
+package com.sap.sailing.gwt.home.client;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.google.gwt.resources.client.ImageResource;
+import com.sap.sailing.domain.common.BoatClassMasterdata;
+
+public class BoatClassImageResolver {
+ private static Map boatClassIconsMap;
+ private static BoatClassImageResources imageResources = BoatClassImageResources.INSTANCE;
+
+ static {
+ boatClassIconsMap = new HashMap();
+
+ boatClassIconsMap.put(BoatClassMasterdata._12M.getDisplayName(), imageResources._12mRIcon());
+ boatClassIconsMap.put(BoatClassMasterdata._2_4M.getDisplayName(), imageResources._2_4mIcon());
+ boatClassIconsMap.put(BoatClassMasterdata._29ER.getDisplayName(), imageResources._29erIcon());
+ boatClassIconsMap.put(BoatClassMasterdata._29ERXX.getDisplayName(), imageResources._29erIcon());
+ boatClassIconsMap.put(BoatClassMasterdata._420.getDisplayName(), imageResources._420Icon());
+ boatClassIconsMap.put(BoatClassMasterdata._470.getDisplayName(), imageResources._470Icon());
+ boatClassIconsMap.put(BoatClassMasterdata._49ERFX.getDisplayName(), imageResources._49erFXIcon());
+ boatClassIconsMap.put(BoatClassMasterdata._49ER.getDisplayName(), imageResources._49erIcon());
+ boatClassIconsMap.put(BoatClassMasterdata._5O5.getDisplayName(), imageResources._505mIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.A_CAT.getDisplayName(), imageResources.A_CatIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.ALBIN_EXPRESS.getDisplayName(), imageResources.AlbinExpressIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.B_ONE.getDisplayName(), imageResources.BOne());
+ boatClassIconsMap.put(BoatClassMasterdata.CONTENDER.getDisplayName(), imageResources.ContenderIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.DRAGON_INT.getDisplayName(), imageResources.DragonIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.EUROPE_INT.getDisplayName(), imageResources.EuropeIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.EXTREME_40.getDisplayName(), imageResources.Extreme40Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.F_16.getDisplayName(), imageResources.F16Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.F_18.getDisplayName(), imageResources.F18Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.FARR_30.getDisplayName(), imageResources.Farr30Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.FINN.getDisplayName(), imageResources.FinnIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.FLYING_DUTCHMAN.getDisplayName(), imageResources.FlyingDutchmanIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.FOLKBOAT.getDisplayName(), imageResources.FolkBoatIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.H_BOAT.getDisplayName(), imageResources.H_BoatIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.HOBIE_16.getDisplayName(), imageResources.HobieIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.HOBIE_TIGER.getDisplayName(), imageResources.HobieIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.HOBIE_WILD_CAT.getDisplayName(), imageResources.HobieIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.J24.getDisplayName(), imageResources.J24Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.J70.getDisplayName(), imageResources.J70Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.J80.getDisplayName(), imageResources.J80Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.LASER_SB3.getDisplayName(), imageResources.LaserSB3Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.LASER_INT.getDisplayName(), imageResources.LaserIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.LASER_4_7.getDisplayName(), imageResources.LaserIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.LASER_RADIAL.getDisplayName(), imageResources.LaserIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.MELGES_24.getDisplayName(), imageResources.Melges24Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.MINI_TRANSAT.getDisplayName(), imageResources.MiniTransatIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.MUSTO_SKIFF.getDisplayName(), imageResources.MustoSkiffIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.NACRA_17.getDisplayName(), imageResources.Nacra17Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.OK.getDisplayName(), imageResources.OKIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.OPTIMIST.getDisplayName(), imageResources.OptimistIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.PLATU_25.getDisplayName(), imageResources.Platu25Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.RS_X.getDisplayName(), imageResources.RSXIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.SONAR.getDisplayName(), imageResources.SonarIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.STAR.getDisplayName(), imageResources.StarIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.STREAMLINE.getDisplayName(), imageResources.StreamlineIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.SWAN_45.getDisplayName(), imageResources.Swan45Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.TORNADO.getDisplayName(), imageResources.TornadoIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.X_99.getDisplayName(), imageResources.X99Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.INTERNATIONAL_14.getDisplayName(), imageResources.International14Icon());
+ boatClassIconsMap.put(BoatClassMasterdata.DYAS.getDisplayName(), imageResources.DyasIcon());
+ boatClassIconsMap.put(BoatClassMasterdata.OPEN_BIC.getDisplayName(), imageResources.OpenBicIcon());
+ }
+
+ public static ImageResource getBoatClassIconResource(String displayName) {
+ return boatClassIconsMap.get(displayName);
+ }
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/BoatClassImageResources.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/BoatClassImageResources.java
new file mode 100644
index 00000000000..2a962a2ed5a
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/BoatClassImageResources.java
@@ -0,0 +1,147 @@
+package com.sap.sailing.gwt.home.client;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+
+public interface BoatClassImageResources extends ClientBundle {
+ public static final BoatClassImageResources INSTANCE = GWT.create(BoatClassImageResources.class);
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/GENERIC_BOATCLASS.png")
+ ImageResource genericBoatClass();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/12MR.png")
+ ImageResource _12mRIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/2_4M.png")
+ ImageResource _2_4mIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/29ER.png")
+ ImageResource _29erIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/420.png")
+ ImageResource _420Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/470.png")
+ ImageResource _470Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/49ER_FX.png")
+ ImageResource _49erFXIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/49ER.png")
+ ImageResource _49erIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/505.png")
+ ImageResource _505mIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/A_CAT.png")
+ ImageResource A_CatIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/ALBIN_EXPRESS.png")
+ ImageResource AlbinExpressIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/B_ONE.png")
+ ImageResource BOne();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/CONTENDER.png")
+ ImageResource ContenderIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/DRAGON.png")
+ ImageResource DragonIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/EUROPE.png")
+ ImageResource EuropeIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/EXTREME40.png")
+ ImageResource Extreme40Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/F16.png")
+ ImageResource F16Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/F18.png")
+ ImageResource F18Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/FARR_30.png")
+ ImageResource Farr30Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/FINN.png")
+ ImageResource FinnIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/FLYING_DUTCHMAN.png")
+ ImageResource FlyingDutchmanIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/FOLKBOAT.png")
+ ImageResource FolkBoatIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/H_BOAT.png")
+ ImageResource H_BoatIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/HOBIE.png")
+ ImageResource HobieIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/J24.png")
+ ImageResource J24Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/J70.png")
+ ImageResource J70Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/J80.png")
+ ImageResource J80Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/LASER_SB3.png")
+ ImageResource LaserSB3Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/LASER.png")
+ ImageResource LaserIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/MELGES_24.png")
+ ImageResource Melges24Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/MINI_TRANSAT.png")
+ ImageResource MiniTransatIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/MUSTO_SKIFF.png")
+ ImageResource MustoSkiffIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/NACRA_17.png")
+ ImageResource Nacra17Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/OK.png")
+ ImageResource OKIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/OPTIMIST.png")
+ ImageResource OptimistIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/PLATU_25.png")
+ ImageResource Platu25Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/RS_X.png")
+ ImageResource RSXIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/SONAR.png")
+ ImageResource SonarIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/STAR.png")
+ ImageResource StarIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/STREAMLINE.png")
+ ImageResource StreamlineIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/SWAN_45.png")
+ ImageResource Swan45Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/TORNADO.png")
+ ImageResource TornadoIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/X_99.png")
+ ImageResource X99Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/DYAS.png")
+ ImageResource DyasIcon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/INTERNATIONAL_14.png")
+ ImageResource International14Icon();
+
+ @Source("com/sap/sailing/gwt/ui/client/images/boatclass/OPENBIC.png")
+ ImageResource OpenBicIcon();
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationActivityMapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationActivityMapper.java
index 9bf6fac4580..ef42d84a558 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationActivityMapper.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationActivityMapper.java
@@ -11,6 +11,8 @@ import com.sap.sailing.gwt.home.client.place.event.EventActivityProxy;
import com.sap.sailing.gwt.home.client.place.event.EventPlace;
import com.sap.sailing.gwt.home.client.place.events.EventsActivityProxy;
import com.sap.sailing.gwt.home.client.place.events.EventsPlace;
+import com.sap.sailing.gwt.home.client.place.leaderboard.LeaderboardActivityProxy;
+import com.sap.sailing.gwt.home.client.place.leaderboard.LeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultActivityProxy;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultPlace;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsActivityProxy;
@@ -44,6 +46,8 @@ public class ApplicationActivityMapper implements ActivityMapper {
return new SponsoringActivityProxy((SponsoringPlace) place, clientFactory);
} else if (place instanceof SolutionsPlace) {
return new SolutionsActivityProxy((SolutionsPlace) place, clientFactory);
+ } else if (place instanceof LeaderboardPlace) {
+ return new LeaderboardActivityProxy((LeaderboardPlace) place, clientFactory);
} else if (place instanceof SearchResultPlace) {
return new SearchResultActivityProxy((SearchResultPlace) place, clientFactory);
} else {
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationClientFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationClientFactory.java
index 5269aff0492..3cb19e535f6 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationClientFactory.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationClientFactory.java
@@ -4,12 +4,14 @@ import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsClientFactory;
import com.sap.sailing.gwt.home.client.place.contact.ContactClientFactory;
import com.sap.sailing.gwt.home.client.place.event.EventClientFactory;
import com.sap.sailing.gwt.home.client.place.events.EventsClientFactory;
+import com.sap.sailing.gwt.home.client.place.leaderboard.LeaderboardClientFactory;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultClientFactory;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsClientFactory;
import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringClientFactory;
import com.sap.sailing.gwt.home.client.place.start.StartClientFactory;
public interface ApplicationClientFactory extends AboutUsClientFactory, ContactClientFactory, EventClientFactory,
- EventsClientFactory, StartClientFactory, SponsoringClientFactory, SolutionsClientFactory, SearchResultClientFactory {
+ EventsClientFactory, StartClientFactory, SponsoringClientFactory, SolutionsClientFactory, SearchResultClientFactory,
+ LeaderboardClientFactory {
PlaceNavigator getPlaceNavigator();
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationHistoryMapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationHistoryMapper.java
index d3fe642da21..72f4ab48c09 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationHistoryMapper.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/ApplicationHistoryMapper.java
@@ -6,8 +6,14 @@ import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsPlace;
import com.sap.sailing.gwt.home.client.place.contact.ContactPlace;
import com.sap.sailing.gwt.home.client.place.event.EventPlace;
import com.sap.sailing.gwt.home.client.place.events.EventsPlace;
+import com.sap.sailing.gwt.home.client.place.leaderboard.LeaderboardPlace;
+import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultPlace;
+import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace;
+import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringPlace;
import com.sap.sailing.gwt.home.client.place.start.StartPlace;
-@WithTokenizers({ AboutUsPlace.Tokenizer.class, ContactPlace.Tokenizer.class, EventPlace.Tokenizer.class, EventsPlace.Tokenizer.class, StartPlace.Tokenizer.class })
+@WithTokenizers({ AboutUsPlace.Tokenizer.class, ContactPlace.Tokenizer.class, EventPlace.Tokenizer.class, EventsPlace.Tokenizer.class,
+ SolutionsPlace.Tokenizer.class, SponsoringPlace.Tokenizer.class, SearchResultPlace.Tokenizer.class, StartPlace.Tokenizer.class,
+ LeaderboardPlace.Tokenizer.class})
public interface ApplicationHistoryMapper extends PlaceHistoryMapper {
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigator.java
index e0cff6053bb..ca3f7d1acf9 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigator.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigator.java
@@ -2,8 +2,9 @@ package com.sap.sailing.gwt.home.client.app;
public interface PlaceNavigator {
void goToHome();
- void goToEvent(String eventUuidAsString, String baseUrl);
- void goToRegattaOfEvent(String eventUuidAsString, String regattaIdAsNameString, String baseUrl);
+ void goToEvent(String eventUuidAsString, String baseUrl, boolean isOnRemoteServer);
+ void goToRegattaOfEvent(String eventUuidAsString, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer);
+ void goToLeaderboard(String eventUuidAsString, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer);
void goToSearchResult(String searchQuery);
void goToEvents();
void goToAboutUs();
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigatorImpl.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigatorImpl.java
index cba1737d259..3731da8fd75 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigatorImpl.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/PlaceNavigatorImpl.java
@@ -7,7 +7,9 @@ import com.google.gwt.user.client.Window;
import com.sap.sailing.gwt.home.client.place.aboutus.AboutUsPlace;
import com.sap.sailing.gwt.home.client.place.contact.ContactPlace;
import com.sap.sailing.gwt.home.client.place.event.EventPlace;
+import com.sap.sailing.gwt.home.client.place.event.EventPlace.NavigationTabs;
import com.sap.sailing.gwt.home.client.place.events.EventsPlace;
+import com.sap.sailing.gwt.home.client.place.leaderboard.LeaderboardPlace;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultPlace;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsPlace;
import com.sap.sailing.gwt.home.client.place.sponsoring.SponsoringPlace;
@@ -15,8 +17,8 @@ import com.sap.sailing.gwt.home.client.place.start.StartPlace;
public class PlaceNavigatorImpl implements PlaceNavigator {
private final PlaceController placeController;
- private final static String SAPSAILING_DOMAIN = "www.sapsailing.com";
- private final static String NEW_HOME_TEST_DOMAIN = "newhome.sapsailing.com";
+ private final static String DEFAULT_SAPSAILING_SERVER = "www.sapsailing.com";
+ private final static String DEFAULT_SAPSAILING_SERVER_URL = "http://" + DEFAULT_SAPSAILING_SERVER;
protected PlaceNavigatorImpl(PlaceController placeController) {
super();
@@ -25,89 +27,85 @@ public class PlaceNavigatorImpl implements PlaceNavigator {
@Override
public void goToHome() {
- gotoPlace(Window.Location.getHostName(), new StartPlace(), new StartPlace.Tokenizer());
+ gotoPlace(getLocationURL(), new StartPlace(), new StartPlace.Tokenizer());
}
@Override
- public void goToEvent(String eventUuidAsString, String baseUrl) {
- EventPlace eventPlace = new EventPlace(eventUuidAsString, null);
- gotoPlace(baseUrl, eventPlace, new EventPlace.Tokenizer());
-
-
-// if(isLocationOnLocalhost(baseUrl) || !baseUrl.contains(SAPSAILING_DOMAIN)) {
-// placeController.goTo(eventPlace);
-// } else {
-// String remoteEventUrl = buildRemotePlaceUrl(baseUrl, eventPlace, new EventPlace.Tokenizer());
-// Window.Location.replace(remoteEventUrl);
-// }
+ public void goToEvent(String eventUuidAsString, String baseUrl, boolean isOnRemoteServer) {
+ EventPlace eventPlace = new EventPlace(eventUuidAsString, NavigationTabs.Regattas, null);
+ gotoPlace(baseUrl, isOnRemoteServer, eventPlace, new EventPlace.Tokenizer());
}
@Override
- public void goToRegattaOfEvent(String eventUuidAsString, String leaderboardIdAsNameString, String baseUrl) {
- EventPlace eventPlace = new EventPlace(eventUuidAsString, leaderboardIdAsNameString);
- gotoPlace(baseUrl, eventPlace, new EventPlace.Tokenizer());
-
-// if(isLocationOnLocalhost(baseUrl) || baseUrl.contains(SAPSAILING_DOMAIN)) {
-// placeController.goTo(eventPlace);
-// } else {
-// String remoteEventUrl = buildRemotePlaceUrl(baseUrl, eventPlace, new EventPlace.Tokenizer());
-// Window.Location.replace(remoteEventUrl);
-// }
+ public void goToRegattaOfEvent(String eventUuidAsString, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer) {
+ EventPlace eventPlace = new EventPlace(eventUuidAsString, NavigationTabs.Regatta, leaderboardIdAsNameString);
+ gotoPlace(baseUrl, isOnRemoteServer, eventPlace, new EventPlace.Tokenizer());
+ }
+
+ @Override
+ public void goToLeaderboard(String eventUuidAsString, String leaderboardIdAsNameString, String baseUrl, boolean isOnRemoteServer) {
+ LeaderboardPlace leaderboardPlace = new LeaderboardPlace(eventUuidAsString, leaderboardIdAsNameString, true, true);
+ gotoPlace(baseUrl, isOnRemoteServer, leaderboardPlace, new LeaderboardPlace.Tokenizer());
}
@Override
public void goToSearchResult(String searchQuery) {
- gotoPlace(Window.Location.getHostName(), new SearchResultPlace(searchQuery), new SearchResultPlace.Tokenizer());
+ gotoPlace(getLocationURL(), new SearchResultPlace(searchQuery), new SearchResultPlace.Tokenizer());
}
@Override
public void goToEvents() {
- gotoPlace(Window.Location.getHostName(), new EventsPlace(), new EventsPlace.Tokenizer());
+ gotoPlace(getLocationURL(), new EventsPlace(), new EventsPlace.Tokenizer());
}
@Override
public void goToAboutUs() {
- gotoPlace(new AboutUsPlace());
+ gotoPlace(getLocationURL(), new AboutUsPlace(), new AboutUsPlace.Tokenizer());
}
@Override
public void goToContact() {
- gotoPlace(new ContactPlace());
+ gotoPlace(getLocationURL(), new ContactPlace(), new ContactPlace.Tokenizer());
}
@Override
public void goToSolutions() {
- gotoPlace(new SolutionsPlace());
+ gotoPlace(getLocationURL(), new SolutionsPlace(), new SolutionsPlace.Tokenizer());
}
@Override
public void goToSponsoring() {
- gotoPlace(new SponsoringPlace());
+ gotoPlace(getLocationURL(), new SponsoringPlace(), new SponsoringPlace.Tokenizer());
}
- private void gotoPlace(T destinationPlace) {
- placeController.goTo(destinationPlace);
- }
-
private void gotoPlace(String baseUrl, T destinationPlace, PlaceTokenizer tokenizer) {
- if(isLocationOnLocalhost(baseUrl) || isLocationOnSapSailingCom(baseUrl) || isLocationOnNewHomeTest(baseUrl)) {
+ if(isLocationOnLocalhost(baseUrl) || isLocationOnDefaultSapSailingServer(baseUrl)) {
+ placeController.goTo(destinationPlace);
+ } else {
+ String homeUrl = buildRemotePlaceUrl(DEFAULT_SAPSAILING_SERVER_URL, destinationPlace, tokenizer);
+ Window.Location.replace(homeUrl);
+ }
+ }
+
+ private void gotoPlace(String baseUrl, boolean isOnRemoteServer, T destinationPlace, PlaceTokenizer tokenizer) {
+ if((baseUrl != null && isLocationOnLocalhost(baseUrl)) || !isOnRemoteServer) {
placeController.goTo(destinationPlace);
} else {
String homeUrl = buildRemotePlaceUrl(baseUrl, destinationPlace, tokenizer);
Window.Location.replace(homeUrl);
}
}
+
+ private String getLocationURL() {
+ return Window.Location.getProtocol() + "//" + Window.Location.getHostName();
+ }
private String buildRemotePlaceUrl(String baseUrl, T destinationPlace, PlaceTokenizer tokenizer) {
return baseUrl + "/gwt/Home.html#" + destinationPlace.getClass().getSimpleName() + ":" + tokenizer.getToken(destinationPlace);
}
- private boolean isLocationOnNewHomeTest(String urlToCheck) {
- return urlToCheck.contains(NEW_HOME_TEST_DOMAIN);
- }
-
- private boolean isLocationOnSapSailingCom(String urlToCheck) {
- return urlToCheck.contains(SAPSAILING_DOMAIN);
+ private boolean isLocationOnDefaultSapSailingServer(String urlToCheck) {
+ return urlToCheck.contains(DEFAULT_SAPSAILING_SERVER);
}
private boolean isLocationOnLocalhost(String urlToCheck) {
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/SmartphoneApplicationClientFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/SmartphoneApplicationClientFactory.java
index ab5e46d4bf8..d7f9018888a 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/SmartphoneApplicationClientFactory.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/SmartphoneApplicationClientFactory.java
@@ -5,11 +5,16 @@ import java.util.List;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
+import com.sap.sailing.gwt.home.client.place.error.TabletAndDesktopErrorView;
import com.sap.sailing.gwt.home.client.place.event.EventView;
+import com.sap.sailing.gwt.home.client.place.event.EventWithoutRegattasView;
import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventView;
+import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventWithoutRegattasView;
import com.sap.sailing.gwt.home.client.place.events.EventsActivity;
import com.sap.sailing.gwt.home.client.place.events.EventsView;
import com.sap.sailing.gwt.home.client.place.events.TabletAndDesktopEventsView;
+import com.sap.sailing.gwt.home.client.place.leaderboard.LeaderboardView;
+import com.sap.sailing.gwt.home.client.place.leaderboard.TabletAndDesktopLeaderboardView;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultView;
import com.sap.sailing.gwt.home.client.place.searchresult.TabletAndDesktopSearchResultView;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsActivity;
@@ -35,12 +40,17 @@ public class SmartphoneApplicationClientFactory extends AbstractApplicationClien
}
private SmartphoneApplicationClientFactory(EventBus eventBus, PlaceController placeController) {
- super(new SmartphoneApplicationView(new PlaceNavigatorImpl(placeController)), eventBus, placeController);
+ super(new TabletAndDesktopApplicationView(new PlaceNavigatorImpl(placeController)), eventBus, placeController);
}
@Override
public EventView createEventView(EventDTO event, List raceGroups, String leaderboardName, Timer timerForClientServerOffset) {
- return new TabletAndDesktopEventView(getSailingService(), event, raceGroups, leaderboardName, timerForClientServerOffset);
+ return new TabletAndDesktopEventView(getSailingService(), event, raceGroups, leaderboardName, timerForClientServerOffset, getPlaceNavigator());
+ }
+
+ @Override
+ public EventWithoutRegattasView createEventWithoutRegattasView(EventDTO event) {
+ return new TabletAndDesktopEventWithoutRegattasView(getSailingService(), event);
}
@Override
@@ -48,10 +58,14 @@ public class SmartphoneApplicationClientFactory extends AbstractApplicationClien
return new TabletAndDesktopEventsView(getPlaceNavigator());
}
+ @Override
+ public TabletAndDesktopErrorView createErrorView(String errorMessage, Throwable errorReason) {
+ return new TabletAndDesktopErrorView(errorMessage, errorReason);
+ }
+
@Override
public StartView createStartView() {
return new TabletAndDesktopStartView(getPlaceNavigator());
-// return new SmartphoneStartView(getPlaceNavigator());
}
@Override
@@ -64,8 +78,13 @@ public class SmartphoneApplicationClientFactory extends AbstractApplicationClien
return new TabletAndDesktopSolutionsView();
}
+ @Override
+ public LeaderboardView createLeaderboardView(EventDTO event, String leaderboardName, Timer timerForClientServerOffset) {
+ return new TabletAndDesktopLeaderboardView(event, leaderboardName, timerForClientServerOffset, getPlaceNavigator());
+ }
+
@Override
public SearchResultView createSearchResultView() {
- return new TabletAndDesktopSearchResultView(getPlaceNavigator(), getEventBus());
+ return new TabletAndDesktopSearchResultView(getPlaceNavigator());
}
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationClientFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationClientFactory.java
index c58a34f6f62..6100a0d2510 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationClientFactory.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationClientFactory.java
@@ -5,11 +5,16 @@ import java.util.List;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;
+import com.sap.sailing.gwt.home.client.place.error.TabletAndDesktopErrorView;
import com.sap.sailing.gwt.home.client.place.event.EventView;
+import com.sap.sailing.gwt.home.client.place.event.EventWithoutRegattasView;
import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventView;
+import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventWithoutRegattasView;
import com.sap.sailing.gwt.home.client.place.events.EventsActivity;
import com.sap.sailing.gwt.home.client.place.events.EventsView;
import com.sap.sailing.gwt.home.client.place.events.TabletAndDesktopEventsView;
+import com.sap.sailing.gwt.home.client.place.leaderboard.LeaderboardView;
+import com.sap.sailing.gwt.home.client.place.leaderboard.TabletAndDesktopLeaderboardView;
import com.sap.sailing.gwt.home.client.place.searchresult.SearchResultView;
import com.sap.sailing.gwt.home.client.place.searchresult.TabletAndDesktopSearchResultView;
import com.sap.sailing.gwt.home.client.place.solutions.SolutionsActivity;
@@ -40,7 +45,17 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio
@Override
public EventView createEventView(EventDTO event, List raceGroups, String leaderboardName, Timer timerForClientServerOffset) {
- return new TabletAndDesktopEventView(getSailingService(), event, raceGroups, leaderboardName, timerForClientServerOffset);
+ return new TabletAndDesktopEventView(getSailingService(), event, raceGroups, leaderboardName, timerForClientServerOffset, getPlaceNavigator());
+ }
+
+ @Override
+ public TabletAndDesktopErrorView createErrorView(String errorMessage, Throwable errorReason) {
+ return new TabletAndDesktopErrorView(errorMessage, errorReason);
+ }
+
+ @Override
+ public EventWithoutRegattasView createEventWithoutRegattasView(EventDTO event) {
+ return new TabletAndDesktopEventWithoutRegattasView(getSailingService(), event);
}
@Override
@@ -63,8 +78,13 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio
return new TabletAndDesktopSolutionsView();
}
+ @Override
+ public LeaderboardView createLeaderboardView(EventDTO event, String leaderboardName, Timer timerForClientServerOffset) {
+ return new TabletAndDesktopLeaderboardView(event, leaderboardName, timerForClientServerOffset, getPlaceNavigator());
+ }
+
@Override
public SearchResultView createSearchResultView() {
- return new TabletAndDesktopSearchResultView(getPlaceNavigator(), getEventBus());
+ return new TabletAndDesktopSearchResultView(getPlaceNavigator());
}
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationView.java
index 915f726ee10..ae32e3212eb 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationView.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationView.java
@@ -1,8 +1,6 @@
package com.sap.sailing.gwt.home.client.app;
import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.Element;
-import com.google.gwt.dom.client.Style.Visibility;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
@@ -31,9 +29,6 @@ public class TabletAndDesktopApplicationView extends Composite implements Applic
@UiField
SimplePanel mainContentPanel;
- @UiField
- Element loadingMessage;
-
public TabletAndDesktopApplicationView(PlaceNavigator navigator) {
headerPanel = new Header(navigator);
initWidget(uiBinder.createAndBindUi(this));
@@ -45,7 +40,6 @@ public class TabletAndDesktopApplicationView extends Composite implements Applic
}
@Override
- public void showLoading(boolean visibile) {
- loadingMessage.getStyle().setVisibility(visibile ? Visibility.VISIBLE : Visibility.HIDDEN);
+ public void showLoading(boolean visible) {
}
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationView.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationView.ui.xml
index c53727b7ab3..c0926ee297e 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationView.ui.xml
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/app/TabletAndDesktopApplicationView.ui.xml
@@ -2,14 +2,9 @@
-
- Loading...
-
-
-
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.java
index 073766f0b23..c0431620b40 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.java
@@ -1,8 +1,11 @@
package com.sap.sailing.gwt.home.client.i18n;
+import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.Messages;
public interface TextMessages extends Messages {
+ public static final TextMessages INSTANCE = GWT.create(TextMessages.class);
+
String chooseALanguage();
String home();
String events();
@@ -10,10 +13,22 @@ public interface TextMessages extends Messages {
String contact();
String sponsoring();
String solutions();
- String search();
String german();
String english();
String fullEventSchedule();
+ String officalEventWebsite();
+ String leg();
+ String races();
+ String moreInfo();
+ String viewAnalysis();
+ String overallLeaderboard();
+ String pleaseEnterASearchTerm();
+ String pleaseTryAgain();
+ String reloadPage();
+ String errorMessageLoadingData();
+ String errorMessageNoSuchLeaderboard();
+ String raceNotScheduled();
+ String regattaDetails();
String countdownDays();
String countdownHours();
@@ -27,7 +42,7 @@ public interface TextMessages extends Messages {
String finished();
String watchNow();
String lastUpdate();
- String leaderBoard();
+ String leaderboard();
String boxNewsUpdateMoreLink();
String boxNewsUpdateTitle();
String boxUpcomingRacesCountdownStarted1();
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.properties
index 30566ad2258..0f8ea69634d 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.properties
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages.properties
@@ -5,10 +5,22 @@ aboutUs=About us
contact=Contact
sponsoring=Sponsoring
solutions=Solutions
-search=Search
german=Deutsch
english=English
fullEventSchedule=Full event schedule
+officalEventWebsite=Official event website
+leg=Leg
+races=Races
+moreInfo=More info
+viewAnalysis=View analysis
+overallLeaderboard=Overall leaderboard
+pleaseEnterASearchTerm=Please enter a search term.
+pleaseTryAgain=Please try again...
+reloadPage=Reload page
+errorMessageLoadingData=An error occured while loading the data for this page.
+errorMessageNoSuchLeaderboard=Could not find a leaderboard with this name.
+raceNotScheduled=Not scheduled.
+regattaDetails=Regatta details
countdownDays=Days
countdownHours=Hrs
@@ -22,7 +34,7 @@ live=Live
finished=Finished
watchNow=Watch now
lastUpdate=Last Update
-leaderBoard=LeaderBoard
+leaderboard=Leaderboard
boxNewsUpdateMoreLink=Report news
boxNewsUpdateTitle=News Update
boxUpcomingRacesCountdownStarted1=Started
@@ -79,8 +91,8 @@ eventRegattaRaceStarted=Started at:
eventRegattaRaceScheduled=Scheduled for:
eventRegattaRaceRace=Race
eventRegattaRaceWind=Wind Strength:
-eventRegattaRaceWinner=Winner:
-eventRegattaRaceLeader=Leader:
+eventRegattaRaceWinner=Winner
+eventRegattaRaceLeader=Leader
eventRegattaRacesLegendGps=Tracking
eventRegattaRacesLegendWind=Wind Data
eventRegattaRacesLegendVideo=Video Stream
@@ -95,7 +107,7 @@ headerEvents=Events
headerHome=Home
headerLogo=SAP Sailing Analytics
headerSearch=Search
-headerSearchPlaceholder=Search
+headerSearchPlaceholder=Search SAPSailing.com
headerSolutions=Solutions
headerSponsoring=Sponsoring
latestRaceResultsHeadline=Latest Official Race Results
@@ -127,15 +139,15 @@ regattaStartedAt=Started at
regattasResultsTitle=Winner and Results
searchResultHeaderButton=Search
searchResultHeaderLabel=Your Search
-searchResultHeaderPlaceholder=Suchbegriff eingeben
+searchResultHeaderPlaceholder=Type in your searchkey
searchResultMore=More
searchResultSearch=Search
searchResultSearchAgain=Search again
searchResultSortLabel=Sort by
-searchResultSortNewest=Neueste
-searchResultSortOldest=Älteste
+searchResultSortNewest=Recent
+searchResultSortOldest=Oldest
searchResultSortRelevance=Relevance
-searchResultCount=About 2,450 reslts where found for 'Schnitzel'
+searchResultCount=About 2,450 results where found for 'Schnitzel'
sharingEmail=Send an email
sharingFacebook=Share on Facebook
sharingTwitter=Tweet about it
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties
index aec0f82d9c4..248856f4317 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/i18n/TextMessages_de.properties
@@ -1,14 +1,26 @@
-chooseALanguage=Wähle eine Sprache
+chooseALanguage=Wähle eine Sprache
events=Veranstaltungen
home=Startseite
-aboutUs=Über uns
+aboutUs=Über uns
contact=Kontakt
sponsoring=Sponsoring
-solutions=Lösungen
-search=Suche
+solutions=Lösungen
german=Deutsch
english=English
-fullEventSchedule=Full event schedule
+fullEventSchedule=Gesamter Veranstaltungsplan
+officalEventWebsite=Offizielle Internetseite
+leg=Schenkel
+races=Rennen
+moreInfo=Weitere Informationen
+viewAnalysis=Analyzen ansehen
+overallLeaderboard=Gesamtergebnis
+pleaseEnterASearchTerm=Bitte gebe einen Suchbegriff ein.
+pleaseTryAgain=Bitte versuchen sie es erneut...
+reloadPage=Seite neu laden
+errorMessageLoadingData=Beim Laden der Daten für diese Seite ist ein Fehler aufgetreten.
+errorMessageNoSuchLeaderboard=Es wurde keine Ergebnisliste mit diesem Namen gefunden.
+raceNotScheduled=Keine Startzeit bekannt
+regattaDetails=Regatta anzeigen
countdownDays=Tage
countdownHours=Std.
@@ -19,141 +31,141 @@ countdownHour=Std.
countdownMinute=Min.
countdownSecond=Sek.
live=Live
-finished=Finished
-watchNow=Watch now
-lastUpdate=Last Update
-leaderBoard=LeaderBoard
-boxNewsUpdateMoreLink=Report news
+finished=Beendet
+watchNow=Jetzt mitverfolgen
+lastUpdate=Letztes Update
+leaderboard=Ergebnisliste
+boxNewsUpdateMoreLink=Neuigkeiten berichten
boxNewsUpdateTitle=News Update
-boxUpcomingRacesCountdownStarted1=Started
-boxUpcomingRacesCountdownStarted2=hrs and
-boxUpcomingRacesCountdownStarted3=minutes ago
-boxUpcomingRacesCountdownStarting1=Starting in
-boxUpcomingRacesCountdownStarting2=hrs and
-boxUpcomingRacesCountdownStarting3=minutes
-boxUpcomingRacesMoreLink=Event Schedule
-boxUpcomingRacesTitle=Upcoming Races Today
-boxWeather=Weather
-boxWeatherUnit=KTS
+boxUpcomingRacesCountdownStarted1=Gestartet
+boxUpcomingRacesCountdownStarted2=Std. und
+boxUpcomingRacesCountdownStarted3=Minuten vorbei
+boxUpcomingRacesCountdownStarting1=Startet in
+boxUpcomingRacesCountdownStarting2=Std. in
+boxUpcomingRacesCountdownStarting3=Minuten
+boxUpcomingRacesMoreLink=Veranstaltungszeitplan
+boxUpcomingRacesTitle=Kommende Rennen heute
+boxWeather=Wetter
+boxWeatherUnit=KTN
defaultTitle=SAP Sailing Analytics
eventHeaderMedia=Media
-eventHeaderOverview=Overview
-eventHeaderRaces=Schedule
-eventHeaderRegattas=Regattas
-seriesHeaderOverview=About the Series
-seriesHeaderUpcoming=Upcoming Events
-seriesHeaderRecent=Recent Events
-seriesHeaderLeaderboard=Leaderboard
-seriesOverviewHeaderRecent=Latest Series Events
-seriesOverviewReadMore=More
-eventsOverviewRecentEvents=Events
-eventsOverviewRecentCountries=Countries
-eventsOverviewRecentSailors=Sailors
-eventsOverviewRecentTrackedRaces=Tracked Races
-eventResultsHeadline=Winners and Results
-eventResultsBoatClassesDropDown=All Boat Classes
-eventOverviewMoreEvents=More Events
-eventOverviewRecentEvents=Recent Events
-eventOverviewUpcomingDate=Date
-eventOverviewUpcomingEvent=Event
-eventOverviewUpcomingLocation=Location
-eventOverviewUpcomingSchedule=Upcoming Schedule
-eventOverviewUpcomingSeries=Series
-eventOverviewUpcomingTeaser=More Events To Be Announced Soon!
-eventQuickfinderTitle=Event Quick-Finder
-eventRegattaHeaderLeaderboard=Leaderboard
-eventRegattaHeaderRaceRaces=Races
-eventRegattaListAllBoatClasses=All boat classes
-eventRegattaLeaderboardCompetitor=Competitor
-eventRegattaLeaderboardExtendLeaderboard=Extend Leaderboard
-eventRegattaLeaderboardFinishedMessage=No more races
-eventRegattaLeaderboardLastScoreUpdate=Last Score Update
+eventHeaderOverview=Übersicht
+eventHeaderRaces=Zeitplan
+eventHeaderRegattas=Regatten
+seriesHeaderOverview=Über die Serie
+seriesHeaderUpcoming=Noch kommende Veranstaltungen
+seriesHeaderRecent=Letzte Veranstaltungen
+seriesHeaderLeaderboard=Ergebnisliste
+seriesOverviewHeaderRecent=Letzte Serienveranstaltungen
+seriesOverviewReadMore=Mehr
+eventsOverviewRecentEvents=Veranstaltungen
+eventsOverviewRecentCountries=Länder
+eventsOverviewRecentSailors=Segler
+eventsOverviewRecentTrackedRaces=mitverfolgte Rennen
+eventResultsHeadline=Gewinner und Ergebnisse
+eventResultsBoatClassesDropDown=Alle Bootklassen
+eventOverviewMoreEvents=Mehr Veranstaltungen
+eventOverviewRecentEvents=Letzte Veranstaltungen
+eventOverviewUpcomingDate=Datum
+eventOverviewUpcomingEvent=Veranstaltungen
+eventOverviewUpcomingLocation=Ort
+eventOverviewUpcomingSchedule=Kommendes Programm
+eventOverviewUpcomingSeries=Serien
+eventOverviewUpcomingTeaser=Mehr Veranstaltungen werden bald veröffentlicht
+eventQuickfinderTitle=Veranstaltung Schnellsuche
+eventRegattaHeaderLeaderboard=Ergebnisliste
+eventRegattaHeaderRaceRaces=Rennen
+eventRegattaListAllBoatClasses=Alle Bootklassen
+eventRegattaLeaderboardCompetitor=Teilnehmer
+eventRegattaLeaderboardExtendLeaderboard=Erweitere Ergebnisliste
+eventRegattaLeaderboardFinishedMessage=Keine weiteren rennen
+eventRegattaLeaderboardLastScoreUpdate=Letztes Ergebnisupdate
eventRegattaLeaderboardName=Name
-eventRegattaLeaderboardRegattaRank=Regatta Rank
-eventRegattaLeaderboardTotalPoints=Total Points
-eventRegattaRaceWatch=Watch live
-eventRegattaRaceAnalyse=Analyze Race
-eventRegattaRaceNotTracked=Not Tracked
-eventRegattaRaceFinished=Finished at:
-eventRegattaRaceStarted=Started at:
-eventRegattaRaceScheduled=Scheduled for:
-eventRegattaRaceRace=Race
-eventRegattaRaceWind=Wind Strength:
-eventRegattaRaceWinner=Winner:
-eventRegattaRaceLeader=Leader:
+eventRegattaLeaderboardRegattaRank=Platz in der Regatta
+eventRegattaLeaderboardTotalPoints=Gesamtpunkte
+eventRegattaRaceWatch=Live ansehen
+eventRegattaRaceAnalyse=Rennen analysieren
+eventRegattaRaceNotTracked=Nicht getracked
+eventRegattaRaceFinished=Beendet um:
+eventRegattaRaceStarted=Gestartet um:
+eventRegattaRaceScheduled=Geplant um:
+eventRegattaRaceRace=Rennen
+eventRegattaRaceWind=Windstärke:
+eventRegattaRaceWinner=Gewinner
+eventRegattaRaceLeader=Führender
eventRegattaRacesLegendGps=Tracking
-eventRegattaRacesLegendWind=Wind Data
+eventRegattaRacesLegendWind=Winddaten
eventRegattaRacesLegendVideo=Video Stream
eventRegattaRacesLegendAudio=Audio Stream
-eventSponsorsTitle=Event Sponsorships
+eventSponsorsTitle=Veranstaltungssponsoren
footerCopyright=\u00A9 2014 SAP Sailing Analytics
-footerLanguage=SAP Sailing offered in
-footerLegal=Legal Disclosure
-footerPrivacy=Privacy
+footerLanguage=SAP Sailing in
+footerLegal=Impressum
+footerPrivacy=Datenschutz
footerFeedback=Feedback
-headerEvents=Events
-headerHome=Home
+headerEvents=Veranstaltungen
+headerHome=Startseite
headerLogo=SAP Sailing Analytics
-headerSearch=Search
-headerSearchPlaceholder=Search
-headerSolutions=Solutions
-headerSponsoring=Sponsoring
-latestRaceResultsHeadline=Latest Official Race Results
-latestRaceResultsIsNew=New
-latestRaceResultsIsUpdated=Updated
-latestRaceResultsRaceCountLabel=Result after
-latestRaceResultsRaceCountUnit=races
-latestRaceResultsRefresh=refresh
-leaderboardQuickAccessLabel=Leaderboard Quick Access
-mainEventShowAll=Show All Events
-mainEventTitle=Latest Events from the Sailing World
-mainMediaSubtitle=Get lost in the latest and most beautiful impressions from your favorite sailing event.
-mainMediaTitle=Sailing loves Photography
-mainMediaVideosSubtitle=Immerse yourself in the world of sailing and check out our latest events for more videos.
-mainMediaVideosTitle=Recent Video Entries
-mainSponsorsReadMore=Read More
-mediaTeaserPhotosTitle=Photos
+headerSearch=Suche in SAPSailing.com
+headerSearchPlaceholder=Suche
+headerSolutions=Lösungen
+headerSponsoring=Sponsoren
+latestRaceResultsHeadline=Letzten ofiziellen Ergebnisse
+latestRaceResultsIsNew=Neu
+latestRaceResultsIsUpdated=Aktualisiert
+latestRaceResultsRaceCountLabel=Ergebnis nach
+latestRaceResultsRaceCountUnit=Rennen
+latestRaceResultsRefresh=aktualisieren
+leaderboardQuickAccessLabel=Ergebnisliste Schnellzugang
+mainEventShowAll=Zeige alle Veranstaltungen
+mainEventTitle=Die letzten Veranstaltungen aus der Segelwelt
+mainMediaSubtitle=Hier gibt es die aktuellsten und schönsten Impressionen aus deiner beliebtesten Segelveranstaltung.
+mainMediaTitle=Segeln liebt Fotographie
+mainMediaVideosSubtitle=Tauche ein in die Welt des Segelns und besuche auch die anderen Veranstaltungen für mehr Videos.
+mainMediaVideosTitle= Die Letzten Videoeinträge
+mainSponsorsReadMore=Lese mehr
+mediaTeaserPhotosTitle=Fotos
mediaTeaserVideosTitle=Videos
-regattaCompetitors=Competitors
-regattaRaces=Races
-regattaTracked=Tracked
-regattaRegattaStarts=Regatta will start
-regattaPts=Pts.
-regattaCourse=Course
-regattaArea=Area
-regattaFinishedAt=Finished at
-regattaScheduledAt=Scheduled at
-regattaStartedAt=Started at
-regattasResultsTitle=Winner and Results
-searchResultHeaderButton=Search
-searchResultHeaderLabel=Your Search
+regattaCompetitors=Teilnehmer
+regattaRaces=Rennen
+regattaTracked=Getracked
+regattaRegattaStarts=Regatta wird starten
+regattaPts=Pkt.
+regattaCourse=Kurs
+regattaArea=Regattabahn
+regattaFinishedAt=Beendet um
+regattaScheduledAt=Geplant um
+regattaStartedAt=Gestartet um
+regattasResultsTitle=Gewinner und Ergebnisse
+searchResultHeaderButton=Suche
+searchResultHeaderLabel=Deine Suche
searchResultHeaderPlaceholder=Suchbegriff eingeben
-searchResultMore=More
-searchResultSearch=Search
-searchResultSearchAgain=Search again
-searchResultSortLabel=Sort by
+searchResultMore=Mehr
+searchResultSearch=Suche
+searchResultSearchAgain=Noch einmal suchen
+searchResultSortLabel=Sortiert nach
searchResultSortNewest=Neueste
-searchResultSortOldest=Älteste
-searchResultSortRelevance=Relevance
-searchResultCount=About 2,450 reslts where found for 'Schnitzel'
-sharingEmail=Send an email
-sharingFacebook=Share on Facebook
-sharingTwitter=Tweet about it
-socialFooterShare=Share this on
-socialFooterTitle=Recommend SAP Sailing Analytics
+searchResultSortOldest=Älteste
+searchResultSortRelevance=Relevanz
+searchResultCount=Um die 2.450 Ergebnisse wurden gefunden für "Schnitzel"
+sharingEmail=Email versenden
+sharingFacebook=Auf Facebook teilen
+sharingTwitter=Twittern
+socialFooterShare=Teile es auf
+socialFooterTitle=Empfehle SAP Sailing Analytics
solutionsSAPNav=SAP Sailing Analytics
solutionsSAPHeadline=SAP Sailing Analytics
-solutionsSAPText1=By delivering real time analytics around race rankings, speeds, maneuvers, bearings etc., SAP is helping to simplify and demystify the complex sport of sailing.
-solutionsSAPText2=SAP Sailing Analytics provide insights and transparency to the world of sailing by utilizing Cloud and In-Memory Technology, processing GPS and wind measurement data in real time and visualizing contents in various frontends accessible from anywhere.
+solutionsSAPText1=Bei Echtzeitanalysen rund um Rennplätze, Schnelligkeit, Manöver, Verhalten etc., SAP hilf dabei zu vereinfachen und den Mythos von der Komplexität des Segelns zu nehmen.
+solutionsSAPText2=SAP Sailing Analytics ermöglicht Einsichten und Transparenz in die Welt des Segelns durch Nutzung der Cloud und In-Memory Technologien, Erheben von GPS und Windmessungen in echtzeit und den Inhalt auf verschiedenen Oberflächen von überall zu visualisieren.
solutionsRaceNav=Race Committee App
solutionsRaceHeadline=Race Committee App
-solutionsRaceText=The SAP Race Committee App delivers greater efficiency and control to race organizers by automating and simplifying their manual tasks and communication during running sailing regattas. The Race Committee App helps simplify the operation of running and managing race events to help race committees operate smarter.
-solutionsPostNav=Post-Race Analytics
-solutionsPostHeadline=Post-Race Analytics
-solutionsPostText=Access to data collected at sailing events gives sailors the opportunity to assess and analyse their performances to help develop strategies and sail better.
SAP Business Analytics solutions provide sailors, coaches, fans and media with tools to browse and analyse historical data across many regattas and races. SAP HANA allows them to learn about performance patterns, tendencies and sailor profiles in a simple, fast and efficient way in order to optimize their own performance and develop successful strategies for future regattas.
-solutionsTrainingNav=Training Diary
-solutionsTrainingHeadline=SAP Sail Better \u2013 STG Training Diary
-solutionsTrainingText=The STG Training Diary supports the daily documentation and analysis of an athlete\u2019s physical condition and training efforts in the areas of water training, physical training, boat work, mental, theory as well as other activities like education or travel.
-solutionsSimulatorNav=Strategy Simulator
-solutionsSimulatorHeadline=Strategy Simulator
-solutionsSimulatorText=Choosing the right strategy can provide great competitive advantage during a race. The Strategy Simulator simplifies determining the best sailing strategy for various wind conditions and water currents. Since wind and current can be changed in the simulation right away, the robustness of a strategy can be easily evaluated even for uncertain weather conditions.
+solutionsRaceText=Die SAP Race Committee App bietet mehr Effizienz und Kontrolle für die Rennleiter durch Automatisieren und vereinfachen der manuellen Aufgaben und der Kommunikation während laufender Segelregatten. Die Race Committee App hilft Aufgaben zu vereinfachen und Segelveranstaltungen zu leiten, um das Segel Komitee besser Handeln zu lassen.
+solutionsPostNav=Nachträgliche Rennen Analyse.
+solutionsPostHeadline=Nachträgliche Rennen Analyse
+solutionsPostText=Zugang zu gesammelten Daten bei Segelveranstaltungen geben Seglern die Möglichkeit die eigene Performance zu beurteilen und zu analysieren, um Strategien zu entwickeln und besser zu segeln.
SAP Business Analytics Lösungen stellen Seglern, Trainern, Fans und Medien Tools zu verfügung, um die historischen Daten über mehrere Regatten und Rennen anzusehen und zu analysieren. SAP HANA erlaubt es ihnen über Verhaltensmuster, Tendenzen und Segelprofilen in einem einfachen, schnellen und effizienten Weg zu erlernen, damit sie ihre Performance und Entwicklung der Strategien in zukünftigen Regatten zu optimieren.
+solutionsTrainingNav=Training Tagebuch
+solutionsTrainingHeadline=SAP Segelt Besser \u2013 STG Training Tagebuch
+solutionsTrainingText=Das STG Trainingstagebuch unterstützt die tägliche Dokumentation und Analyse von der physischen Kondition und Trainingserfolge eines Athleten in Wassertraining, physischen Training, Boot Arbeiten, Theorie und andere Aufgaben wie Bildung oder Reisen.
+solutionsSimulatorNav=Strategie Simulator
+solutionsSimulatorHeadline=Strategie Simulator
+solutionsSimulatorText=Die richtige Strategie zu wählen kann einen großen Vorteil während eines Rennens bringen. Der Strategie Simulator vereinfacht ausschlaggebend die besten Segelstrategien für verschiedene Windkonditionen und Wasserströmungen. Seit dem der Wind und die Strömung während der Simulation direkt geändert werden kann, kann die Strategie sogar für unsichere Wetterverhältnisse einfach bewertet werden.
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorActivity.java
new file mode 100644
index 00000000000..189b6a60a33
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorActivity.java
@@ -0,0 +1,18 @@
+package com.sap.sailing.gwt.home.client.place.error;
+
+import com.google.gwt.activity.shared.AbstractActivity;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.user.client.ui.AcceptsOneWidget;
+
+public class ErrorActivity extends AbstractActivity {
+
+ public ErrorActivity(ErrorPlace place, ErrorClientFactory clientFactory) {
+ }
+
+ @Override
+ public void start(AcceptsOneWidget panel, EventBus eventBus) {
+ // TODO: the error place should get the error message from the place
+ panel.setWidget(new TabletAndDesktopErrorView(null, null));
+ }
+
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorActivityProxy.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorActivityProxy.java
new file mode 100644
index 00000000000..99ee5c0ecfe
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorActivityProxy.java
@@ -0,0 +1,25 @@
+package com.sap.sailing.gwt.home.client.place.error;
+
+import com.google.gwt.core.client.GWT;
+import com.sap.sse.gwt.client.mvp.AbstractActivityProxy;
+
+public class ErrorActivityProxy extends AbstractActivityProxy {
+
+ private final ErrorClientFactory clientFactory;
+ private final ErrorPlace place;
+
+ public ErrorActivityProxy(ErrorPlace place, ErrorClientFactory clientFactory) {
+ this.place = place;
+ this.clientFactory = clientFactory;
+ }
+
+ @Override
+ protected void startAsync() {
+ GWT.runAsync(new AbstractRunAsyncCallback() {
+ @Override
+ public void onSuccess() {
+ super.onSuccess(new ErrorActivity(place, clientFactory));
+ }
+ });
+ }
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorClientFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorClientFactory.java
new file mode 100644
index 00000000000..2be2c58653c
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorClientFactory.java
@@ -0,0 +1,7 @@
+package com.sap.sailing.gwt.home.client.place.error;
+
+import com.sap.sailing.gwt.ui.client.SailingClientFactory;
+
+public interface ErrorClientFactory extends SailingClientFactory {
+
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorPlace.java
new file mode 100644
index 00000000000..75e36136479
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/ErrorPlace.java
@@ -0,0 +1,19 @@
+package com.sap.sailing.gwt.home.client.place.error;
+
+import com.google.gwt.place.shared.PlaceTokenizer;
+import com.sap.sailing.gwt.home.client.AbstractBasePlace;
+
+public class ErrorPlace extends AbstractBasePlace {
+
+ public static class Tokenizer implements PlaceTokenizer {
+ @Override
+ public String getToken(ErrorPlace place) {
+ return null;
+ }
+
+ @Override
+ public ErrorPlace getPlace(String token) {
+ return new ErrorPlace();
+ }
+ }
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/TabletAndDesktopErrorView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/TabletAndDesktopErrorView.java
new file mode 100644
index 00000000000..f36be64b41d
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/TabletAndDesktopErrorView.java
@@ -0,0 +1,24 @@
+package com.sap.sailing.gwt.home.client.place.error;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+import com.sap.sailing.gwt.home.client.shared.error.ErrorMessage;
+import com.sap.sse.gwt.client.mvp.ErrorView;
+
+public class TabletAndDesktopErrorView extends Composite implements ErrorView {
+ private static ErrorViewUiBinder uiBinder = GWT.create(ErrorViewUiBinder.class);
+
+ interface ErrorViewUiBinder extends UiBinder {
+ }
+
+ @UiField(provided=true) ErrorMessage errorMessage;
+
+ public TabletAndDesktopErrorView(String errorMessageText, Throwable errorReason) {
+ errorMessage = new ErrorMessage(errorMessageText, errorReason);
+
+ initWidget(uiBinder.createAndBindUi(this));
+ }
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/TabletAndDesktopErrorView.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/TabletAndDesktopErrorView.ui.xml
new file mode 100644
index 00000000000..6672708ed5c
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/error/TabletAndDesktopErrorView.ui.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/AbstractEventComposite.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/AbstractEventComposite.java
new file mode 100644
index 00000000000..d34b2cb7cb5
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/AbstractEventComposite.java
@@ -0,0 +1,27 @@
+package com.sap.sailing.gwt.home.client.place.event;
+
+import com.google.gwt.user.client.ui.Composite;
+import com.sap.sailing.gwt.ui.shared.EventDTO;
+
+/**
+ * A base class for a content composite related to an sailing event
+ * @author Frank
+ *
+ */
+public class AbstractEventComposite extends Composite {
+ private final EventDTO event;
+ private final EventPageNavigator pageNavigator;
+
+ public AbstractEventComposite(EventDTO event, EventPageNavigator pageNavigator) {
+ this.event = event;
+ this.pageNavigator = pageNavigator;
+ }
+
+ public EventDTO getEvent() {
+ return event;
+ }
+
+ public EventPageNavigator getPageNavigator() {
+ return pageNavigator;
+ }
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivity.java
index 4c47059a9ef..f9e1fdbf044 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivity.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventActivity.java
@@ -9,12 +9,14 @@ import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
+import com.sap.sailing.gwt.home.client.shared.placeholder.Placeholder;
import com.sap.sailing.gwt.ui.regattaoverview.RegattaRaceStatesSettings;
import com.sap.sailing.gwt.ui.shared.EventDTO;
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.RaceGroupDTO;
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
+import com.sap.sse.gwt.client.mvp.ErrorView;
import com.sap.sse.gwt.client.player.TimeListener;
import com.sap.sse.gwt.client.player.Timer;
import com.sap.sse.gwt.client.player.Timer.PlayModes;
@@ -30,35 +32,47 @@ public class EventActivity extends AbstractActivity {
private final RegattaRaceStatesSettings raceStatesSettings;
private EventView view;
+ private EventDTO event;
public EventActivity(EventPlace place, EventClientFactory clientFactory) {
this.clientFactory = clientFactory;
this.eventPlace = place;
+ this.view = null;
+ this.event = null;
+
timerForClientServerOffset = new Timer(PlayModes.Replay);
serverUpdateTimer = new Timer(PlayModes.Live, serverUpdateRateInMs);
raceStatesSettings = new RegattaRaceStatesSettings();
- serverUpdateTimer.addTimeListener(new TimeListener() {
-
- @Override
- public void timeChanged(Date newTime, Date oldTime) {
- // loadAndUpdateEventRaceStatesLog();
- }
- });
}
@Override
public void start(final AcceptsOneWidget panel, final EventBus eventBus) {
+ panel.setWidget(new Placeholder());
+
final long clientTimeWhenRequestWasSent = System.currentTimeMillis();
UUID eventUUID = UUID.fromString(eventPlace.getEventUuidAsString());
- clientFactory.getSailingService().getEventById(eventUUID, new AsyncCallback() {
+ clientFactory.getSailingService().getEventById(eventUUID, true, new AsyncCallback() {
@Override
public void onSuccess(final EventDTO event) {
-
- clientFactory.getSailingService().getRegattaStructureForEvent(event.id, new AsyncCallback>() {
- @Override
- public void onSuccess(List raceGroups) {
+ loadRegattaStructure(panel, clientTimeWhenRequestWasSent, event);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ createErrorView("Error while loading the event with service getEventById()", caught, panel);
+ }
+ });
+ }
+
+ private void loadRegattaStructure(final AcceptsOneWidget panel, final long clientTimeWhenRequestWasSent, final EventDTO event) {
+ this.event = event;
+ if(event.getLeaderboardGroups().size() > 0) {
+ clientFactory.getSailingService().getRegattaStructureOfEvent(event.id, new AsyncCallback>() {
+ @Override
+ public void onSuccess(List raceGroups) {
+ if(raceGroups.size() > 0) {
for(LeaderboardGroupDTO leaderboardGroupDTO: event.getLeaderboardGroups()) {
final long clientTimeWhenResponseWasReceived = System.currentTimeMillis();
if (leaderboardGroupDTO.getAverageDelayToLiveInMillis() != null) {
@@ -66,51 +80,76 @@ public class EventActivity extends AbstractActivity {
}
timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, leaderboardGroupDTO.getCurrentServerTime(), clientTimeWhenResponseWasReceived);
}
-
- view = clientFactory.createEventView(event, raceGroups, eventPlace.getLeaderboardIdAsNameString(), timerForClientServerOffset);
- panel.setWidget(view.asWidget());
- }
-
- @Override
- public void onFailure(Throwable caught) {
- Window.alert("Shit happens at getRegattaStructureForEvent()");
- }
- });
- }
+ createEventView(event, raceGroups, panel);
- @Override
- public void onFailure(Throwable caught) {
- Window.alert("Shit happens at getRegattaStructureForEvent()");
- }
- });
+ if(event.isRunning()) {
+ // create update time for race states only for running events
+ serverUpdateTimer.addTimeListener(new TimeListener() {
+ @Override
+ public void timeChanged(Date newTime, Date oldTime) {
+ loadAndUpdateEventRaceStatesLog();
+ }
+ });
+ }
+
+ } else {
+ createEventWithoutRegattasView(event, panel);
+ }
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ createErrorView("Error while loading the regatta structure with service getRegattaStructureOfEvent()", caught, panel);
+ }
+ });
+ } else {
+ createEventWithoutRegattasView(event, panel);
+ }
+ }
+
+ private void createErrorView(String errorMessage, Throwable errorReason, AcceptsOneWidget panel) {
+ ErrorView view = clientFactory.createErrorView(errorMessage, errorReason);
+ panel.setWidget(view.asWidget());
+ }
+
+ private void createEventView(EventDTO event, List raceGroups, AcceptsOneWidget panel) {
+ view = clientFactory.createEventView(event, raceGroups, eventPlace.getLeaderboardIdAsNameString(), timerForClientServerOffset);
+ panel.setWidget(view.asWidget());
}
+ private void createEventWithoutRegattasView(EventDTO event, AcceptsOneWidget panel) {
+ // no leaderboard groups defined yet -> show a teaser page
+ EventWithoutRegattasView view = clientFactory.createEventWithoutRegattasView(event);
+ panel.setWidget(view.asWidget());
+ }
+
protected void loadAndUpdateEventRaceStatesLog() {
- final long clientTimeWhenRequestWasSent = System.currentTimeMillis();
- UUID eventUUID = UUID.fromString(eventPlace.getEventUuidAsString());
+ if(view != null && event != null) {
+ final long clientTimeWhenRequestWasSent = System.currentTimeMillis();
- clientFactory.getSailingService().getRaceStateEntriesForRaceGroup(eventUUID, raceStatesSettings.getVisibleCourseAreas(),
- raceStatesSettings.getVisibleRegattas(), raceStatesSettings.isShowOnlyCurrentlyRunningRaces(), raceStatesSettings.isShowOnlyRacesOfSameDay(),
- new MarkedAsyncCallback>(
- new AsyncCallback>() {
- @Override
- public void onFailure(Throwable cause) {
- Window.alert("Shit happens at getRaceStateEntriesForRaceGroup()");
- }
-
- @Override
- public void onSuccess(List result) {
- final long clientTimeWhenResponseWasReceived = System.currentTimeMillis();
- Date serverTimeDuringRequest = null;
- for (RegattaOverviewEntryDTO entryDTO : result) {
- if (entryDTO.currentServerTime != null) {
- serverTimeDuringRequest = entryDTO.currentServerTime;
- }
+ clientFactory.getSailingService().getRaceStateEntriesForRaceGroup(event.id, raceStatesSettings.getVisibleCourseAreas(),
+ raceStatesSettings.getVisibleRegattas(), raceStatesSettings.isShowOnlyCurrentlyRunningRaces(), raceStatesSettings.isShowOnlyRacesOfSameDay(),
+ new MarkedAsyncCallback>(
+ new AsyncCallback>() {
+ @Override
+ public void onFailure(Throwable cause) {
+ Window.setStatus("Error while loading the race states with service getRaceStateEntriesForRaceGroup()");
}
- view.updateEventRaceStates(result);
- timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest, clientTimeWhenResponseWasReceived);
- }
- }));
+
+ @Override
+ public void onSuccess(List result) {
+ final long clientTimeWhenResponseWasReceived = System.currentTimeMillis();
+ Date serverTimeDuringRequest = null;
+ for (RegattaOverviewEntryDTO entryDTO : result) {
+ if (entryDTO.currentServerTime != null) {
+ serverTimeDuringRequest = entryDTO.currentServerTime;
+ }
+ }
+ view.updateEventRaceStates(result);
+ timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest, clientTimeWhenResponseWasReceived);
+ }
+ }));
+ }
}
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventClientFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventClientFactory.java
index 7d07e0c4625..6d79fe73c60 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventClientFactory.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventClientFactory.java
@@ -9,4 +9,6 @@ import com.sap.sse.gwt.client.player.Timer;
public interface EventClientFactory extends SailingClientFactory {
EventView createEventView(EventDTO event, List raceGroups, String leaderboardName, Timer timerForClientServerOffset);
+
+ EventWithoutRegattasView createEventWithoutRegattasView(EventDTO event);
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPageNavigator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPageNavigator.java
index 24fdcdaccc1..f61b6f9234d 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPageNavigator.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPageNavigator.java
@@ -10,7 +10,8 @@ public interface EventPageNavigator {
void goToRegattas();
void goToSchedule();
void goToMedia();
- void goToRegattaRaces(RaceGroupDTO raceGroup, StrippedLeaderboardDTO leaderboard);
+ void goToRegattaRaces(LeaderboardGroupDTO leaderboardGroup, StrippedLeaderboardDTO leaderboard, RaceGroupDTO raceGroup);
void openRaceViewer(StrippedLeaderboardDTO leaderboard, RaceDTO race);
+ void openOverallLeaderboardViewer(LeaderboardGroupDTO leaderboardGroup);
void openLeaderboardViewer(LeaderboardGroupDTO leaderboardGroup, StrippedLeaderboardDTO leaderboard);
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPlace.java
index 81c9450c1ad..3a90c9bb2e5 100755
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPlace.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventPlace.java
@@ -6,16 +6,30 @@ import com.sap.sailing.gwt.home.client.AbstractBasePlace;
public class EventPlace extends AbstractBasePlace {
private final String eventUuidAsString;
private final String leaderboardIdAsNameString;
+ private final NavigationTabs navigationTab;
+
+ private final static String PARAM_EVENTID = "eventId";
+ private final static String PARAM_LEADEROARD_NAME = "leaderboardName";
+ private final static String PARAM_NAVIGATION_TAB = "navigationTab";
+
+ public enum NavigationTabs { Overview, Regattas, Regatta, Media, Schedule };
public EventPlace(String url) {
super(url);
- eventUuidAsString = getParameter("eventId");
- leaderboardIdAsNameString = getParameter("leaderboardName");
+ eventUuidAsString = getParameter(PARAM_EVENTID);
+ leaderboardIdAsNameString = getParameter(PARAM_LEADEROARD_NAME);
+ String paramNavTab = getParameter(PARAM_NAVIGATION_TAB);
+ if(paramNavTab != null) {
+ navigationTab = NavigationTabs.valueOf(paramNavTab);
+ } else {
+ navigationTab = NavigationTabs.Regattas;
+ }
}
- public EventPlace(String eventUuidAsString, String leaderboardIdAsNameString) {
- super("eventId", eventUuidAsString, "leaderboardName", leaderboardIdAsNameString);
+ public EventPlace(String eventUuidAsString, NavigationTabs navigationTab, String leaderboardIdAsNameString) {
+ super(PARAM_EVENTID, eventUuidAsString, PARAM_NAVIGATION_TAB, navigationTab.name(), PARAM_LEADEROARD_NAME, leaderboardIdAsNameString);
this.eventUuidAsString = eventUuidAsString;
+ this.navigationTab = navigationTab;
this.leaderboardIdAsNameString = leaderboardIdAsNameString;
}
@@ -27,6 +41,10 @@ public class EventPlace extends AbstractBasePlace {
return leaderboardIdAsNameString;
}
+ public NavigationTabs getNavigationTab() {
+ return navigationTab;
+ }
+
public static class Tokenizer implements PlaceTokenizer {
@Override
public String getToken(EventPlace place) {
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventWithoutRegattasView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventWithoutRegattasView.java
new file mode 100644
index 00000000000..24eacd20417
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/EventWithoutRegattasView.java
@@ -0,0 +1,7 @@
+package com.sap.sailing.gwt.home.client.place.event;
+
+import com.google.gwt.user.client.ui.Widget;
+
+public interface EventWithoutRegattasView {
+ Widget asWidget();
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventView.java
index adc9629fa21..73d7a3d87fe 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventView.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventView.java
@@ -6,13 +6,19 @@ import java.util.List;
import java.util.Map;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.place.shared.Place;
+import com.google.gwt.place.shared.PlaceTokenizer;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
+import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
import com.sap.sailing.domain.common.dto.RaceDTO;
+import com.sap.sailing.gwt.home.client.place.event.EventPlace.NavigationTabs;
+import com.sap.sailing.gwt.home.client.app.PlaceNavigator;
import com.sap.sailing.gwt.home.client.place.event.header.EventHeader;
import com.sap.sailing.gwt.home.client.place.event.media.EventMedia;
import com.sap.sailing.gwt.home.client.place.event.overview.EventOverview;
@@ -28,7 +34,7 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
import com.sap.sailing.gwt.ui.shared.RaceGroupDTO;
import com.sap.sailing.gwt.ui.shared.RegattaOverviewEntryDTO;
import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
-import com.sap.sse.common.Util.Pair;
+import com.sap.sse.common.Util.Triple;
import com.sap.sse.gwt.client.player.Timer;
public class TabletAndDesktopEventView extends Composite implements EventView, EventPageNavigator {
@@ -47,62 +53,45 @@ public class TabletAndDesktopEventView extends Composite implements EventView, E
@UiField EventSponsors eventSponsors;
private final List pageElements;
- private final Map> leaderboardsWithLeaderboardGroup;
+ private final EventDTO event;
public TabletAndDesktopEventView(SailingServiceAsync sailingService, EventDTO event, List raceGroups, String leaderboardName,
- Timer timerForClientServerOffset) {
- leaderboardsWithLeaderboardGroup = new HashMap>();
- for(LeaderboardGroupDTO leaderboardGroup: event.getLeaderboardGroups()) {
- for(StrippedLeaderboardDTO leaderboard: leaderboardGroup.getLeaderboards()) {
- leaderboardsWithLeaderboardGroup.put(leaderboard.name, new Pair(leaderboard, leaderboardGroup));
- }
- }
-
+ Timer timerForClientServerOffset, PlaceNavigator navigator) {
+ this.event = event;
+ Map> regattaStructure = getRegattaStructure(event, raceGroups);
+
eventHeader = new EventHeader(event, this);
- eventRegattaList = new EventRegattaList(event, raceGroups, leaderboardsWithLeaderboardGroup, timerForClientServerOffset, this);
- eventRegattaRaces = new EventRegattaRaces(event, timerForClientServerOffset, this);
- eventOverview = new EventOverview(event);
- eventSchedule = new EventSchedule(event);
- eventMedia = new EventMedia(event);
+ eventRegattaList = new EventRegattaList(event, regattaStructure, timerForClientServerOffset, navigator, this);
+ eventRegattaRaces = new EventRegattaRaces(event, timerForClientServerOffset, navigator, this);
+ eventOverview = new EventOverview(event, this);
+ eventSchedule = new EventSchedule(event, this);
+ eventMedia = new EventMedia(event, this);
initWidget(uiBinder.createAndBindUi(this));
pageElements = Arrays.asList(new Widget[] { eventOverview, eventRegattaList, eventRegattaRaces, eventMedia, eventSchedule });
- int leaderboardsCount = raceGroups.size();
- if(leaderboardsCount == 0) {
- Window.alert("There is no data available for this event.");
+ Triple selectedRegatta = null;
+ if(leaderboardName != null) {
+ selectedRegatta = regattaStructure.get(leaderboardName);
+ }
+
+ // in case we only have one regatta/leaderboard we go directly to the 'races' page
+ if(selectedRegatta == null && regattaStructure.size() == 1) {
+ selectedRegatta = regattaStructure.get(0);
+ }
+
+ if(selectedRegatta != null && !event.isFakeSeries()) {
+ goToRegattaRaces(selectedRegatta.getC(), selectedRegatta.getB(), selectedRegatta.getA());
} else {
- RaceGroupDTO selectedRaceGroup = null;
-
- // find the preselected leaderboard (if one exist)
- if (leaderboardName != null) {
- for (RaceGroupDTO raceGroup : raceGroups) {
- if(raceGroup.getName().equals(leaderboardName)) {
- selectedRaceGroup = raceGroup;
- break;
- }
- }
- }
-
- // in case we only have one regatta/leaderboard we go directly to the 'races' page
- if(selectedRaceGroup == null && leaderboardsCount == 1) {
- selectedRaceGroup = raceGroups.get(0);
- }
-
- if(selectedRaceGroup != null) {
- goToRegattaRaces(selectedRaceGroup, leaderboardsWithLeaderboardGroup.get(selectedRaceGroup.getName()).getA());
- } else {
- goToRegattas();
- }
- if(event.getSponsorImageURLs() != null && event.getSponsorImageURLs().size() > 0) {
- eventSponsors.setVisible(false);
- eventSponsors.setEventSponsors(event.getSponsorImageURLs());
- } else {
- eventSponsors.setVisible(false);
- eventSponsors.setEventSponsors(null);
- }
-
+ goToRegattas();
+ }
+ if(event.getSponsorImageURLs() != null && event.getSponsorImageURLs().size() > 0) {
+ eventSponsors.setVisible(false);
+ eventSponsors.setEventSponsors(event.getSponsorImageURLs());
+ } else {
+ eventSponsors.setVisible(false);
+ eventSponsors.setEventSponsors(null);
}
}
@@ -115,31 +104,46 @@ public class TabletAndDesktopEventView extends Composite implements EventView, E
public void goToOverview() {
setVisibleEventElement(eventOverview);
eventHeader.setDataNavigationType("normal");
+
+ EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Overview, null);
+ pushPlaceToHistoryStack(place, new EventPlace.Tokenizer());
}
@Override
public void goToRegattas() {
setVisibleEventElement(eventRegattaList);
eventHeader.setDataNavigationType("normal");
+
+ EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Regattas, null);
+ pushPlaceToHistoryStack(place, new EventPlace.Tokenizer());
}
@Override
- public void goToRegattaRaces(RaceGroupDTO raceGroup, StrippedLeaderboardDTO leaderboard) {
- eventRegattaRaces.setRacesFromRaceGroup(raceGroup, leaderboard);
+ public void goToRegattaRaces(LeaderboardGroupDTO leaderboardGroup, StrippedLeaderboardDTO leaderboard, RaceGroupDTO raceGroup) {
+ eventRegattaRaces.setRaces(leaderboardGroup, false, leaderboard, raceGroup);
eventHeader.setDataNavigationType("compact");
setVisibleEventElement(eventRegattaRaces);
+
+ EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Regatta, leaderboard.name);
+ pushPlaceToHistoryStack(place, new EventPlace.Tokenizer());
}
@Override
public void goToSchedule() {
setVisibleEventElement(eventSchedule);
eventHeader.setDataNavigationType("normal");
+
+ EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Schedule, null);
+ pushPlaceToHistoryStack(place, new EventPlace.Tokenizer());
}
@Override
public void goToMedia() {
setVisibleEventElement(eventMedia);
eventHeader.setDataNavigationType("normal");
+
+ EventPlace place = new EventPlace(event.id.toString(), NavigationTabs.Media, null);
+ pushPlaceToHistoryStack(place, new EventPlace.Tokenizer());
}
@Override
@@ -155,11 +159,31 @@ public class TabletAndDesktopEventView extends Composite implements EventView, E
Window.open(link, "_blank", "");
}
+ @Override
+ public void openOverallLeaderboardViewer(LeaderboardGroupDTO leaderboardGroup) {
+ String link = EntryPointLinkFactory.createLeaderboardLink(createOverallLeaderboardLinkParameters(leaderboardGroup));
+ Window.open(link, "_blank", "");
+ }
+
+ private Map createOverallLeaderboardLinkParameters(LeaderboardGroupDTO leaderboardGroup) {
+ Map linkParams = new HashMap();
+ linkParams.put("eventId", event.id.toString());
+ linkParams.put("name", leaderboardGroup.getName() + " " + LeaderboardNameConstants.OVERALL);
+ linkParams.put("showRaceDetails", "true");
+ if(leaderboardGroup.getDisplayName() != null) {
+ linkParams.put("displayName", leaderboardGroup.getDisplayName());
+ }
+ linkParams.put("leaderboardGroupName", leaderboardGroup.getName());
+ return linkParams;
+ }
+
private Map createRaceBoardLinkParameters(String leaderboardName, RegattaAndRaceIdentifier raceIdentifier) {
Map linkParams = new HashMap();
+ linkParams.put("eventId", event.id.toString());
linkParams.put("leaderboardName", leaderboardName);
linkParams.put("raceName", raceIdentifier.getRaceName());
- linkParams.put(RaceBoardViewConfiguration.PARAM_CAN_REPLAY_DURING_LIVE_RACES, "true");
+ // TODO this must only be forwarded if there is a logged-on user
+// linkParams.put(RaceBoardViewConfiguration.PARAM_CAN_REPLAY_DURING_LIVE_RACES, "true");
linkParams.put(RaceBoardViewConfiguration.PARAM_VIEW_SHOW_MAPCONTROLS, "true");
linkParams.put(RaceBoardViewConfiguration.PARAM_VIEW_SHOW_NAVIGATION_PANEL, "true");
linkParams.put("regattaName", raceIdentifier.getRegattaName());
@@ -168,9 +192,9 @@ public class TabletAndDesktopEventView extends Composite implements EventView, E
private Map createLeaderboardLinkParameters(LeaderboardGroupDTO leaderboardGroup, StrippedLeaderboardDTO leaderboard) {
Map linkParams = new HashMap();
+ linkParams.put("eventId", event.id.toString());
linkParams.put("name", leaderboard.name);
linkParams.put("showRaceDetails", "true");
- linkParams.put("embedded", "true");
if (leaderboard.displayName != null) {
linkParams.put("displayName", leaderboard.displayName);
}
@@ -186,4 +210,26 @@ public class TabletAndDesktopEventView extends Composite implements EventView, E
}
}
+ private Map> getRegattaStructure(EventDTO event, List raceGroups) {
+ Map> result = new HashMap<>();
+ Map raceGroupsMap = new HashMap<>();
+ for (RaceGroupDTO raceGroup: raceGroups) {
+ raceGroupsMap.put(raceGroup.getName(), raceGroup);
+ }
+
+ for (LeaderboardGroupDTO leaderboardGroup : event.getLeaderboardGroups()) {
+ for(StrippedLeaderboardDTO leaderboard: leaderboardGroup.getLeaderboards()) {
+ String leaderboardName = leaderboard.name;
+ result.put(leaderboardName, new Triple(raceGroupsMap.get(leaderboardName),
+ leaderboard, leaderboardGroup));
+ }
+ }
+ return result;
+ }
+
+ private void pushPlaceToHistoryStack(T destinationPlace, PlaceTokenizer tokenizer) {
+ String placeHistoryToken = destinationPlace.getClass().getSimpleName() + ":" + tokenizer.getToken(destinationPlace);
+ History.newItem(placeHistoryToken, false);
+ }
+
}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventWithoutRegattasView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventWithoutRegattasView.java
new file mode 100644
index 00000000000..f140e40cbc6
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventWithoutRegattasView.java
@@ -0,0 +1,25 @@
+package com.sap.sailing.gwt.home.client.place.event;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+import com.sap.sailing.gwt.home.client.place.event.header.EventHeader;
+import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
+import com.sap.sailing.gwt.ui.shared.EventDTO;
+
+public class TabletAndDesktopEventWithoutRegattasView extends Composite implements EventWithoutRegattasView {
+ private static EventViewUiBinder uiBinder = GWT.create(EventViewUiBinder.class);
+
+ interface EventViewUiBinder extends UiBinder {
+ }
+
+ @UiField(provided=true) EventHeader eventHeader;
+
+ public TabletAndDesktopEventWithoutRegattasView(SailingServiceAsync sailingService, EventDTO event) {
+ eventHeader = new EventHeader(event);
+
+ initWidget(uiBinder.createAndBindUi(this));
+ }
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventWithoutRegattasView.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventWithoutRegattasView.ui.xml
new file mode 100644
index 00000000000..35264d68afd
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/TabletAndDesktopEventWithoutRegattasView.ui.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ .infoPanel {
+ height: 300px;
+ padding-top: 2em;
+ }
+
+
+
+
+
+ There is no information available about the regattas of this event yet.
+
+
+
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/CompactEventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/CompactEventHeader.java
new file mode 100644
index 00000000000..80ca5dac1ad
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/CompactEventHeader.java
@@ -0,0 +1,95 @@
+package com.sap.sailing.gwt.home.client.place.event.header;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.ImageElement;
+import com.google.gwt.dom.client.SpanElement;
+import com.google.gwt.dom.client.StyleInjector;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.ui.Anchor;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+import com.sap.sailing.gwt.home.client.app.PlaceNavigator;
+import com.sap.sailing.gwt.ui.shared.CourseAreaDTO;
+import com.sap.sailing.gwt.ui.shared.EventDTO;
+import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
+import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
+
+public class CompactEventHeader extends Composite {
+ private static CompactHeaderUiBinder uiBinder = GWT.create(CompactHeaderUiBinder.class);
+
+ interface CompactHeaderUiBinder extends UiBinder {
+ }
+
+ @UiField Anchor regattaLink;
+ @UiField Anchor regattaLink2;
+ @UiField ImageElement eventLogo;
+ @UiField SpanElement eventNameSpan;
+
+ private final EventDTO event;
+ private final PlaceNavigator placeNavigator;
+ private final String leaderboardName;
+
+ private final String defaultLogoUrl = "http://static.sapsailing.com/ubilabsimages/default/default_event_logo.jpg";
+
+ public CompactEventHeader(EventDTO event, String leaderboardName, PlaceNavigator placeNavigator) {
+ this.event = event;
+ this.leaderboardName = leaderboardName;
+ this.placeNavigator = placeNavigator;
+
+ EventHeaderResources.INSTANCE.css().ensureInjected();
+ StyleInjector.injectAtEnd("@media (min-width: 50em) { "+EventHeaderResources.INSTANCE.largeCss().getText()+"}");
+
+ initWidget(uiBinder.createAndBindUi(this));
+ updateUI();
+ }
+
+ private StrippedLeaderboardDTO findLeaderboardWithSameCourseArea(EventDTO event) {
+ for(LeaderboardGroupDTO leaderboardGroup: event.getLeaderboardGroups()) {
+ for(StrippedLeaderboardDTO leaderboard: leaderboardGroup.getLeaderboards()) {
+ for(CourseAreaDTO courseArea: event.venue.getCourseAreas()) {
+ if(leaderboard.defaultCourseAreaId != null && leaderboard.defaultCourseAreaId.equals(courseArea.id)) {
+ return leaderboard;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ private void updateUI() {
+ boolean isSeries = event.isFakeSeries();
+
+ String eventName = event.getName();
+ if(isSeries) {
+ LeaderboardGroupDTO leaderboardGroupDTO = event.getLeaderboardGroups().get(0);
+ eventName = leaderboardGroupDTO.getDisplayName() != null ? leaderboardGroupDTO.getDisplayName() : leaderboardGroupDTO.getName();
+
+ StrippedLeaderboardDTO leaderboardFittingToEvent = findLeaderboardWithSameCourseArea(event);
+ if(leaderboardFittingToEvent != null) {
+ } else {
+ }
+ } else {
+ }
+ eventNameSpan.setInnerText(eventName);
+ String logoUrl = event.getLogoImageURL() != null ? event.getLogoImageURL() : defaultLogoUrl;
+ eventLogo.setSrc(logoUrl);
+ }
+
+ @UiHandler("regattaLink")
+ void gotoRegattaClicked(ClickEvent event) {
+ showRegattaOfEvent();
+ }
+
+ @UiHandler("regattaLink2")
+ void gotoRegatta2Clicked(ClickEvent event) {
+ showRegattaOfEvent();
+ }
+
+ private void showRegattaOfEvent() {
+ placeNavigator.goToRegattaOfEvent(event.id.toString(), leaderboardName, event.getBaseURL(), event.isOnRemoteServer());
+ }
+
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/CompactEventHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/CompactEventHeader.ui.xml
new file mode 100644
index 00000000000..f9f591e74e7
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/CompactEventHeader.ui.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.css b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.css
index d39b7c45b44..222152e00aa 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.css
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.css
@@ -1,10 +1,7 @@
-/**
- * The header of the pages to an event
- */
.dropdown {
- font-size: 16px;
+ font-size: 15px;
font-size: 1rem;
- width: 18.75em;
+ width: 20em;
max-width: 100%;
display: inline-block;
text-align: left;
@@ -17,9 +14,9 @@
cursor: pointer;
background: #f8f8f8;
color: #666;
- height: 2.5625em;
- line-height: 2.5em;
- padding-left: 0.9375em;
+ height: 2.733333333333333em;
+ line-height: 2.666666666666667em;
+ padding-left: 1em;
font-weight: 700;
}
.dropdown_head_titlebutton {
@@ -30,18 +27,18 @@
z-index: 1;
background: #f6f9fc;
display: none;
- width: 18.75em;
+ width: 20em;
height: auto;
- max-height: 21.875em;
+ max-height: 23.333333333333332em;
overflow: auto;
- -webkit-box-shadow: 0 0.0625em 0.25em #ccc;
- box-shadow: 0 0.0625em 0.25em #ccc;
+ -webkit-box-shadow: 0 0.066666666666667em 0.266666666666667em #ccc;
+ box-shadow: 0 0.066666666666667em 0.266666666666667em #ccc;
border-bottom: solid 1px #ccc;
}
.dropdown_content_link {
display: block;
cursor: pointer;
- padding: 1.25em 0.9375em;
+ padding: 1.333333333333333em 1em;
border-bottom: 1px solid #ddd;
}
.dropdown_content_link:hover,
@@ -57,19 +54,19 @@
color: #008fcc;
display: block;
font-weight: 700;
- font-size: 1.125em;
+ font-size: 1.2em;
}
.dropdown_content_link_subtitle {
color: #666;
- font-size: 1em;
+ font-size: 1.066666666666667em;
}
.leaderboardquickaccess {
- font-size: 16px;
+ font-size: 15px;
font-size: 1rem;
text-align: right;
}
.eventheaderwrapper {
- font-size: 16px;
+ font-size: 15px;
font-size: 1rem;
}
.eventheaderwrapper[data-navigationtype='compact'] .eventheader,
@@ -87,35 +84,43 @@
transition: top 0.4s;
}
.eventheader {
- font-size: 16px;
+ font-size: 15px;
font-size: 1rem;
background: #f2f2f2;
- padding: 1.875em 0;
+ padding: 2em 0;
+ border-bottom: 1px solid darkgray;
}
.eventheader_intro {
- padding-left: 9.6875em;
- min-height: 8.75em;
+ padding-left: 10.333333333333334em;
+ min-height: 9.333333333333334em;
position: relative;
}
.eventheader_intro_description {
- font-size: 16px;
+ font-size: 15px;
font-size: 1rem;
}
.eventheader_intro_logo {
- border: solid 5px #fff;
-webkit-box-shadow: 0 0 5px rgba(204,204,204,0.25);
box-shadow: 0 0 5px rgba(204,204,204,0.25);
position: absolute;
top: 0;
left: 0;
+ max-width: 140px;
+ max-height: 140px;
+ width: auto;
+ height: auto;
+}
+.eventheader_intro_logo_image {
+ border: solid 5px #fff;
+ max-height: 100%;
}
.eventheader_intro_name {
display: inline-block;
- margin: 0 0.3125em 0 0;
+ margin: 0 0.333333333333333em 0 0;
}
.eventheader_intro_details {
- margin-bottom: 0.625em;
- padding-bottom: 0.625em;
+ margin-bottom: 0.666666666666667em;
+ padding-bottom: 0.666666666666667em;
border-bottom: 1px solid #ddd;
font-weight: 600;
color: #333;
@@ -123,8 +128,8 @@
.eventheader_intro_details_item {
display: inline-block;
border-right: 1px solid #ddd;
- padding: 0.25em 0.625em 0.25em 0;
- margin-right: 0.625em;
+ padding: 0.266666666666667em 0.666666666666667em 0.266666666666667em 0;
+ margin-right: 0.666666666666667em;
}
.eventheader_intro_details_itemlink {
color: inherit;
@@ -146,9 +151,9 @@
}
.eventheader_sharing_item {
display: inline-block;
- height: 2.5em;
- width: 2.5em;
- margin-left: 0.3125em;
+ height: 2.666666666666667em;
+ width: 2.666666666666667em;
+ margin-left: 0.333333333333333em;
background-position: center center;
background-repeat: no-repeat;
}
@@ -156,22 +161,59 @@
background-color: #f0ab00;
background-image: url("images/home/email-icon.png");
}
+.eventheader_sharing_itememail:hover,
+.eventheader_sharing_itememail:focus {
+ background-color: #d89a00;
+}
.eventheader_sharing_itemtwitter {
background-color: #32b5e2;
background-image: url("images/home/twitter-icon.png");
}
+.eventheader_sharing_itemtwitter:hover,
+.eventheader_sharing_itemtwitter:focus {
+ background-color: #1faada;
+}
.eventheader_sharing_itemfacebook {
background-color: #3b5998;
background-image: url("images/home/facebook-icon.png");
}
+.eventheader_sharing_itemfacebook:hover,
+.eventheader_sharing_itemfacebook:focus {
+ background-color: #355089;
+}
.locationicon {
vertical-align: text-bottom;
- margin-right: 0.3125em;
+ margin-right: 0.333333333333333em;
}
.eventnavigation {
- font-size: 16px;
+ font-size: 15px;
font-size: 1rem;
- padding: 1.875em 0;
+}
+.eventnavigationnormal {
+ position: relative;
+}
+.eventnavigationcompact,
+.eventnavigationcompactfloating {
+ background: #f2f2f2;
+ margin: 0;
+ padding: 1em 0;
+}
+.eventnavigationcompact_logo,
+.eventnavigationcompactfloating_logo {
+ border: solid 2px #fff;
+ -webkit-box-shadow: 0 0 5px rgba(204,204,204,0.25);
+ box-shadow: 0 0 5px rgba(204,204,204,0.25);
+ margin-right: 0.666666666666667em;
+}
+.eventnavigationcompactfloating {
+ position: fixed;
+ top: -8em;
+ left: 0;
+ right: 0;
+ z-index: 5;
+}
+.eventnavigationcompactfloating.eventnavigationfixed {
+ top: 0;
}
.eventnavigation_link {
text-transform: uppercase;
@@ -188,30 +230,4 @@
.eventnavigation_linkactive:hover,
.eventnavigation_linkactive:focus {
background-color: #d89a00;
-}
-.eventnavigationnormal {
- border-bottom: 1px solid #f2f2f2;
-}
-.eventnavigationcompact,
-.eventnavigationcompactfloating {
- background: #f2f2f2;
- margin: 0;
- padding: 0.9375em 0;
-}
-.eventnavigationcompact_logo,
-.eventnavigationcompactfloating_logo {
- border: solid 2px #fff;
- -webkit-box-shadow: 0 0 5px rgba(204,204,204,0.25);
- box-shadow: 0 0 5px rgba(204,204,204,0.25);
- margin-right: 0.625em;
-}
-.eventnavigationcompactfloating {
- position: fixed;
- top: -5em;
- left: 0;
- right: 0;
- z-index: 5;
-}
-.eventnavigationcompactfloating.eventnavigationfixed {
- top: 0;
-}
+}
\ No newline at end of file
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.java
index 8039adc309a..8a9e58dff39 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.java
@@ -4,25 +4,30 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.ImageElement;
import com.google.gwt.dom.client.SpanElement;
+import com.google.gwt.dom.client.Style.Display;
+import com.google.gwt.dom.client.StyleInjector;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
+import com.sap.sailing.gwt.home.client.app.PlaceNavigator;
+import com.sap.sailing.gwt.home.client.i18n.TextMessages;
+import com.sap.sailing.gwt.home.client.place.event.AbstractEventComposite;
import com.sap.sailing.gwt.home.client.place.event.EventPageNavigator;
import com.sap.sailing.gwt.home.client.shared.EventDatesFormatterUtil;
+import com.sap.sailing.gwt.ui.shared.CourseAreaDTO;
import com.sap.sailing.gwt.ui.shared.EventDTO;
+import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
+import com.sap.sailing.gwt.ui.shared.StrippedLeaderboardDTO;
-public class EventHeader extends Composite {
+public class EventHeader extends AbstractEventComposite {
private static EventHeaderUiBinder uiBinder = GWT.create(EventHeaderUiBinder.class);
interface EventHeaderUiBinder extends UiBinder {
}
- private final EventDTO event;
-
// @UiField Anchor overviewLink;
@UiField Anchor regattasLink;
// @UiField Anchor scheduleLink;
@@ -37,34 +42,37 @@ public class EventHeader extends Composite {
// @UiField Anchor regattasLink3;
// @UiField Anchor scheduleLink3;
// @UiField Anchor mediaLink3;
-
+ @UiField Anchor officalWebsiteAnchor;
+ @UiField Anchor twitterAnchor;
+ @UiField Anchor facebookAnchor;
+ @UiField DivElement seriesLeaderboardDiv;
+ @UiField Anchor seriesLeaderboardAnchor;
+
@UiField DivElement eventHeaderWrapperDiv;
- @UiField SpanElement eventName;
- @UiField SpanElement eventName2;
+ @UiField DivElement regattaNameInSeriesDiv;
+ @UiField SpanElement eventNameSpan;
+ @UiField SpanElement eventName2Span;
// @UiField SpanElement eventName3;
- @UiField SpanElement eventDate;
- @UiField SpanElement eventDescription;
- @UiField SpanElement venueName;
- @UiField SpanElement eventWebsite;
+ @UiField DivElement eventDateDiv;
+ @UiField DivElement eventDescriptionDiv;
+ @UiField SpanElement venueNameSpan;
+ @UiField DivElement isLiveDiv;
+ @UiField DivElement isFinishedDiv;
@UiField ImageElement eventLogo;
@UiField ImageElement eventLogo2;
// @UiField ImageElement eventLogo3;
- private final String defaultLogoUrl = "http://static.sapsailing.com/newhome/default_event_logo.png";
+ private final String defaultLogoUrl = "http://static.sapsailing.com/ubilabsimages/default/default_event_logo.jpg";
// private final List links1;
// private final List links2;
// private final List links3;
-
- private final EventPageNavigator pageNavigator;
public EventHeader(EventDTO event, EventPageNavigator pageNavigator) {
- this.event = event;
- this.pageNavigator = pageNavigator;
+ super(event, pageNavigator);
- EventHeaderResources.INSTANCE.css().ensureInjected();
- initWidget(uiBinder.createAndBindUi(this));
+ initResources();
// links1 = Arrays.asList(new Anchor[] { overviewLink, regattasLink, scheduleLink, mediaLink });
// links2 = Arrays.asList(new Anchor[] { overviewLink2, regattasLink2, scheduleLink2, mediaLink2 });
@@ -73,26 +81,118 @@ public class EventHeader extends Composite {
// setActiveLink(links2, overviewLink2);
// setActiveLink(links3, overviewLink3);
+ if(event.isRunning()) {
+ isFinishedDiv.getStyle().setDisplay(Display.NONE);
+ } else if (event.isFinished()) {
+ isLiveDiv.getStyle().setDisplay(Display.NONE);
+ } else {
+ isFinishedDiv.getStyle().setDisplay(Display.NONE);
+ isLiveDiv.getStyle().setDisplay(Display.NONE);
+ }
+
setDataNavigationType("normal");
updateUI();
}
+
+ public EventHeader(EventDTO event) {
+ super(event, null);
+
+ initResources();
+
+ isFinishedDiv.getStyle().setDisplay(Display.NONE);
+ isLiveDiv.getStyle().setDisplay(Display.NONE);
+
+ setDataNavigationType("normal");
+ updateUI();
+ }
+
+ public EventHeader(EventDTO event, PlaceNavigator placeNavigator) {
+ super(event, null);
+
+ initResources();
+
+ isFinishedDiv.getStyle().setDisplay(Display.NONE);
+ isLiveDiv.getStyle().setDisplay(Display.NONE);
+
+ setDataNavigationType("normal");
+ updateUI();
+ }
+
+ private void initResources() {
+ EventHeaderResources.INSTANCE.css().ensureInjected();
+ StyleInjector.injectAtEnd("@media (min-width: 50em) { "+EventHeaderResources.INSTANCE.largeCss().getText()+"}");
+
+ initWidget(uiBinder.createAndBindUi(this));
+ }
public void setDataNavigationType(String dataNavigationType) {
eventHeaderWrapperDiv.setAttribute("data-navigationtype", dataNavigationType);
}
+
+ private StrippedLeaderboardDTO findLeaderboardWithSameCourseArea(EventDTO event) {
+ for(LeaderboardGroupDTO leaderboardGroup: event.getLeaderboardGroups()) {
+ for(StrippedLeaderboardDTO leaderboard: leaderboardGroup.getLeaderboards()) {
+ for(CourseAreaDTO courseArea: event.venue.getCourseAreas()) {
+ if(leaderboard.defaultCourseAreaId != null && leaderboard.defaultCourseAreaId.equals(courseArea.id)) {
+ return leaderboard;
+ }
+ }
+ }
+ }
+ return null;
+ }
private void updateUI() {
- eventName.setInnerHTML(event.getName());
- eventName2.setInnerHTML(event.getName());
+ EventDTO event = getEvent();
+ boolean isSeries = event.isFakeSeries();
+
+ String eventName = event.getName();
+ if(isSeries) {
+ LeaderboardGroupDTO leaderboardGroupDTO = event.getLeaderboardGroups().get(0);
+ eventName = leaderboardGroupDTO.getDisplayName() != null ? leaderboardGroupDTO.getDisplayName() : leaderboardGroupDTO.getName();
+
+ StrippedLeaderboardDTO leaderboardFittingToEvent = findLeaderboardWithSameCourseArea(event);
+ if(leaderboardFittingToEvent != null) {
+ regattaNameInSeriesDiv.setInnerText(leaderboardFittingToEvent.displayName);
+ } else {
+ regattaNameInSeriesDiv.getStyle().setDisplay(Display.NONE);
+ }
+ } else {
+ seriesLeaderboardDiv.getStyle().setDisplay(Display.NONE);
+ regattaNameInSeriesDiv.getStyle().setDisplay(Display.NONE);
+ }
+
+ eventNameSpan.setInnerHTML(eventName);
+ eventName2Span.setInnerHTML(eventName);
// eventName3.setInnerHTML(event.getName());
- venueName.setInnerHTML(event.venue.getName());
- eventDate.setInnerHTML(EventDatesFormatterUtil.formatDateRangeWithYear(event.startDate, event.endDate));
+ venueNameSpan.setInnerHTML(event.venue.getName());
+ eventDateDiv.setInnerHTML(EventDatesFormatterUtil.formatDateRangeWithYear(event.startDate, event.endDate));
if(event.getDescription() != null) {
- eventDescription.setInnerHTML(event.getDescription());
+ eventDescriptionDiv.setInnerHTML(event.getDescription());
}
if(event.getOfficialWebsiteURL() != null) {
- eventWebsite.setInnerHTML(event.getOfficialWebsiteURL());
+ String title = event.getOfficialWebsiteURL();
+ if(title.startsWith("http://")) {
+ title = title.substring("http://".length(), title.length());
+ }
+ if(title.length() > 35) {
+ title = TextMessages.INSTANCE.officalEventWebsite();
+ }
+ officalWebsiteAnchor.setText(title);
+ officalWebsiteAnchor.setHref(event.getOfficialWebsiteURL());
+ } else {
+ officalWebsiteAnchor.setVisible(false);
+ }
+ if(event.getTwitterURL() != null) {
+ twitterAnchor.setHref(event.getTwitterURL());
+ } else {
+ twitterAnchor.setVisible(false);
+ }
+ if(event.getFacebookURL() != null) {
+ facebookAnchor.setHref(event.getFacebookURL());
+ } else {
+ facebookAnchor.setVisible(false);
}
String logoUrl = event.getLogoImageURL() != null ? event.getLogoImageURL() : defaultLogoUrl;
@@ -133,13 +233,20 @@ public class EventHeader extends Composite {
showRegattas();
}
+ @UiHandler("seriesLeaderboardAnchor")
+ void seriesLeaderboardClicked(ClickEvent clickevent) {
+ if(getEvent().isFakeSeries()) {
+ getPageNavigator().openOverallLeaderboardViewer(getEvent().getLeaderboardGroups().get(0));
+ }
+ }
+
// @UiHandler("regattasLink3")
// void regattas3Clicked(ClickEvent event) {
// showRegattas();
// }
//
private void showRegattas() {
- pageNavigator.goToRegattas();
+ getPageNavigator().goToRegattas();
// setActiveLink(links1, regattasLink);
// setActiveLink(links2, regattasLink2);
// setActiveLink(links3, regattasLink3);
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.ui.xml
index a3f9dab8703..f02e2b9342d 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.ui.xml
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/client/place/event/header/EventHeader.ui.xml
@@ -5,6 +5,23 @@
+
+ .action {
+ float: right;
+ text-align: center;
+ text-transform: uppercase;
+ cursor: pointer;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ .action_link {
+ background-color: #008FCC;
+ color: white;
+ }
+ .action_link:hover {
+ background-color: #0177ab;
+ }
+
@@ -12,29 +29,45 @@