Initial commit of live races ui (work in progress)

This commit is contained in:
Benjamin Barth committed 2015-05-11 10:56:57 +02:00
1 parent 42eed4d004
commit d49d41974e
12 files changed
+742 -1

No files matched your search

@@ -0,0 +1,197 @@
/**
* Races List Live
*/
.race {
color: #333;
font-size: 1rem;
overflow: hidden;
}
.race:last-of-type .race_item {
border: none;
}
.race_fleetcorner {
width: 1em;
vertical-align: top;
border-bottom: 1px solid #ebebeb;
}
.race_fleetcorner_icon {
width: 1em;
margin-right: -2.333333333333333em;
position: relative;
top: 1px;
left: 1px;
border-style: solid;
border-color: transparent;
border-width: 1em 1em 0 0;
}
.race_item {
text-align: left;
vertical-align: baseline;
border-bottom: 1px solid #ebebeb;
white-space: nowrap;
padding: 1.4em 0.666666666666667em 0.733333333333333em 1.333333333333333em;
}
.race_item .button {
white-space: nowrap;
}
.race_item:first-of-type {
padding-left: 2em;
}
.race_itemrank:after {
content: '.';
}
.race_itemshort {
width: 5em;
}
.race_itemlong {
width: 32.5%;
}
.race_itemwind {
white-space: nowrap;
}
.race_itemname {
font-weight: 600;
}
.race_itemname:before {
content: '';
border-style: solid;
border-color: transparent;
border-width: 1em 1em 0 0;
float: left;
margin-left: -2em;
-webkit-transform: translateY(-1.4em);
-moz-transform: translateY(-1.4em);
-ms-transform: translateY(-1.4em);
transform: translateY(-1.4em);
}
.race_itemwinner {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
vertical-align: middle;
min-width: 13.333333333333334em;
max-width: 16.666666666666668em;
}
.race_item_flag {
max-width: 1.6em;
max-height: 1.6em;
vertical-align: middle;
}
.race_item_position {
margin-right: 0.333333333333333em;
}
.race_item_winner {
margin-left: 5px;
vertical-align: middle;
}
.race_itemwinner {
padding: 0.733333333333333em 1.333333333333333em;
}
.race_itemcenter {
text-align: center;
}
.race_itemright {
text-align: right;
vertical-align: middle;
padding-left: 0;
padding-right: 0.666666666666667em;
padding-top: 0.666666666666667em;
}
.race_itemright_button {
padding: 0.666666666666667em;
}
.race_itemstatus {
position: relative;
font-weight: inherit;
}
.race_itemstatus_progressbar {
height: 3px;
position: relative;
top: 3px;
max-width: 5.333333333333333em;
background-color: #dedede;
}
.race_itemstatus_progressbar_progress {
height: 100%;
background-color: #efaa00;
}
.racewinners .race_item {
padding: 1.2em 0.666666666666667em 1.2em 1.333333333333333em;
}
.racewinners .race_item:nth-last-child(1) {
display: none;
}
@media (min-width: 61em) {
.racewinners .race_item:nth-last-child(1) {
display: inline-block;
}
}
.racewinners .race_itemname {
vertical-align: middle;
}
.race_fleetcornerblue:before {
border-top-color: #00f;
}
.race_fleetcornerred:before {
border-top-color: #f00;
}
.race_fleetcornersilver:before {
border-top-color: #c0c0c0;
}
.race_fleetcornergold:before {
border-top-color: #ffd700;
}
.race_fleetcorneryellow:before {
border-top-color: #ff0;
}
.raceslist {
width: 100%;
font-size: 1rem;
margin-top: 1em;
border: 1px solid #dedede;
border-radius: 0.333333333333333em;
border-spacing: 0;
border-collapse: separate;
}
.raceslist_head {
color: #666;
background-color: #f2f2f2;
border-bottom: 1px solid #dedede;
text-transform: uppercase;
font-weight: 600;
border-radius: 0.333333333333333em 0 0 0.333333333333333em;
}
.raceslist_head_item {
padding: 0.666666666666667em 0.666666666666667em 0.666666666666667em 1.333333333333333em;
text-align: left;
}
.raceslist_head_item img {
max-width: none;
}
.raceslist_head_item:first-of-type {
padding-left: 2em;
}
.raceslist_head_itemicon {
text-align: center;
vertical-align: middle;
}
.raceslist_head_itemflag {
max-width: 1.6em;
max-height: 1.6em;
vertical-align: middle;
}
.raceslist_head_item_winner {
margin-left: 0.333333333333333em;
}
.raceslist_head_itemcenter {
text-align: center;
}
.raceslist_head_itemright {
text-align: right;
}
.raceslist_head_itembutton {
width: 14.666666666666666em;
}
.raceslistlive {
font-size: 1rem;
}
@@ -0,0 +1,37 @@
package com.sap.sailing.gwt.home.client.place.event.partials.raceListLive;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.TableElement;
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.regatta.tabs.reload.RefreshableWidget;
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRaceDTO;
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRacesDTO;
public class RacesListLive extends Composite implements RefreshableWidget<LiveRacesDTO> {
private static RacesListLiveUiBinder uiBinder = GWT.create(RacesListLiveUiBinder.class);
interface RacesListLiveUiBinder extends UiBinder<Widget, RacesListLive> {
}
@UiField TableElement table;
@UiField RacesListLiveHead listHead;
public RacesListLive() {
RacesListLiveResources.INSTANCE.css().ensureInjected();
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void setData(LiveRacesDTO data, long nextUpdate, int updateNo) {
table.removeAllChildren();
table.appendChild(listHead.getElement());
for (LiveRaceDTO race : data.getRaces()) {
table.appendChild(new RacesListLiveRow(race).getElement());
}
}
}
@@ -0,0 +1,19 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared"
xmlns:r="urn:import:com.sap.sailing.gwt.home.client.place.event.partials.raceListLive">
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
<ui:with field="i18n_ubi" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources" />
<g:HTMLPanel>
<div class="{local_res.css.raceslistlive}">
<h3>
TODO <!-- <ui:text from='{i18n_ubi.i18nRegattaListviewLiveNow}' /> -->
</h3>
<table class="{local_res.css.raceslist}" ui:field="table">
<r:RacesListLiveHead ui:field="listHead"/>
</table>
</div>
</g:HTMLPanel>
</ui:UiBinder>
@@ -0,0 +1,18 @@
package com.sap.sailing.gwt.home.client.place.event.partials.raceListLive;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
public class RacesListLiveHead extends Composite {
private static RacesListLiveHeadUiBinder uiBinder = GWT.create(RacesListLiveHeadUiBinder.class);
interface RacesListLiveHeadUiBinder extends UiBinder<Widget, RacesListLiveHead> {
}
public RacesListLiveHead() {
initWidget(uiBinder.createAndBindUi(this));
}
}
@@ -0,0 +1,48 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared"
xmlns:r="urn:import:com.sap.sailing.gwt.home.client.place.event.partials.raceListLive">
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
<ui:with field="i18n_ubi" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources" />
<g:HTMLPanel tag="thead">
<tr class="{local_res.css.raceslist_head}">
<th class="{local_res.css.raceslist_head_item}">
</th>
<th class="{local_res.css.raceslist_head_item}">
<ui:text from='{i18n.regatta}' />
</th>
<th class="{local_res.css.raceslist_head_item}">
<ui:text from='{i18n.race}' />
</th>
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.showonlarge}">
<ui:text from='{i18n.fleet}' />
</th>
<th class="{local_res.css.raceslist_head_item}">
<ui:text from='{i18n.start}' />
</th>
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.showonlarge}">
TODOFLAG <!-- <ui:text from='{i18n.flag}' /> -->
</th>
<th class="{local_res.css.raceslist_head_item}">
<ui:text from='{i18n.wind}' />
</th>
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.hideonsmall}">
<ui:text from='{i18n.from}' />
</th>
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.showonlarge}">
TODOAREA <!-- <ui:text from='{i18n.area}' /> -->
</th>
<th class="{local_res.css.raceslist_head_item} {res.mediaCss.showonlarge}">
<ui:text from='{i18n.course}' />
</th>
<th class="{local_res.css.raceslist_head_item}">
<ui:text from='{i18n.status}' />
</th>
<th class="{local_res.css.raceslist_head_item} {local_res.css.raceslist_head_itembutton}">
TODOWATCH <!-- <ui:text from='{i18n_ubi.i18nRegattaHeadersButton}' /> -->
</th>
</tr>
</g:HTMLPanel>
</ui:UiBinder>
@@ -0,0 +1,51 @@
package com.sap.sailing.gwt.home.client.place.event.partials.raceListLive;
import com.google.gwt.core.client.GWT;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
public interface RacesListLiveResources extends ClientBundle {
public static final RacesListLiveResources INSTANCE = GWT.create(RacesListLiveResources.class);
@Source("RacesListLive.gss")
LocalCss css();
public interface LocalCss extends CssResource {
String race();
String race_item();
String race_fleetcorner();
String race_fleetcorner_icon();
String button();
String race_itemrank();
String race_itemshort();
String race_itemlong();
String race_itemwind();
String race_itemname();
String race_itemwinner();
String race_item_flag();
String race_item_position();
String race_item_winner();
String race_itemcenter();
String race_itemright();
String race_itemright_button();
String race_itemstatus();
String race_itemstatus_progressbar();
String race_itemstatus_progressbar_progress();
String racewinners();
String race_fleetcornerblue();
String race_fleetcornerred();
String race_fleetcornersilver();
String race_fleetcornergold();
String race_fleetcorneryellow();
String raceslist();
String raceslist_head();
String raceslist_head_item();
String raceslist_head_itemicon();
String raceslist_head_itemflag();
String raceslist_head_item_winner();
String raceslist_head_itemcenter();
String raceslist_head_itemright();
String raceslist_head_itembutton();
String raceslistlive();
}
}
@@ -0,0 +1,78 @@
package com.sap.sailing.gwt.home.client.place.event.partials.raceListLive;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.AnchorElement;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.ImageElement;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.dom.client.TableCellElement;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
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.gwt.common.client.LinkUtil;
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRaceDTO;
public class RacesListLiveRow extends Composite {
private static RacesListLiveRowUiBinder uiBinder = GWT.create(RacesListLiveRowUiBinder.class);
interface RacesListLiveRowUiBinder extends UiBinder<Widget, RacesListLiveRow> {
}
@UiField DivElement fleetCorner;
@UiField TableCellElement regatta;
@UiField TableCellElement race;
@UiField TableCellElement fleetName;
@UiField TableCellElement start;
@UiField ImageElement flag;
@UiField TableCellElement wind;
@UiField TableCellElement from;
@UiField TableCellElement area;
@UiField TableCellElement course;
@UiField DivElement statusText;
@UiField DivElement statusProgress;
@UiField AnchorElement watchNowAnchor;
private DateTimeFormat startTimeFormat = DateTimeFormat.getFormat(PredefinedFormat.HOUR24_MINUTE);
public RacesListLiveRow(LiveRaceDTO raceData) {
initWidget(uiBinder.createAndBindUi(this));
initEventListener(raceData);
setData(raceData);
}
void setData(LiveRaceDTO raceData) {
fleetCorner.getStyle().setBorderColor(raceData.getFleetColor()); // TODO border-top-color!?
regatta.setInnerText(raceData.getRegattaName());
race.setInnerText(raceData.getRaceName());
fleetName.setInnerText(raceData.getFleetName());
start.setInnerText(raceData.getStart() == null ? "-" : startTimeFormat.format(raceData.getStart()));
// flag.setSrc(""); TODO
wind.setInnerText("TODO Wind");
from.setInnerText("TODO From");
area.setInnerText("TODO Area");
course.setInnerText("TODO Course");
statusText.setInnerText("TODO Status");
statusProgress.getStyle().setWidth(50, Unit.PCT);
}
private void initEventListener(final LiveRaceDTO raceData) {
Event.sinkEvents(watchNowAnchor, Event.ONCLICK);
Event.setEventListener(watchNowAnchor, new EventListener() {
@Override
public void onBrowserEvent(Event event) {
if (LinkUtil.handleLinkClick(event)) {
// TODO
Window.alert("Watch now: " + raceData.getRegattaName() + " " + raceData.getRaceName());
}
}
});
}
}
@@ -0,0 +1,38 @@
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared"
xmlns:r="urn:import:com.sap.sailing.gwt.home.client.place.event.partials.raceListLive">
<ui:with field="i18n" type="com.sap.sailing.gwt.ui.client.StringMessages" />
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
<ui:with field="i18n_ubi" type="com.sap.sailing.gwt.common.client.i18n.TextMessages" />
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources" />
<g:HTMLPanel tag="tbody">
<tr class="{local_res.css.race}">
<td class="{local_res.css.race_fleetcorner}">
<div style="border-top-color: blue" class="{local_res.css.race_fleetcorner_icon}" ui:field="fleetCorner"></div>
</td>
<td class="{local_res.css.race_item} {local_res.css.race_itemname}" ui:field="regatta"></td>
<td class="{local_res.css.race_item} {local_res.css.race_itemname}" ui:field="race"></td>
<td class="{local_res.css.race_item} {res.mediaCss.showonlarge}" ui:field="fleetName"></td>
<td class="{local_res.css.race_item}" ui:field="start"></td>
<td class="{local_res.css.race_item} {res.mediaCss.showonlarge}">
<img src="" class="{local_res.css.race_item_flag}" ui:field="flag"/>
</td>
<td class="{local_res.css.race_item}" ui:field="wind"></td>
<td class="{local_res.css.race_item} {res.mediaCss.hideonsmall}" ui:field="from"></td>
<td class="{local_res.css.race_item} {res.mediaCss.showonlarge}" ui:field="area"></td>
<td class="{local_res.css.race_item} {res.mediaCss.showonlarge}" ui:field="course"></td>
<td class="{local_res.css.race_item} {local_res.css.race_itemstatus}">
<div ui:field="statusText"></div>
<div class="{local_res.css.race_itemstatus_progressbar}">
<div class="{local_res.css.race_itemstatus_progressbar_progress}" ui:field="statusProgress"></div>
</div>
</td>
<td class="{local_res.css.race_item} {local_res.css.race_itemright}">
<a class="{res.mainCss.button} {res.mainCss.buttonstrong} {res.mainCss.buttonred} {res.mainCss.buttonarrowrightwhite}" ui:field="watchNowAnchor">
TODO <!-- <ui:text from='{i18n_ubi.i18nRegattaButtonsWatchNow}' /> -->
</a>
</td>
</tr>
</g:HTMLPanel>
</ui:UiBinder>
@@ -0,0 +1,77 @@
.cellTableWidget {
}
.cellTableFirstColumn {
}
.cellTableLastColumn {
}
.cellTableFooter {
}
.cellTableHeader {
}
.cellTableCell {
}
.cellTableFirstColumnFooter {
}
.cellTableFirstColumnHeader {
}
.cellTableLastColumnFooter {
}
.cellTableLastColumnHeader {
}
.cellTableSortableHeader {
}
.cellTableSortableHeader:hover {
}
.cellTableSortedHeaderAscending {
}
.cellTableSortedHeaderDescending {
}
.cellTableEvenRow {
}
.cellTableEvenRowCell {
}
.cellTableOddRow {
}
.cellTableOddRowCell {
}
.cellTableHoveredRow {
}
.cellTableHoveredRowCell {
}
.cellTableKeyboardSelectedRow {
}
.cellTableKeyboardSelectedRowCell {
}
.cellTableSelectedRow {
}
.cellTableSelectedRowCell {
}
.cellTableKeyboardSelectedCell {
}
.cellTableLoading {
}
@@ -0,0 +1,172 @@
package com.sap.sailing.gwt.home.client.place.event.partials.racelist;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.CellTable.Style;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.Header;
import com.google.gwt.user.cellview.client.RowStyles;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.cellview.client.TextHeader;
import com.google.gwt.user.client.ui.Composite;
import com.sap.sailing.gwt.common.client.SharedResources;
import com.sap.sailing.gwt.common.client.SharedResources.MediaCss;
import com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources;
import com.sap.sailing.gwt.home.client.place.event.partials.raceListLive.RacesListLiveResources.LocalCss;
import com.sap.sailing.gwt.home.client.place.event.regatta.tabs.reload.RefreshableWidget;
import com.sap.sailing.gwt.ui.client.StringMessages;
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRaceDTO;
import com.sap.sailing.gwt.ui.shared.dispatch.event.LiveRacesDTO;
public class RaceList extends Composite implements RefreshableWidget<LiveRacesDTO> {
private static final LocalCss CSS = RacesListLiveResources.INSTANCE.css();
private static final MediaCss MEDIA_CSS = SharedResources.INSTANCE.mediaCss();
private static final StringMessages I18N = StringMessages.INSTANCE;
private static final CustomResources RESOURCES = GWT.create(CustomResources.class);
private final CellTable<LiveRaceDTO> cellTable = new CellTable<LiveRaceDTO>(0, RESOURCES);
private final DateTimeFormat startTimeFormat = DateTimeFormat.getFormat(PredefinedFormat.HOUR24_MINUTE);
interface CustomResources extends CellTable.Resources {
@Override
@Source("RaceList.css")
public Style cellTableStyle();
}
public RaceList() {
CSS.ensureInjected();
cellTable.addStyleName(CSS.raceslist());
cellTable.setRowStyles(new RowStyles<LiveRaceDTO>() {
@Override
public String getStyleNames(LiveRaceDTO row, int rowIndex) {
return CSS.race();
}
});
initColumns();
initWidget(cellTable);
}
private void initColumns() {
TextColumn<LiveRaceDTO> fleetCornerColumn = new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return "";
}
};
fleetCornerColumn.setCellStyleNames(CSS.race_fleetcorner());
this.cellTable.addColumn(fleetCornerColumn, getStyledHeader(""));
this.cellTable.addColumn(getStyledColumn(new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return object.getRegattaName();
}
}, CSS.race_itemname()), getStyledHeader(I18N.regatta()));
this.cellTable.addColumn(getStyledColumn(new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return object.getRaceName();
}
}, CSS.race_itemname()), getStyledHeader(I18N.race()));
add(I18N.fleet(), new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return object.getFleetName();
}
}, MEDIA_CSS.showonlarge());
add(I18N.start(), new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return object.getStart() == null ? "-" : startTimeFormat.format(object.getStart());
}
});
add("TODO FLAG", new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return "TODO FLAG";
}
});
add(I18N.wind(), new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return "TODO WIND";
}
});
add(I18N.from(), new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return "TODO FROM";
}
}, MEDIA_CSS.hideonsmall());
add("TODO AREA", new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return "TODO AREA";
}
}, MEDIA_CSS.showonlarge());
add(I18N.course(), new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return "TODO COURSE";
}
}, MEDIA_CSS.showonlarge());
add(I18N.status(), new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return "TODO STATUS";
}
});
this.cellTable.addColumn(getStyledColumn(new TextColumn<LiveRaceDTO>() {
@Override
public String getValue(LiveRaceDTO object) {
return "TODO WATCH NOW";
}
}, CSS.race_itemright()), getStyledHeader("", CSS.raceslist_head_itembutton()));
}
private Header<?> getStyledHeader(String headerText, String... additionalStyles) {
Header<String> header = new TextHeader(headerText);
header.setHeaderStyleNames(createStyleNameString(CSS.raceslist_head_item(), additionalStyles));
return header;
}
private <C> Column<LiveRaceDTO, C> getStyledColumn(Column<LiveRaceDTO, C> column, String... additionalStyles) {
column.setCellStyleNames(createStyleNameString(CSS.race_item(), additionalStyles));
return column;
}
private void add(String headerText, Column<LiveRaceDTO, ?> column, String... mediaStyle) {
this.cellTable.addColumn(getStyledColumn(column, mediaStyle), getStyledHeader(headerText, mediaStyle));
}
private String createStyleNameString(String primaryStyle, String... additionalStyles) {
assert primaryStyle != null : "primaryStyle parameter cannot be null";
StringBuilder styleName = new StringBuilder(primaryStyle);
for (int i = 0; i < additionalStyles.length; i++) {
styleName.append(" ").append(additionalStyles[i]);
}
return styleName.toString();
}
@Override
public void setData(LiveRacesDTO data, long nextUpdate, int updateNo) {
this.cellTable.setRowData(data.getRaces());
this.cellTable.setPageSize(data.getRaces().size());
}
}
@@ -7,6 +7,7 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.sap.sailing.gwt.common.client.controls.tabbar.TabView;
import com.sap.sailing.gwt.home.client.place.event.partials.racelist.RaceList;
import com.sap.sailing.gwt.home.client.place.event.regatta.EventRegattaView;
import com.sap.sailing.gwt.home.client.place.event.regatta.EventRegattaView.Presenter;
import com.sap.sailing.gwt.home.client.place.event.regatta.RegattaTabView;
@@ -44,6 +45,7 @@ public class RegattaOverviewTabView extends Composite implements RegattaTabView<
// TODO CF
RefreshManager refreshManager = new RefreshManager(this, new AutomaticBatchingDispatch(new SimpleDispatch(null)));
refreshManager.add(raceList, new GetLiveRacesAction(currentPresenter.getCtx().getEventDTO().getId()));
refreshManager.add(liveRaces, new GetLiveRacesAction(currentPresenter.getCtx().getEventDTO().getId()));
refreshManager.add(content2, new OtherAction());
@@ -61,6 +63,7 @@ public class RegattaOverviewTabView extends Composite implements RegattaTabView<
private static MyBinder ourUiBinder = GWT.create(MyBinder.class);
private Presenter currentPresenter;
@UiField RaceList raceList;
@UiField LiveRacesContent liveRaces;
@UiField OtherContent content2;
@@ -1,10 +1,13 @@
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:o="urn:import:com.sap.sailing.gwt.home.client.place.event.regatta.tabs.overview">
xmlns:o="urn:import:com.sap.sailing.gwt.home.client.place.event.regatta.tabs.overview"
xmlns:r="urn:import:com.sap.sailing.gwt.home.client.place.event.partials.racelist">
<ui:with field="res" type="com.sap.sailing.gwt.common.client.SharedResources" />
<g:HTMLPanel>
<div class="{res.mediaCss.grid}">
<div class="{res.mediaCss.small12} {res.mediaCss.columns}">
<h2>Live Races</h2>
<r:RaceList ui:field="raceList"/>
<h2>Content 1</h2>
<o:LiveRacesContent ui:field="liveRaces" />
<h2>Content 2</h2>