ingo@4198: package de.intevation.flys.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.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: ingo@4198: import de.intevation.flys.client.client.FLYSConstants; ingo@4198: ingo@4198: ingo@4198: /** ingo@4198: * @author Ingo Weinzierl ingo@4198: */ ingo@4198: public class ClickableQDTable extends ListGrid { ingo@4198: ingo@4198: public static enum ClickMode { ingo@4198: NONE, SINGLE, RANGE ingo@4198: } ingo@4198: ingo@4198: public static interface QClickedListener { 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 QClickedListener qClickedListener; ingo@4198: private ClickMode clickMode; ingo@4198: ingo@4198: protected boolean lockClick; ingo@4198: ingo@4198: public ClickableQDTable() { ingo@4198: this.clickMode = ClickMode.NONE; ingo@4198: init(); ingo@4198: } ingo@4198: ingo@4198: public ClickableQDTable(QClickedListener qClickedListener, ingo@4198: ClickMode clickMode) { ingo@4198: this.qClickedListener = qClickedListener; ingo@4198: this.clickMode = clickMode; ingo@4198: init(); ingo@4198: } ingo@4198: ingo@4198: private void init() { ingo@4198: setWidth100(); ingo@4198: setHeight100(); ingo@4198: setSelectionType(SelectionStyle.SINGLE); ingo@4198: setSelectionType(SelectionStyle.SINGLE); ingo@4198: setShowHeaderContextMenu(false); ingo@4198: setShowRecordComponents(true); ingo@4198: setShowRecordComponentsByCell(true); ingo@4198: setEmptyMessage(MESSAGE.empty_table()); ingo@4198: ingo@4198: ListGridField name = new ListGridField("name", MESSAGE.discharge()); 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("20%"); ingo@4198: ingo@4198: final NumberFormat nf = NumberFormat.getDecimalFormat(); ingo@4198: ingo@4198: ListGridField value = new ListGridField("value", MESSAGE.wq_value_q()); 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: value.setWidth("20%"); 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 select = new ListGridField("select", MESSAGE.selection()); ingo@4198: select.setType(ListGridFieldType.ICON); ingo@4198: select.setWidth(70); ingo@4198: select.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen()); ingo@4198: 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: ListGridRecord r = event.getRecord(); ingo@4198: fireLowerClickEvent(r.getAttributeAsDouble("value")); ingo@4198: } ingo@4198: } ingo@4198: }); ingo@4198: ingo@4198: setFields(select, name, type, value); ingo@4198: } ingo@4198: ingo@4198: private void initRangeClickMode(ListGridField name, ListGridField type, ingo@4198: ListGridField value) { ingo@4198: ListGridField addMin = new ListGridField("min", MESSAGE.to()); ingo@4198: addMin.setType(ListGridFieldType.ICON); ingo@4198: addMin.setWidth(30); ingo@4198: addMin.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerGreen()); ingo@4198: ingo@4198: ListGridField addMax = new ListGridField("max", MESSAGE.from()); ingo@4198: addMax.setType(ListGridFieldType.ICON); ingo@4198: addMax.setWidth(30); ingo@4198: addMax.setCellIcon(GWT.getHostPageBaseURL() + MESSAGE.markerRed()); ingo@4198: 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: ListGridRecord r = event.getRecord(); ingo@4198: fireLowerClickEvent(r.getAttributeAsDouble("value")); ingo@4198: } ingo@4198: ingo@4198: if (event.getColNum() == 1) { ingo@4198: ListGridRecord r = event.getRecord(); ingo@4198: fireUpperClickEvent(r.getAttributeAsDouble("value")); ingo@4198: } ingo@4198: } ingo@4198: }); ingo@4198: ingo@4198: setFields(addMin, addMax, name, type, value); ingo@4198: } ingo@4198: ingo@4198: private void fireLowerClickEvent(double value) { ingo@4198: if (qClickedListener != null) { ingo@4198: qClickedListener.clickedLower(value); ingo@4198: } ingo@4198: } ingo@4198: ingo@4198: private void fireUpperClickEvent(double value) { ingo@4198: if (qClickedListener != null) { ingo@4198: qClickedListener.clickedUpper(value); ingo@4198: } ingo@4198: } ingo@4198: } ingo@4198: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :