mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 19:33:52 +00:00
introduction of a new interface "IsEmbeddableComponent" to enable UI components to render either as standalone view or as an embedded view (e.g. toolbar is rendered inside an external panel)
This commit is contained in:
1 parent
8d8207443d
commit
670cf133be
8 files changed
+99
-78
No files matched your search
@@ -200,6 +200,11 @@ input.magnifier {
|
||||
.collapsablePanel-closed {
|
||||
}
|
||||
|
||||
.collapsablePanel-header-toolbar {
|
||||
align: right;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.raceBoardPanelHeader {
|
||||
|
||||
}
|
||||
|
||||
+49
-18
@@ -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<LeaderboardSettings>, CompetitorSelectionChangeListener {
|
||||
Component<LeaderboardSettings>, 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<ExpandableSortableColumn<?>> columnsToExpandAgain = new ArrayList<ExpandableSortableColumn<?>>();
|
||||
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) {
|
||||
|
||||
+11
-4
@@ -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<SettingsType> implements ComponentViewer
|
||||
|
||||
private final StringMessages stringMessages;
|
||||
|
||||
private boolean hasHeaderToolbar = false;
|
||||
private boolean hasHeaderToolbar = true;
|
||||
|
||||
public CollapsableComponentViewer(Component<SettingsType> component, String defaultWidth, String defaultHeight, StringMessages stringMessages) {
|
||||
this.component = component;
|
||||
@@ -53,9 +54,15 @@ public class CollapsableComponentViewer<SettingsType> implements ComponentViewer
|
||||
collapsablePanel.setOpen(true);
|
||||
|
||||
if(hasHeaderToolbar) {
|
||||
ComponentToolbar<SettingsType> toolbar = new ComponentToolbar<SettingsType>(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<SettingsType> toolbar = new ComponentToolbar<SettingsType>(component, stringMessages);
|
||||
toolbar.addSettingsButton();
|
||||
collapsablePanel.setHeaderToolbar(toolbar);
|
||||
}
|
||||
}
|
||||
|
||||
contentPanel.setSize(defaultContentWidth, defaultContentHeight);
|
||||
|
||||
+1
-27
@@ -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<RaceBoardSettings>, 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<RaceBoardSett
|
||||
return timePanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Widget getEntryWidget() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public void updateSettings(RaceBoardSettings result) {
|
||||
|
||||
}
|
||||
|
||||
protected SailingServiceAsync getSailingService() {
|
||||
return sailingService;
|
||||
}
|
||||
@@ -185,21 +174,6 @@ public class RaceBoardPanel extends FormPanel implements Component<RaceBoardSett
|
||||
return errorReporter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLocalizedShortName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSettings() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SettingsDialogComponent<RaceBoardSettings> getSettingsDialogComponent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillEvents(List<EventDTO> events) {
|
||||
racesByIdentifier.clear();
|
||||
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
package com.sap.sailing.gwt.ui.raceboard;
|
||||
|
||||
public class RaceBoardSettings {
|
||||
|
||||
}
|
||||
-2
@@ -57,6 +57,4 @@ public class SimpleComponentGroup<SettingsType> implements ComponentGroup<Settin
|
||||
public Iterable<Component<?>> getComponents() {
|
||||
return components;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+19
-22
@@ -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}, <code>null</code> 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() {
|
||||
|
||||
+14
@@ -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();
|
||||
}
|
||||
Reference in new issue
Block a user