diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractEntryPoint.java index 864d1907332..16b8f5b9e13 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/AbstractEntryPoint.java @@ -19,8 +19,7 @@ import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.VerticalPanel; -public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter { - +public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter, WindowSizeDetector { private DialogBox errorDialogBox; private HTML serverResponseLabel; private Button dialogCloseButton; @@ -76,13 +75,14 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter { } } - protected boolean isSmallWidth() { + @Override + public boolean isSmallWidth() { int width = Window.getClientWidth(); return width <= 720; } public void createErrorPage(String message) { - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages, isSmallWidth()); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages, this); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); RootPanel.get().add(logoAndTitlePanel); RootPanel.get().add(new Label(message)); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java index f9d30cd7d78..80677279e28 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/LogoAndTitlePanel.java @@ -4,34 +4,55 @@ import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.RequiresResize; -public class LogoAndTitlePanel extends FlowPanel { - protected Label titleLabel; - protected Label subTitleLabel; +public class LogoAndTitlePanel extends FlowPanel implements RequiresResize { + private final String title; + private final String subtitle; + private Label titleLabel; + private Label subTitleLabel; + private final Anchor sapLogo; + private boolean lastIsSmallWidth; + private final WindowSizeDetector windowSizeDetector; + private final StringMessages stringMessages; - public LogoAndTitlePanel(StringMessages stringConstants, boolean isSmallWidth) { - this(null, null, stringConstants, isSmallWidth); + public LogoAndTitlePanel(StringMessages stringConstants, WindowSizeDetector windowSizeDetector) { + this(null, null, stringConstants, windowSizeDetector); } - public LogoAndTitlePanel(String title, StringMessages stringConstants, boolean isSmallWidth) { - this(title, null, stringConstants, isSmallWidth); + public LogoAndTitlePanel(String title, StringMessages stringConstants, WindowSizeDetector windowSizeDetector) { + this(title, null, stringConstants, windowSizeDetector); } - public LogoAndTitlePanel(String title, String subTitle, StringMessages stringConstants, boolean isSmallWidth) { - Anchor sapLogo = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( + public LogoAndTitlePanel(String title, String subtitle, StringMessages stringMessages, WindowSizeDetector windowSizeDetector) { + this.title = title; + this.subtitle = subtitle; + this.stringMessages = stringMessages; + this.windowSizeDetector = windowSizeDetector; + lastIsSmallWidth = windowSizeDetector.isSmallWidth(); + sapLogo = new Anchor(new SafeHtmlBuilder().appendHtmlConstant( "").toSafeHtml()); sapLogo.setHref("http://www.sap.com"); sapLogo.addStyleName("sapLogo"); this.add(sapLogo); - if (!isSmallWidth) { + renderUI(); + } + + private void renderUI() { + for (int i=getWidgetCount()-1; i>=0; i--) { + if (getWidget(i) != sapLogo) { + remove(i); + } + } + if (!lastIsSmallWidth) { FlowPanel sailingAnalyticsLabelPanel = new FlowPanel(); - Label sailingAnalyticsLabel = new Label(stringConstants.sapSailingAnalytics()); + Label sailingAnalyticsLabel = new Label(stringMessages.sapSailingAnalytics()); sailingAnalyticsLabelPanel.add(sailingAnalyticsLabel); sailingAnalyticsLabelPanel.addStyleName("sailingAnalyticsLabelPanel"); sailingAnalyticsLabel.addStyleName("sailingAnalyticsLabel boldLabel"); this.add(sailingAnalyticsLabelPanel); } - if (!isSmallWidth && title != null) { + if (!lastIsSmallWidth && title != null) { FlowPanel titleLabelWrapper = new FlowPanel(); titleLabelWrapper.addStyleName("titleLabelWrapper"); titleLabel = new Label(title); @@ -39,10 +60,10 @@ public class LogoAndTitlePanel extends FlowPanel { titleLabelWrapper.add(titleLabel); this.add(titleLabelWrapper); } - if (subTitle != null) { - subTitleLabel = new Label(subTitle); + if (subtitle != null) { + subTitleLabel = new Label(subtitle); FlowPanel subTitleLabelWrapper = new FlowPanel(); - if (isSmallWidth) { + if (lastIsSmallWidth) { subTitleLabelWrapper.addStyleName("titleLabelWrapper"); subTitleLabel.addStyleName("titleLabelRight"); } else { @@ -72,5 +93,14 @@ public class LogoAndTitlePanel extends FlowPanel { if(subTitleLabel != null) { subTitleLabel.setText(subTitle); } + } + + @Override + public void onResize() { + if (windowSizeDetector.isSmallWidth() != lastIsSmallWidth) { + lastIsSmallWidth = windowSizeDetector.isSmallWidth(); + renderUI(); + } + } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java index b31da3f590a..f591079635f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardEntryPoint.java @@ -10,7 +10,6 @@ import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.DockLayoutPanel; -import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RootLayoutPanel; import com.google.gwt.user.client.ui.RootPanel; @@ -56,6 +55,7 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint { private static final String PARAM_NAME_LAST_N = "lastN"; private String leaderboardName; private String leaderboardGroupName; + private GlobalNavigationPanel globalNavigationPanel; @Override public void onModuleLoad() { @@ -95,10 +95,20 @@ public class LeaderboardEntryPoint extends AbstractEntryPoint { if (leaderboardDisplayName == null || leaderboardDisplayName.isEmpty()) { leaderboardDisplayName = leaderboardName; } - logoAndTitlePanel = new LogoAndTitlePanel(leaderboardGroupName, leaderboardDisplayName, stringMessages, isSmallWidth()); + globalNavigationPanel = new GlobalNavigationPanel(stringMessages, true, null, leaderboardGroupName); + logoAndTitlePanel = new LogoAndTitlePanel(leaderboardGroupName, leaderboardDisplayName, stringMessages, this) { + @Override + public void onResize() { + super.onResize(); + if (isSmallWidth()) { + remove(globalNavigationPanel); + } else { + add(globalNavigationPanel); + } + } + }; logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); if (!isSmallWidth()) { - FlowPanel globalNavigationPanel = new GlobalNavigationPanel(stringMessages, true, null, leaderboardGroupName); logoAndTitlePanel.add(globalNavigationPanel); } mainPanel.addNorth(logoAndTitlePanel, 68); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java index 7848dee0fa6..e560d1ef505 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboardedit/LeaderboardEditPage.java @@ -19,7 +19,7 @@ public class LeaderboardEditPage extends AbstractEntryPoint { public void onSuccess(List leaderboardNames) { String leaderboardName = Window.Location.getParameter("name"); if (leaderboardNames.contains(leaderboardName)) { - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.editScores(), stringMessages, isSmallWidth()); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(stringMessages.editScores(), stringMessages, LeaderboardEditPage.this); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); EditableLeaderboardPanel leaderboardPanel = new EditableLeaderboardPanel(sailingService, new AsyncActionsExecutor(), leaderboardName, null, LeaderboardEditPage.this, stringMessages, userAgent); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java index e32f37b7e76..608116c8f16 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardEntryPoint.java @@ -36,6 +36,8 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint { private String leaderboardGroupName; private RaceBoardViewModes viewMode; + private GlobalNavigationPanel globalNavigationPanel; + @Override public void onModuleLoad() { super.onModuleLoad(); @@ -172,10 +174,20 @@ public class RaceBoardEntryPoint extends AbstractEntryPoint { } private FlowPanel createLogoAndTitlePanel(RaceBoardPanel raceBoardPanel) { - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(regattaName, selectedRace.name, stringMessages, isSmallWidth()); + globalNavigationPanel = new GlobalNavigationPanel(stringMessages, true, leaderboardName, leaderboardGroupName); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(regattaName, selectedRace.name, stringMessages, this) { + @Override + public void onResize() { + super.onResize(); + if (isSmallWidth()) { + remove(globalNavigationPanel); + } else { + add(globalNavigationPanel); + } + } + }; logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); if (!isSmallWidth()) { - FlowPanel globalNavigationPanel = new GlobalNavigationPanel(stringMessages, true, leaderboardName, leaderboardGroupName); logoAndTitlePanel.add(globalNavigationPanel); } return logoAndTitlePanel; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/SpectatorEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/SpectatorEntryPoint.java index 47f11ae7fb0..56555c742a4 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/SpectatorEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/spectator/SpectatorEntryPoint.java @@ -56,7 +56,7 @@ public class SpectatorEntryPoint extends AbstractEntryPoint implements RegattaRe && Window.Location.getParameter("embedded").equalsIgnoreCase("true"); if (!embedded) { String title = groupName != null ? groupName : stringMessages.overview(); - LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(title, stringMessages, isSmallWidth()); + LogoAndTitlePanel logoAndTitlePanel = new LogoAndTitlePanel(title, stringMessages, this); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); FlowPanel globalNavigationPanel = new GlobalNavigationPanel(stringMessages, true, null, null); logoAndTitlePanel.add(globalNavigationPanel); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVEntryPoint.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVEntryPoint.java index 8f172e04ac5..bee0de9626d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVEntryPoint.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/tv/TVEntryPoint.java @@ -58,7 +58,7 @@ public class TVEntryPoint extends AbstractEntryPoint { if(leaderboardDisplayName == null || leaderboardDisplayName.isEmpty()) { leaderboardDisplayName = leaderboardName; } - logoAndTitlePanel = new LogoAndTitlePanel(leaderboardGroupName, leaderboardDisplayName, stringMessages, isSmallWidth()); + logoAndTitlePanel = new LogoAndTitlePanel(leaderboardGroupName, leaderboardDisplayName, stringMessages, this); logoAndTitlePanel.addStyleName("LogoAndTitlePanel"); mainPanel.addNorth(logoAndTitlePanel, 68); }