From 8fbfde3eb596fcaa74648d50afb46c3b092b9ad6 Mon Sep 17 00:00:00 2001 From: Armin Zamani Date: Sat, 22 Jun 2013 22:13:20 +0200 Subject: [PATCH] RegattaOverview: unified upper flag, lower flag and direction arrow to one column --- .../sailing/gwt/ui/client/StringMessages.java | 1 + .../gwt/ui/client/StringMessages.properties | 3 +- .../ui/client/StringMessages_de.properties | 3 +- .../gwt/ui/regattaoverview/FlagImageCell.java | 31 ---------- .../RegattaRaceStatesComponent.java | 49 ++++++--------- .../regattaoverview/SailingFlagsBuilder.java | 61 +++++++++++++++++++ 6 files changed, 86 insertions(+), 62 deletions(-) delete mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/FlagImageCell.java create mode 100644 java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/SailingFlagsBuilder.java diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index 3ca9f8b9093..90d8e6d9bc5 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -689,4 +689,5 @@ public interface StringMessages extends Messages { String competitorFilterExplanation(); String protestTimeFinishesAt(); String protestTimeFinishedAt(); + String flags(); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index d8ee8aef6b0..01d32cdefb9 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -681,4 +681,5 @@ dropReplicaConnection=Drop connection timePanelName=Time Control competitorFilterExplanation=The filter will show all competitors matching the criterias:dropReplicaConnection=Drop connection protestTimeFinishesAt=Protest time finishes at -protestTimeFinishedAt=Protest time finished at \ No newline at end of file +protestTimeFinishedAt=Protest time finished at +flags=Flags \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index 34669f00eb9..28ca54665ea 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -668,4 +668,5 @@ timePanelName=Zeitregler competitorFilterExplanation=Der Filter zeigt alle Teilnehmer, welche folgende Bedingungen erfüllen: The filter will show all competitors matching the criterias:dropReplicaConnection=Verbindung abbrechen protestTimeFinishesAt=Protestzeit endet um -protestTimeFinishedAt=Protestzeit beendet um \ No newline at end of file +protestTimeFinishedAt=Protestzeit beendet um +flags=Flaggen \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/FlagImageCell.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/FlagImageCell.java deleted file mode 100644 index 25b4eb2fb56..00000000000 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/FlagImageCell.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.sap.sailing.gwt.ui.regattaoverview; - -import java.util.Arrays; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.text.shared.SafeHtmlRenderer; -import com.sap.sailing.gwt.ui.client.StringMessages; -import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell; - -public class FlagImageCell extends ImagesBarCell { - static final String ACTION_EDIT = "ACTION_EDIT"; - private final StringMessages stringMessages; - private static RegattaRaceStatesFlagsResources resources = GWT.create(RegattaRaceStatesFlagsResources.class); - - public FlagImageCell(StringMessages stringConstants) { - super(); - this.stringMessages = stringConstants; - } - - public FlagImageCell(SafeHtmlRenderer renderer, StringMessages stringMessages) { - super(); - this.stringMessages = stringMessages; - } - - @Override - protected Iterable getImageSpecs() { - return Arrays.asList( - new ImageSpec(ACTION_EDIT, stringMessages.actionEdit(), makeImagePrototype(resources.flagAP())), - new ImageSpec(ACTION_EDIT, stringMessages.actionEdit(), makeImagePrototype(resources.arrowUp()))); - } -} \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaRaceStatesComponent.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaRaceStatesComponent.java index 197347521b1..b3982e253db 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaRaceStatesComponent.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/RegattaRaceStatesComponent.java @@ -10,7 +10,6 @@ import java.util.Map; import com.google.gwt.cell.client.ClickableTextCell; import com.google.gwt.cell.client.FieldUpdater; -import com.google.gwt.cell.client.ImageResourceCell; import com.google.gwt.cell.client.SafeHtmlCell; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; @@ -19,7 +18,6 @@ import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONValue; -import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; @@ -34,6 +32,7 @@ import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HasHorizontalAlignment; +import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.VerticalPanel; @@ -78,7 +77,6 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component private final SailingServiceAsync sailingService; private final StringMessages stringMessages; private final String eventIdAsString; - private final FlagImageResolver flagImageResolver; private EventDTO eventDTO; private List raceGroupDTOs; @@ -113,7 +111,6 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component this.sailingService = sailingService; this.stringMessages = stringMessages; this.eventIdAsString = eventIdAsString; - this.flagImageResolver = new FlagImageResolver(); this.allEntries = new ArrayList(); this.timerToSynchronize = timerToSynchronize; @@ -378,32 +375,28 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component }); raceCourseColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); - Column lastUpperFlagColumn = new Column( - new ImageResourceCell()) { - @Override - public ImageResource getValue(RegattaOverviewEntryDTO entryDTO) { - return flagImageResolver.resolveFlagToImage(entryDTO.raceInfo.lastUpperFlag); - } - }; + SafeHtmlCell flagsCell = new SafeHtmlCell(); + Column flagColumn = new Column(flagsCell) { - Column lastLowerFlagColumn = new Column( - new ImageResourceCell()) { @Override - public ImageResource getValue(RegattaOverviewEntryDTO entryDTO) { - return flagImageResolver.resolveFlagToImage(entryDTO.raceInfo.lastLowerFlag); - } - }; - - Column lastFlagDirectionColumn = new Column( - new ImageResourceCell()) { - @Override - public ImageResource getValue(RegattaOverviewEntryDTO entryDTO) { - if (entryDTO.raceInfo.lastUpperFlag != null) - return flagImageResolver.resolveFlagDirectionToImage(entryDTO.raceInfo.isLastFlagDisplayed); - else - return null; + public SafeHtml getValue(RegattaOverviewEntryDTO entryDTO) { + String tooltip = ""; + if (entryDTO.raceInfo.lastUpperFlag != null) { + tooltip = entryDTO.raceInfo.lastUpperFlag.name(); + if (entryDTO.raceInfo.lastLowerFlag != null) { + tooltip += " over " + entryDTO.raceInfo.lastLowerFlag.name(); + } + } + return SailingFlagsBuilder.render( + entryDTO.raceInfo.lastUpperFlag, + entryDTO.raceInfo.lastLowerFlag, + entryDTO.raceInfo.isLastFlagDisplayed, + tooltip); } + }; + flagColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); + flagColumn.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); TextColumn raceAdditionalInformationColumn = new TextColumn() { @Override @@ -456,9 +449,7 @@ public class RegattaRaceStatesComponent extends SimplePanel implements Component table.addColumn(raceStartTimeColumn, stringMessages.startTime()); table.addColumn(raceStatusColumn, stringMessages.status()); table.addColumn(raceCourseColumn, stringMessages.course()); - table.addColumn(lastUpperFlagColumn, stringMessages.lastUpperFlag()); - table.addColumn(lastLowerFlagColumn, stringMessages.lastLowerFlag()); - table.addColumn(lastFlagDirectionColumn, stringMessages.flagStatus()); + table.addColumn(flagColumn, stringMessages.flags()); table.addColumn(raceAdditionalInformationColumn, stringMessages.additionalInformation()); table.addColumnSortHandler(regattaOverviewListHandler); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/SailingFlagsBuilder.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/SailingFlagsBuilder.java new file mode 100644 index 00000000000..522f1bd7c01 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/regattaoverview/SailingFlagsBuilder.java @@ -0,0 +1,61 @@ +package com.sap.sailing.gwt.ui.regattaoverview; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.safecss.shared.SafeStyles; +import com.google.gwt.safecss.shared.SafeStylesUtils; +import com.google.gwt.safehtml.client.SafeHtmlTemplates; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; +import com.google.gwt.user.client.ui.AbstractImagePrototype; +import com.sap.sailing.domain.common.racelog.Flags; +import com.sap.sailing.gwt.ui.client.shared.components.ImagesBarCell; + +public class SailingFlagsBuilder { + + private final static SailingFlagsTemplates imageTemplate = GWT.create(SailingFlagsTemplates.class); + + interface SailingFlagsTemplates extends SafeHtmlTemplates { + /** + * @param title + * the tool-tip to display for the image on mouse-over + * @param upperFlag + * how to render the image; this needs to be an <img> tag, not enclosed by any other element, + * as returned by {@link ImagesBarCell#makeImagePrototype(ImageResource)} + */ + @SafeHtmlTemplates.Template("
{2}
{3}
{4}
") + SafeHtml cell(String title, SafeStyles styles, SafeHtml upperFlag, SafeHtml lowerFlag, SafeHtml directionArrow); + } + + protected static SailingFlagsTemplates getImageTemplate() { + return imageTemplate; + } + + protected static AbstractImagePrototype makeImagePrototype(ImageResource resource) { + return AbstractImagePrototype.create(resource); + } + + protected static SafeStyles getImageStyle() { + return SafeStylesUtils.fromTrustedString("float:left;padding-right:10px;"); + } + + public static SafeHtml render(Flags upperFlag, Flags lowerFlag, boolean isDisplayed, String tooltip) { + FlagImageResolver flagImageResolver = new FlagImageResolver(); + ImageResource upperFlagImage = flagImageResolver.resolveFlagToImage(upperFlag); + ImageResource lowerFlagImage = flagImageResolver.resolveFlagToImage(lowerFlag); + ImageResource directionImage = flagImageResolver.resolveFlagDirectionToImage(isDisplayed); + + SafeHtml upperFlagHtml = (upperFlagImage != null) ? makeImagePrototype(upperFlagImage).getSafeHtml() : SafeHtmlUtils.EMPTY_SAFE_HTML; + SafeHtml lowerFlagHtml = (lowerFlagImage != null) ? makeImagePrototype(lowerFlagImage).getSafeHtml() : SafeHtmlUtils.EMPTY_SAFE_HTML; + SafeHtml directionHtml = (upperFlagImage != null) ? makeImagePrototype(directionImage).getSafeHtml() : SafeHtmlUtils.EMPTY_SAFE_HTML; + + SafeHtmlBuilder builder = new SafeHtmlBuilder(); + SafeStyles imgStyle = getImageStyle(); + SafeHtml rendered = getImageTemplate().cell(tooltip, imgStyle, + upperFlagHtml, lowerFlagHtml, directionHtml); + builder.append(rendered); + return builder.toSafeHtml(); + } + +}