teichmann@5835: package org.dive4elements.river.client.client.ui.wq; ingo@4198: ingo@4198: import com.google.gwt.core.client.GWT; ingo@4198: import com.google.gwt.i18n.client.NumberFormat; ingo@4198: import com.smartgwt.client.data.Record; ingo@4198: import com.smartgwt.client.types.ListGridFieldType; ingo@4198: import com.smartgwt.client.types.SelectionStyle; ingo@4198: import com.smartgwt.client.widgets.grid.CellFormatter; ingo@4198: import com.smartgwt.client.widgets.grid.ListGrid; ingo@4198: import com.smartgwt.client.widgets.grid.ListGridField; ingo@4198: import com.smartgwt.client.widgets.grid.ListGridRecord; ingo@4198: import com.smartgwt.client.widgets.grid.events.CellClickEvent; ingo@4198: import com.smartgwt.client.widgets.grid.events.CellClickHandler; ingo@4198: teichmann@5835: import org.dive4elements.river.client.client.FLYSConstants; ingo@4198: ingo@4198: ingo@4198: public class ClickableWTable extends ListGrid { ingo@4198: ingo@4198: public static enum ClickMode { ingo@4198: NONE, SINGLE, RANGE ingo@4198: } ingo@4198: felix@5333: private boolean useWaterlevelLabel = false; felix@5333: ingo@4198: public static interface WClickedListener { ingo@4198: ingo@4198: void clickedLower(double value); ingo@4198: ingo@4198: void clickedUpper(double value); ingo@4198: } ingo@4198: ingo@4198: /** The message class that provides i18n strings. */ ingo@4198: protected FLYSConstants MESSAGE = GWT.create(FLYSConstants.class); ingo@4198: ingo@4198: private WClickedListener wClickedListener; ingo@4198: private ClickMode clickMode; ingo@4198: ingo@4198: public ClickableWTable() { ingo@4198: this.clickMode = ClickMode.NONE; ingo@4198: init(); ingo@4198: } ingo@4198: ingo@4198: public ClickableWTable(WClickedListener lowerListener, felix@5333: ClickMode selectionMode, boolean alternativeLabel) { ingo@4198: this.wClickedListener = lowerListener; ingo@4198: this.clickMode = selectionMode; felix@5333: this.useWaterlevelLabel = alternativeLabel; ingo@4198: init(); ingo@4198: } ingo@4198: ingo@4198: private void init() { ingo@4198: setWidth100(); ingo@4198: setHeight100(); ingo@4198: setSelectionType(SelectionStyle.NONE); ingo@4198: setSelectionType(SelectionStyle.NONE); ingo@4198: setShowHeaderContextMenu(false); ingo@4198: setShowRecordComponents(true); ingo@4198: setShowRecordComponentsByCell(true); ingo@4198: setEmptyMessage(MESSAGE.empty_table()); ingo@4198: felix@5333: ListGridField name = new ListGridField("name", felix@5333: useWaterlevelLabel ? MESSAGE.wq_waterlevel_label() : MESSAGE.name() ); ingo@4198: name.setType(ListGridFieldType.TEXT); ingo@4198: name.setWidth("*"); ingo@4198: ingo@4198: ListGridField type = new ListGridField("type", MESSAGE.type()); ingo@4198: type.setType(ListGridFieldType.TEXT); ingo@4198: type.setWidth("50"); ingo@4198: ingo@4198: final NumberFormat nf = NumberFormat.getDecimalFormat(); ingo@4198: ingo@4198: ListGridField value = new ListGridField("value", MESSAGE.wq_value_w()); ingo@4198: value.setType(ListGridFieldType.FLOAT); ingo@4198: value.setCellFormatter(new CellFormatter() { ingo@4198: ingo@4198: @Override ingo@4198: public String format(Object v, ListGridRecord r, int row, int col) { ingo@4198: if (v == null) { ingo@4198: return null; ingo@4198: } ingo@4198: ingo@4198: try { ingo@4198: double value = Double.valueOf(v.toString()); ingo@4198: return nf.format(value); ingo@4198: } ingo@4198: catch (NumberFormatException nfe) { ingo@4198: return v.toString(); ingo@4198: } ingo@4198: } ingo@4198: }); ingo@4198: ingo@4198: switch (clickMode) { ingo@4198: case NONE: ingo@4198: setFields(name, type, value); ingo@4198: break; ingo@4198: case SINGLE: ingo@4198: initSingleClickMode(name, type, value); ingo@4198: break; ingo@4198: case RANGE: ingo@4198: initRangeClickMode(name, type, value); ingo@4198: break; ingo@4198: } ingo@4198: } ingo@4198: ingo@4198: private void initSingleClickMode(ListGridField name, ListGridField type, ingo@4198: ListGridField value) { ingo@4198: ListGridField lower = new ListGridField("selection", ingo@4198: MESSAGE.selection()); ingo@4198: lower.setType(ListGridFieldType.ICON); ingo@4198: lower.setWidth("65"); ingo@4198: lower.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen()); ingo@4198: addCellClickHandler(new CellClickHandler() { ingo@4198: ingo@4198: @Override ingo@4198: public void onCellClick(CellClickEvent event) { ingo@4198: if (event.getColNum() == 0) { ingo@4198: Record r = event.getRecord(); ingo@4198: double val = r.getAttributeAsDouble("value"); ingo@4198: fireLowerClickEvent(val); ingo@4198: } ingo@4198: } ingo@4198: }); ingo@4198: ingo@4198: setFields(lower, name, type, value); ingo@4198: } ingo@4198: ingo@4198: private void initRangeClickMode(ListGridField name, ListGridField type, ingo@4198: ListGridField value) { ingo@4198: ListGridField lower = new ListGridField("lower", MESSAGE.lower()); ingo@4198: lower.setType(ListGridFieldType.ICON); ingo@4198: lower.setWidth("50"); ingo@4198: lower.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerRed()); ingo@4198: addCellClickHandler(new CellClickHandler() { ingo@4198: ingo@4198: @Override ingo@4198: public void onCellClick(CellClickEvent event) { ingo@4198: if (event.getColNum() == 0) { ingo@4198: Record r = event.getRecord(); ingo@4198: double val = r.getAttributeAsDouble("value"); ingo@4198: fireLowerClickEvent(val); ingo@4198: } ingo@4198: } ingo@4198: }); ingo@4198: ingo@4198: ListGridField upper = new ListGridField("upper", MESSAGE.upper()); ingo@4198: upper.setType(ListGridFieldType.ICON); ingo@4198: upper.setWidth("50"); ingo@4198: upper.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen()); ingo@4198: addCellClickHandler(new CellClickHandler() { ingo@4198: ingo@4198: @Override ingo@4198: public void onCellClick(CellClickEvent event) { ingo@4198: if (event.getColNum() == 1) { ingo@4198: Record r = event.getRecord(); ingo@4198: double val = r.getAttributeAsDouble("value"); ingo@4198: fireUpperClickEvent(val); ingo@4198: } ingo@4198: } ingo@4198: }); ingo@4198: ingo@4198: setFields(lower, upper, name, type, value); ingo@4198: } ingo@4198: ingo@4198: private void fireLowerClickEvent(double value) { ingo@4198: if (wClickedListener != null) { ingo@4198: wClickedListener.clickedLower(value); ingo@4198: } ingo@4198: } ingo@4198: ingo@4198: private void fireUpperClickEvent(double value) { ingo@4198: if (wClickedListener != null) { ingo@4198: wClickedListener.clickedUpper(value); ingo@4198: } ingo@4198: } ingo@4198: }