diff --git a/java/com.sap.sailing.gwt.ui/RaceBoard.css b/java/com.sap.sailing.gwt.ui/RaceBoard.css index 82e94955551..1705e5230e9 100644 --- a/java/com.sap.sailing.gwt.ui/RaceBoard.css +++ b/java/com.sap.sailing.gwt.ui/RaceBoard.css @@ -200,6 +200,11 @@ input.magnifier { .collapsablePanel-closed { } +.collapsablePanel-header-toolbar { + align: right; + padding: 3px; +} + .raceBoardPanelHeader { } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java index 94397520b13..a296b889218 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/leaderboard/LeaderboardPanel.java @@ -58,6 +58,7 @@ import com.sap.sailing.gwt.ui.shared.LeaderboardRowDTO; import com.sap.sailing.gwt.ui.shared.LegEntryDTO; import com.sap.sailing.gwt.ui.shared.RaceInLeaderboardDTO; import com.sap.sailing.gwt.ui.shared.components.Component; +import com.sap.sailing.gwt.ui.shared.components.IsEmbeddableComponent; import com.sap.sailing.gwt.ui.shared.components.SettingsDialog; import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent; @@ -68,7 +69,7 @@ import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent; * */ public class LeaderboardPanel extends FormPanel implements TimeListener, PlayStateListener, - Component, CompetitorSelectionChangeListener { + Component, IsEmbeddableComponent, CompetitorSelectionChangeListener { private static final int RANK_COLUMN_INDEX = 0; private static final int SAIL_ID_COLUMN_INDEX = 1; @@ -157,6 +158,12 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta */ private final RaceIdentifier preSelectedRace; + private final VerticalPanel contentPanel; + private final DockPanel headerPanel; + private final HorizontalPanel refreshAndSettingsPanel; + + private boolean isEmbedded = false; + private class SettingsClickHandler implements ClickHandler { private final StringMessages stringConstants; @@ -175,6 +182,26 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta return this; } + @Override + public Widget getHeaderWidget() { + return headerPanel; + } + + @Override + public Widget getContentWidget() { + return contentPanel; + } + + @Override + public Widget getToolbarWidget() { + return refreshAndSettingsPanel; + } + + @Override + public boolean isEmbedded() { + return isEmbedded; + } + public void updateSettings(LeaderboardSettings newSettings) { List> columnsToExpandAgain = new ArrayList>(); for (int i = 0; i < getLeaderboardTable().getColumnCount(); i++) { @@ -769,16 +796,16 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta getLeaderboardTable().addColumnSortHandler(listHandler); loadCompleteLeaderboard(getLeaderboardDisplayDate()); - VerticalPanel vp = new VerticalPanel(); - DockPanel dockPanel = new DockPanel(); - DockPanel dockPanel02 = new DockPanel(); - dockPanel.setWidth("100%"); - dockPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); - dockPanel02.setWidth("100%"); - dockPanel02.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + contentPanel = new VerticalPanel(); + headerPanel = new DockPanel(); + DockPanel toolbarPanel = new DockPanel(); + headerPanel.setWidth("100%"); + headerPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); + toolbarPanel.setWidth("100%"); + toolbarPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); Label leaderboardLabel = new Label(stringConstants.leaderboard() + " " + leaderboardName.toUpperCase()); leaderboardLabel.addStyleName("leaderboardLabel boldLabel"); - dockPanel.add(leaderboardLabel, DockPanel.WEST); + headerPanel.add(leaderboardLabel, DockPanel.WEST); ClickHandler playPauseHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { @@ -790,15 +817,15 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta } } }; - HorizontalPanel refreshAndSettingsPanel = new HorizontalPanel(); + refreshAndSettingsPanel = new HorizontalPanel(); refreshAndSettingsPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); HorizontalPanel refreshPanel = new HorizontalPanel(); refreshPanel.setSpacing(5); refreshPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); refreshPanel.addStyleName("refreshPanel"); - dockPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); - dockPanel02.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); - dockPanel02.addStyleName("refreshAndSettings"); + headerPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); + toolbarPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); + toolbarPanel.addStyleName("refreshAndSettings"); playPause = new Anchor(getPlayPauseImgHtml(timer.isPlaying())); playPause.addClickHandler(playPauseHandler); playStateChanged(timer.isPlaying()); @@ -819,11 +846,15 @@ public class LeaderboardPanel extends FormPanel implements TimeListener, PlaySta refreshAndSettingsPanel.add(chartsAnchor); refreshAndSettingsPanel.add(refreshPanel); refreshAndSettingsPanel.add(settingsAnchor); - dockPanel02.add(refreshAndSettingsPanel, DockPanel.EAST); - vp.add(dockPanel); - vp.add(dockPanel02); - vp.add(getLeaderboardTable()); - setWidget(vp); + toolbarPanel.add(refreshAndSettingsPanel, DockPanel.EAST); + if(preSelectedRace == null) { + contentPanel.add(headerPanel); + contentPanel.add(toolbarPanel); + } else { + isEmbedded = true; + } + contentPanel.add(getLeaderboardTable()); + setWidget(contentPanel); } private SafeHtml getPlayPauseImgHtml(boolean playing) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/CollapsableComponentViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/CollapsableComponentViewer.java index be2d9151de6..ff14221ee5a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/CollapsableComponentViewer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/CollapsableComponentViewer.java @@ -8,6 +8,7 @@ import com.sap.sailing.gwt.ui.shared.components.Component; import com.sap.sailing.gwt.ui.shared.components.ComponentGroup; import com.sap.sailing.gwt.ui.shared.components.ComponentToolbar; import com.sap.sailing.gwt.ui.shared.components.ComponentViewer; +import com.sap.sailing.gwt.ui.shared.components.IsEmbeddableComponent; /** * A GWT component that visualizes a {@link ComponentGroup} or a {@link Component} including menus to scroll quickly to the embedded view @@ -24,7 +25,7 @@ public class CollapsableComponentViewer implements ComponentViewer private final StringMessages stringMessages; - private boolean hasHeaderToolbar = false; + private boolean hasHeaderToolbar = true; public CollapsableComponentViewer(Component component, String defaultWidth, String defaultHeight, StringMessages stringMessages) { this.component = component; @@ -53,9 +54,15 @@ public class CollapsableComponentViewer implements ComponentViewer collapsablePanel.setOpen(true); if(hasHeaderToolbar) { - ComponentToolbar toolbar = new ComponentToolbar(component, stringMessages); - toolbar.addSettingsButton(); - collapsablePanel.setHeaderToolbar(toolbar); + if(component instanceof IsEmbeddableComponent) { + IsEmbeddableComponent embeddableComponent = (IsEmbeddableComponent) component; + if(embeddableComponent.getToolbarWidget() != null) + collapsablePanel.setHeaderToolbar(embeddableComponent.getToolbarWidget()); + } else { + ComponentToolbar toolbar = new ComponentToolbar(component, stringMessages); + toolbar.addSettingsButton(); + collapsablePanel.setHeaderToolbar(toolbar); + } } contentPanel.setSize(defaultContentWidth, defaultContentHeight); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java index afc19e06f3d..f312987c2a7 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardPanel.java @@ -33,9 +33,7 @@ import com.sap.sailing.gwt.ui.leaderboard.LeaderboardSettings; import com.sap.sailing.gwt.ui.shared.EventDTO; import com.sap.sailing.gwt.ui.shared.RaceDTO; import com.sap.sailing.gwt.ui.shared.RegattaDTO; -import com.sap.sailing.gwt.ui.shared.components.Component; import com.sap.sailing.gwt.ui.shared.components.ComponentViewer; -import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent; /** * A panel showing a list of components visualizing a race from the events announced by calls to {@link #fillEvents(List)}. @@ -46,7 +44,7 @@ import com.sap.sailing.gwt.ui.shared.components.SettingsDialogComponent; * @author Frank Mittag, Axel Uhl (d043530) * */ -public class RaceBoardPanel extends FormPanel implements Component, EventDisplayer, RaceSelectionChangeListener { +public class RaceBoardPanel extends FormPanel implements EventDisplayer, RaceSelectionChangeListener { private final SailingServiceAsync sailingService; private final ErrorReporter errorReporter; private String raceBoardName; @@ -160,15 +158,6 @@ public class RaceBoardPanel extends FormPanel implements Component getSettingsDialogComponent() { - return null; - } - @Override public void fillEvents(List events) { racesByIdentifier.clear(); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardSettings.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardSettings.java deleted file mode 100644 index a063aa82270..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/RaceBoardSettings.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.sap.sailing.gwt.ui.raceboard; - -public class RaceBoardSettings { - -} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/SimpleComponentGroup.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/SimpleComponentGroup.java index ccbd90c1025..2090f992dd9 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/SimpleComponentGroup.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/raceboard/SimpleComponentGroup.java @@ -57,6 +57,4 @@ public class SimpleComponentGroup implements ComponentGroup> getComponents() { return components; } - - } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/components/CollapsablePanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/components/CollapsablePanel.java index d205b0066d3..04433c6064e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/components/CollapsablePanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/components/CollapsablePanel.java @@ -16,13 +16,10 @@ import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Grid; +import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HasAnimation; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasText; -import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HasWidgets; -import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.SimplePanel; @@ -173,6 +170,8 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI private static final String STYLENAME_HEADER = "collapsablePanel-header"; + private static final String STYLENAME_HEADER_TOOLBAR = "collapsablePanel-header-toolbar"; + private static final String STYLENAME_CONTENT = "collapsablePanel-content"; /** @@ -192,12 +191,12 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI private final SimplePanel contentWrapper = new SimplePanel(); /** - * holds the header widget. + * The wrapper around the header widget. */ -// private final DockPanel header = new DockPanel(); - - private final Grid header = new Grid(1,2); + private final SimplePanel headerWrapper = new SimplePanel(); + private final FlowPanel embeddedHeader = new FlowPanel(); + private final ClickableHeader clickableHeader = new ClickableHeader(); private boolean isAnimationEnabled = false; @@ -210,14 +209,7 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI private CollapsablePanel() { initWidget(mainPanel); - header.setWidth("100%"); -// header.getCellFormatter().setWidth(0, 0, "50%"); -// header.getCellFormatter().setWidth(0, 1, "50%"); - header.getCellFormatter().setAlignment(0, 0, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_MIDDLE); - header.getCellFormatter().setAlignment(0, 1, HasHorizontalAlignment.ALIGN_RIGHT, HasVerticalAlignment.ALIGN_MIDDLE); - - //header.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); - mainPanel.add(header); + mainPanel.add(headerWrapper); mainPanel.add(contentWrapper); DOM.setStyleAttribute(contentWrapper.getElement(), "padding", "0px"); DOM.setStyleAttribute(contentWrapper.getElement(), "overflow", "hidden"); @@ -252,12 +244,17 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI } private void setClickableHeader(Widget widget) { + clickableHeader.add(widget); - header.setWidget(0, 0, clickableHeader); + embeddedHeader.add(clickableHeader); + headerWrapper.setWidget(embeddedHeader); } - public void setHeaderToolbar(HorizontalPanel toolbar) { - header.setWidget(0, 1, toolbar); + public void setHeaderToolbar(Widget toolbar) { + + if (toolbar != null) { + embeddedHeader.add(toolbar); + } } public void add(Widget w) { @@ -304,7 +301,7 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI * @return the widget currently being used as a header */ public Widget getHeader() { - return header.asWidget(); + return headerWrapper.getWidget(); } /** @@ -314,7 +311,7 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI * @return a reference to the header widget if it implements {@link HasText}, null otherwise */ public HasText getHeaderTextAccessor() { - Widget widget = header.asWidget(); + Widget widget = headerWrapper.getWidget(); return (widget instanceof HasText) ? (HasText) widget : null; } @@ -408,7 +405,7 @@ public final class CollapsablePanel extends Composite implements HasWidgets.ForI @Override protected void onEnsureDebugId(String baseID) { super.onEnsureDebugId(baseID); - header.ensureDebugId(baseID + "-header"); + headerWrapper.ensureDebugId(baseID + "-header"); } private void fireEvent() { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/components/IsEmbeddableComponent.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/components/IsEmbeddableComponent.java new file mode 100644 index 00000000000..1a0d97c4c34 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/shared/components/IsEmbeddableComponent.java @@ -0,0 +1,14 @@ +package com.sap.sailing.gwt.ui.shared.components; + +import com.google.gwt.user.client.ui.Widget; + +public interface IsEmbeddableComponent { + + Widget getHeaderWidget(); + + Widget getContentWidget(); + + Widget getToolbarWidget(); + + boolean isEmbedded(); +}