bjoern@3715: package de.intevation.flys.client.client.ui; bjoern@3715: bjoern@3828: import java.util.ArrayList; bjoern@3828: import java.util.Iterator; bjoern@3715: import java.util.List; bjoern@3715: bjoern@3715: import com.google.gwt.core.client.GWT; bjoern@3828: import com.google.gwt.i18n.client.NumberFormat; bjoern@3715: import com.google.gwt.user.client.rpc.AsyncCallback; bjoern@3839: import com.google.gwt.user.client.ui.Anchor; bjoern@3828: import com.google.gwt.user.client.ui.DecoratorPanel; bjoern@3828: import com.google.gwt.user.client.ui.Grid; bjoern@3828: import com.google.gwt.user.client.ui.HorizontalPanel; bjoern@3828: import com.google.gwt.user.client.ui.Label; bjoern@3828: import com.google.gwt.user.client.ui.ScrollPanel; bjoern@3715: import com.google.gwt.user.client.ui.Tree; bjoern@3715: import com.google.gwt.user.client.ui.TreeItem; bjoern@3715: bjoern@3715: import com.smartgwt.client.types.Overflow; bjoern@3828: import com.smartgwt.client.widgets.events.ResizedEvent; bjoern@3828: import com.smartgwt.client.widgets.events.ResizedHandler; bjoern@3828: import com.smartgwt.client.widgets.layout.HLayout; bjoern@3715: import com.smartgwt.client.widgets.layout.SectionStackSection; bjoern@3715: import com.smartgwt.client.widgets.layout.VLayout; bjoern@3715: bjoern@3715: import de.intevation.flys.client.client.FLYSConstants; bjoern@3715: import de.intevation.flys.client.client.services.GaugeOverviewInfoService; bjoern@3715: import de.intevation.flys.client.client.services.GaugeOverviewInfoServiceAsync; bjoern@3837: import de.intevation.flys.client.shared.model.Data; bjoern@3837: import de.intevation.flys.client.shared.model.DataItem; bjoern@3837: import de.intevation.flys.client.shared.model.DataList; bjoern@3715: import de.intevation.flys.client.shared.model.GaugeInfo; bjoern@3715: import de.intevation.flys.client.shared.model.RiverInfo; bjoern@3715: bjoern@3715: /** bjoern@3715: * The GaugePanel is intendet to be used within a SectionStackSection bjoern@3715: * It extends the VLayout by two methods to show and hide the bjoern@3715: * section stack section. bjoern@3715: */ bjoern@3825: public class GaugePanel extends VLayout implements ResizedHandler { bjoern@3715: bjoern@3715: /** SectionStackSection where this GaugePanel belongs in*/ bjoern@3715: private SectionStackSection sectionStack; bjoern@3715: bjoern@3715: /** Name of the river */ bjoern@3715: private String river; bjoern@3715: bjoern@3715: /** The message class that provides i18n strings.*/ bjoern@3715: protected FLYSConstants MSG = GWT.create(FLYSConstants.class); bjoern@3715: bjoern@3715: protected GaugeOverviewInfoServiceAsync gaugeOverviewInfoService = bjoern@3715: GWT.create(GaugeOverviewInfoService.class); bjoern@3715: bjoern@3825: protected GaugeTree gaugetree = new GaugeTree(); bjoern@3825: bjoern@3825: protected RiverInfoPanel riverinfopanel; bjoern@3825: bjoern@3715: /** bjoern@3715: * Creates a new VLayout with a SectionStackSection bjoern@3715: * The GaugePanel's SectionStackSection is hidden by default. bjoern@3715: * @param sectionStack The section stack section to place the VLayout in. bjoern@3715: */ bjoern@3715: public GaugePanel(SectionStackSection sectionStack) { bjoern@3825: setOverflow(Overflow.HIDDEN); bjoern@3828: sectionStack.setHidden(true); bjoern@3715: sectionStack.setItems(this); bjoern@3715: this.sectionStack = sectionStack; bjoern@3825: setStyleName("gaugepanel"); bjoern@3825: addResizedHandler(this); bjoern@3715: } bjoern@3715: bjoern@3828: /** bjoern@3828: * Sets and loads the river data if river is not the current set river bjoern@3828: */ bjoern@3715: public void setRiver(String river) { bjoern@3828: if (!river.equals(this.river)) { bjoern@3828: this.river = river; bjoern@3828: this.refresh(); bjoern@3828: } bjoern@3715: } bjoern@3715: bjoern@3715: /** bjoern@3837: * Sets the data and closes not corresponding folds in the gauge tree bjoern@3837: */ bjoern@3837: public void setData(DataList[] data) { bjoern@3837: gaugetree.setData(data); bjoern@3837: } bjoern@3837: bjoern@3837: /** bjoern@3715: * Loads the river info and renders it afterwards bjoern@3715: */ bjoern@3715: public void refresh() { bjoern@3715: gaugeOverviewInfoService.getRiverInfo(this.river, new AsyncCallback() { bjoern@3715: public void onFailure(Throwable e) { bjoern@3715: GWT.log("Could not load the river info." + e); bjoern@3715: } bjoern@3715: bjoern@3715: public void onSuccess(RiverInfo riverinfo) { bjoern@3715: GWT.log("Loaded river info"); bjoern@3715: renderGaugeOverviewInfo(riverinfo); bjoern@3715: } bjoern@3715: }); bjoern@3715: } bjoern@3715: bjoern@3715: public void renderGaugeOverviewInfo(RiverInfo riverinfo) { bjoern@3825: removeMembers(getMembers()); bjoern@3715: bjoern@3825: riverinfopanel = new RiverInfoPanel(riverinfo); bjoern@3825: addMember(riverinfopanel); bjoern@3825: addMember(gaugetree); bjoern@3715: bjoern@3828: gaugetree.setGauges(riverinfo); bjoern@3825: } bjoern@3715: bjoern@3825: @Override bjoern@3825: public void onResized(ResizedEvent event) { bjoern@3825: /* this height calculation is only an approximation and doesn't reflect bjoern@3825: * the real height of the the gaugetree. */ bjoern@3825: int height = getInnerContentHeight() - bjoern@3825: (RiverInfoPanel.HEIGHT + bjoern@3825: (2 * RiverInfoPanel.BORDER_WIDTH) + bjoern@3825: (2 * RiverInfoPanel.PADDING) + bjoern@3825: (2 * RiverInfoPanel.MARGIN)); bjoern@3825: bjoern@3825: if (height < 0) { bjoern@3825: height = 0; bjoern@3715: } bjoern@3825: bjoern@3825: gaugetree.setHeight("" + height + "px"); bjoern@3715: } bjoern@3715: bjoern@3825: bjoern@3715: /** bjoern@3715: * Hide the section stack section. bjoern@3715: */ bjoern@3715: public void hide() { bjoern@3715: GWT.log("GaugePanel - hide"); bjoern@3715: this.sectionStack.setHidden(true); bjoern@3715: } bjoern@3715: bjoern@3715: /** bjoern@3715: * Show the section stack section. bjoern@3715: */ bjoern@3715: public void show() { bjoern@3715: GWT.log("GaugePanel - show"); bjoern@3715: this.sectionStack.setHidden(false); bjoern@3715: } bjoern@3715: bjoern@3825: class GaugeTree extends ScrollPanel { bjoern@3825: bjoern@3825: private Tree tree; bjoern@3837: private DataList[] data; bjoern@3825: bjoern@3825: public GaugeTree() { bjoern@3825: tree = new Tree(); bjoern@3825: setWidget(tree); bjoern@3825: } bjoern@3825: bjoern@3825: /** bjoern@3825: * Resets the items of the tree. bjoern@3825: * If the list of gauges is empty or null the tree will be empty. bjoern@3825: */ bjoern@3828: public void setGauges(RiverInfo riverinfo) { bjoern@3825: tree.clear(); bjoern@3825: bjoern@3828: List gauges = riverinfo.getGauges(); bjoern@3828: bjoern@3825: if (gauges != null && !gauges.isEmpty()) { bjoern@3825: bjoern@3828: ArrayList emptygauges = new ArrayList(); bjoern@3828: bjoern@3828: if (!riverinfo.isKmUp()) { bjoern@3828: for (GaugeInfo gauge : gauges) { bjoern@3828: addGauge(gauge, emptygauges); bjoern@3828: } bjoern@3825: } bjoern@3828: else { sascha@3834: for (int i = gauges.size()-1; i >= 0; i--) { bjoern@3828: GaugeInfo gauge = gauges.get(i); bjoern@3828: addGauge(gauge, emptygauges); bjoern@3828: } bjoern@3828: } bjoern@3828: bjoern@3828: // put empty gauges to the end bjoern@3828: for (GaugeInfo gauge : emptygauges) { bjoern@3828: addGauge(gauge); bjoern@3828: } bjoern@3837: bjoern@3837: open(); bjoern@3828: } bjoern@3828: } bjoern@3828: bjoern@3828: private void addGauge(GaugeInfo gauge, List empty) { bjoern@3828: if (gauge.getKmStart() != null && gauge.getKmEnd() != null) { bjoern@3828: addGauge(gauge); bjoern@3828: } bjoern@3828: else { bjoern@3828: empty.add(gauge); bjoern@3828: } bjoern@3828: } bjoern@3828: bjoern@3828: private void addGauge(GaugeInfo gauge) { bjoern@3837: GaugeInfoItem gaugeitem = new GaugeInfoItem(gauge); bjoern@3828: tree.addItem(gaugeitem); bjoern@3828: } bjoern@3828: bjoern@3828: public void openAll() { bjoern@3837: GWT.log("GaugeTree - openAll"); bjoern@3828: for (Iterator it = tree.treeItemIterator(); it.hasNext();) { bjoern@3828: TreeItem item = it.next(); bjoern@3828: item.setState(true); bjoern@3825: } bjoern@3825: } bjoern@3837: bjoern@3837: public void setData(DataList[] data) { bjoern@3837: this.data = data; bjoern@3837: if (tree.getItemCount() > 0) { bjoern@3837: open(); bjoern@3837: } bjoern@3837: } bjoern@3837: bjoern@3837: public void open() { bjoern@3841: ArrayList locations = new ArrayList(); bjoern@3837: bjoern@3837: if (data != null && data.length > 0) { bjoern@3837: for (int i = 0; i < data.length; i++) { bjoern@3837: DataList dl = data[i]; bjoern@3837: String state = dl.getState(); bjoern@3837: GWT.log("GaugeTree - setData " + state); bjoern@3841: if (state.equals("state.winfo.location_distance")) { bjoern@3837: Double ldfrom = null; bjoern@3837: Double ldto = null; bjoern@3837: bjoern@3837: for (int j = dl.size()-1; j >= 0; --j) { bjoern@3837: Data d = dl.get(j); bjoern@3837: String label = d.getLabel(); bjoern@3837: GWT.log("GaugeTree - setData - label " + label + " " + d.getStringValue()); bjoern@3837: if (label.equals("ld_from")) { bjoern@3840: ldfrom = getDoubleValue(d); bjoern@3837: } bjoern@3837: else if (label.equals("ld_to")) { bjoern@3840: ldto = getDoubleValue(d); bjoern@3840: } bjoern@3841: else if (label.equals("ld_locations")) { bjoern@3841: getLocationsFromData(locations, d); bjoern@3841: openOnLocations(locations); bjoern@3841: return; bjoern@3841: } bjoern@3841: } bjoern@3841: if (ldfrom != null) { bjoern@3841: openOnDistance(ldfrom, ldto); bjoern@3841: return; bjoern@3841: } bjoern@3841: } bjoern@3841: else if(state.equals("state.winfo.distance_only") || bjoern@3841: state.equals("state.winfo.distance")) { bjoern@3841: Double ldfrom = null; bjoern@3841: Double ldto = null; bjoern@3841: bjoern@3841: for (int j = dl.size()-1; j >= 0; --j) { bjoern@3841: Data d = dl.get(j); bjoern@3841: String label = d.getLabel(); bjoern@3841: GWT.log("GaugeTree - setData - label " + label + " " + d.getStringValue()); bjoern@3841: if (label.equals("ld_from")) { bjoern@3841: ldfrom = getDoubleValue(d); bjoern@3841: } bjoern@3841: else if (label.equals("ld_to")) { bjoern@3841: ldto = getDoubleValue(d); bjoern@3837: } bjoern@3837: } bjoern@3837: bjoern@3837: if (ldfrom != null) { bjoern@3837: openOnDistance(ldfrom, ldto); bjoern@3837: return; bjoern@3837: } bjoern@3837: } bjoern@3837: else if (state.equals("state.winfo.location")) { bjoern@3841: getLocations("ld_locations", locations, dl); bjoern@3837: openOnLocations(locations); bjoern@3837: return; bjoern@3837: } bjoern@3837: else if (state.equals("state.winfo.reference.curve.input.start")) { bjoern@3841: getLocations("reference_startpoint", locations, dl); bjoern@3837: } bjoern@3837: else if (state.equals("state.winfo.reference.curve.input.end")) { bjoern@3841: getLocations("reference_endpoint", locations, dl); bjoern@3837: } bjoern@3839: else if (state.equals("state.winfo.historicalq.reference_gauge")) { bjoern@3839: for (int j = dl.size()-1; j >= 0; --j) { bjoern@3839: Data d = dl.get(j); bjoern@3839: String label = d.getLabel(); bjoern@3839: if (label.equals("reference_gauge")) { bjoern@3839: String tmp = d.getStringValue(); bjoern@3839: if (tmp != null) { bjoern@3839: Integer gaugereference = Integer.valueOf(tmp); bjoern@3839: if (gaugereference != null) { bjoern@3841: //TODO bjoern@3839: } bjoern@3839: } bjoern@3839: } bjoern@3839: } bjoern@3839: } bjoern@3837: } bjoern@3837: } bjoern@3841: if (!locations.isEmpty()) { bjoern@3841: openOnLocations(locations); bjoern@3837: } bjoern@3837: else { bjoern@3837: openAll(); bjoern@3837: } bjoern@3837: } bjoern@3837: bjoern@3841: private void getLocations(String labelname, List locations, DataList dl) { bjoern@3841: for (int j = dl.size()-1; j >= 0; --j) { bjoern@3841: Data d = dl.get(j); bjoern@3841: String label = d.getLabel(); bjoern@3841: if (label.equals(labelname)) { bjoern@3841: getLocationsFromData(locations, d); bjoern@3841: } bjoern@3841: } bjoern@3841: } bjoern@3841: bjoern@3841: private void getLocationsFromData(List locations, Data data) { bjoern@3841: DataItem[] items = data.getItems(); bjoern@3840: for (int k = 0; k < items.length; k++) { bjoern@3840: String tmp = items[k].getStringValue(); bjoern@3841: GWT.log("GaugeTree - getLocationsFromData " + tmp); bjoern@3840: if (tmp != null) { bjoern@3841: if (tmp.contains(" ")) { bjoern@3841: // string contains several values ... bjoern@3841: String[] values = tmp.split(" "); bjoern@3841: for(int i=0; i < values.length; i++) { bjoern@3841: Double value = Double.valueOf(values[i]); bjoern@3841: if (value != null) { bjoern@3841: locations.add(value); bjoern@3841: } bjoern@3841: } bjoern@3841: } bjoern@3841: else { bjoern@3841: Double value = Double.valueOf(tmp); bjoern@3841: if (value != null) { bjoern@3841: locations.add(value); bjoern@3841: } bjoern@3840: } bjoern@3840: } bjoern@3840: } bjoern@3840: } bjoern@3841: bjoern@3840: private Double getDoubleValue(Data d) { bjoern@3840: String tmp = d.getStringValue(); bjoern@3840: if (tmp != null) { bjoern@3840: return Double.valueOf(tmp); bjoern@3840: } bjoern@3840: return null; bjoern@3840: } bjoern@3840: bjoern@3837: public void openOnDistance(Double start, Double end) { bjoern@3837: GWT.log("GaugeTree - openOnDistance " + start + " " + end + " " + bjoern@3837: tree.getItemCount()); bjoern@3837: bjoern@3837: for (Iterator it = tree.treeItemIterator(); it.hasNext();) { bjoern@3837: TreeItem item = it.next(); bjoern@3837: /* Strange stuff is happening here: bjoern@3837: * GWT Tree.treeItemIterator returns another TreeItem for each bjoern@3837: * GaugeInfoItem */ bjoern@3837: if (item instanceof GaugeInfoItem) { bjoern@3837: boolean setstate = false; bjoern@3837: GaugeInfoItem gitem = (GaugeInfoItem)item; bjoern@3837: if (end == null) { bjoern@3837: if (gitem.getStart() >= start) { bjoern@3837: setstate = true; bjoern@3837: } bjoern@3837: } bjoern@3837: else { bjoern@3841: GWT.log("GaugeTree - openOnDistance gitem " + gitem.getStart() + " " + gitem.getEnd()); bjoern@3841: if ((start >= gitem.getStart() && start <= gitem.getEnd()) || bjoern@3841: (end >= gitem.getStart() && end <= gitem.getEnd()) || bjoern@3841: (start <= gitem.getStart() && end >= gitem.getEnd())) { bjoern@3837: setstate = true; bjoern@3837: } bjoern@3837: } bjoern@3837: item.setState(setstate); bjoern@3837: } bjoern@3837: } bjoern@3837: } bjoern@3837: bjoern@3837: public void openOnLocations(List locations) { bjoern@3837: GWT.log("GaugeTree - openOnLocations " + locations + " " + bjoern@3837: tree.getItemCount()); bjoern@3837: bjoern@3837: if (locations == null || locations.isEmpty()) { bjoern@3837: return; bjoern@3837: } bjoern@3837: bjoern@3837: for (Iterator it = tree.treeItemIterator(); it.hasNext();) { bjoern@3837: TreeItem item = it.next(); bjoern@3837: if (item instanceof GaugeInfoItem) { bjoern@3837: GaugeInfoItem gitem = (GaugeInfoItem)item; bjoern@3837: boolean isset = false; bjoern@3837: for (Double location: locations) { bjoern@3837: if (locations == null) { bjoern@3837: continue; bjoern@3837: } bjoern@3837: if (location >= gitem.getStart() && bjoern@3837: location <= gitem.getEnd()) { bjoern@3837: isset = true; bjoern@3837: break; bjoern@3837: } bjoern@3837: } bjoern@3837: item.setState(isset); bjoern@3837: } bjoern@3837: } bjoern@3837: } bjoern@3825: } bjoern@3825: bjoern@3825: class RiverInfoPanel extends HorizontalPanel { bjoern@3825: bjoern@3825: public final static int HEIGHT = 30; bjoern@3825: public final static int BORDER_WIDTH = 3; bjoern@3825: public final static int PADDING = 8; bjoern@3825: public final static int MARGIN = 10; bjoern@3715: bjoern@3715: public RiverInfoPanel(RiverInfo riverinfo) { bjoern@3825: setStyleName("riverinfopanel"); bjoern@3825: setHeight("" + HEIGHT + "px"); bjoern@3825: setVerticalAlignment(ALIGN_MIDDLE); bjoern@3715: bjoern@3828: NumberFormat nf = NumberFormat.getDecimalFormat(); bjoern@3828: bjoern@3825: addLabel(riverinfo.getName(), false); bjoern@3715: bjoern@3715: String kmtext = ""; bjoern@3715: Double start = riverinfo.getKmStart(); bjoern@3715: Double end = riverinfo.getKmEnd(); bjoern@3715: bjoern@3715: if (!riverinfo.isKmUp()) { bjoern@3715: Double tmp = end; bjoern@3715: end = start; bjoern@3715: start = tmp; bjoern@3715: } bjoern@3715: if (end != null) { bjoern@3828: kmtext += nf.format(end); bjoern@3715: kmtext += " - "; bjoern@3715: } bjoern@3715: if (start != null) { bjoern@3828: kmtext += nf.format(start); bjoern@3715: } bjoern@3715: kmtext += " km"; bjoern@3715: bjoern@3825: addLabel(kmtext, false); bjoern@3715: bjoern@3715: String qtext = ""; bjoern@3715: Double qmin = riverinfo.getMinQ(); bjoern@3715: Double qmax = riverinfo.getMaxQ(); bjoern@3715: if (qmin != null) { bjoern@3828: qtext += nf.format(qmin); bjoern@3828: qtext += " " + MSG.gauge_q_unit(); bjoern@3715: qtext += " - "; bjoern@3715: } bjoern@3715: if (qmax != null) { bjoern@3828: qtext += nf.format(qmax); bjoern@3828: qtext += " " + MSG.gauge_q_unit(); bjoern@3715: } bjoern@3715: bjoern@3825: addLabel(qtext, false); bjoern@3839: bjoern@3839: Anchor anchor = new Anchor(MSG.gauge_river_info_link(), riverinfo.getInfoURL()); bjoern@3839: add(anchor); bjoern@3825: } bjoern@3825: bjoern@3825: private void addLabel(String text, boolean wordwrap) { bjoern@3825: Label label = new Label(text, wordwrap); bjoern@3825: add(label); bjoern@3825: setCellHeight(label, "" + HEIGHT + "px"); bjoern@3715: } bjoern@3715: } bjoern@3715: bjoern@3715: class GaugeInfoItem extends TreeItem { bjoern@3837: bjoern@3837: private GaugeInfo gauge; bjoern@3837: bjoern@3715: public GaugeInfoItem(GaugeInfo gauge) { bjoern@3715: GaugeInfoHead gaugeinfohead = new GaugeInfoHead(gauge); bjoern@3715: GaugeInfoPanel gaugeinfopanel = new GaugeInfoPanel(gauge); bjoern@3715: setWidget(gaugeinfohead); bjoern@3715: addItem(gaugeinfopanel); bjoern@3837: this.gauge = gauge; bjoern@3837: } bjoern@3837: bjoern@3837: public Double getStart() { bjoern@3837: return gauge.getKmStart(); bjoern@3837: } bjoern@3837: bjoern@3837: public Double getEnd() { bjoern@3837: return gauge.getKmEnd(); bjoern@3715: } bjoern@3715: } bjoern@3715: bjoern@3715: class GaugeInfoHead extends HLayout { bjoern@3715: bjoern@3715: public GaugeInfoHead(GaugeInfo gauge) { bjoern@3715: setStyleName("gaugeinfohead"); bjoern@3715: setAutoHeight(); bjoern@3715: setAutoWidth(); bjoern@3715: bjoern@3828: NumberFormat nf = NumberFormat.getDecimalFormat(); bjoern@3828: bjoern@3825: Label label = new Label(gauge.getName(), true); bjoern@3715: addMember(label); bjoern@3715: bjoern@3828: Double start; bjoern@3828: Double end; bjoern@3828: bjoern@3828: if (!gauge.isKmUp()) { bjoern@3828: start = gauge.getKmStart(); bjoern@3828: end = gauge.getKmEnd(); bjoern@3828: } bjoern@3828: else { bjoern@3828: start = gauge.getKmEnd(); bjoern@3828: end = gauge.getKmStart(); bjoern@3828: } bjoern@3828: bjoern@3715: String kmtext = ""; bjoern@3715: if (start != null) { bjoern@3828: kmtext += nf.format(start); bjoern@3715: kmtext += " - "; bjoern@3715: } bjoern@3715: if (end != null) { bjoern@3828: kmtext += nf.format(end); bjoern@3715: } bjoern@3828: if (start != null || end != null) { bjoern@3828: kmtext += " km"; bjoern@3828: } bjoern@3715: bjoern@3715: label = new Label(kmtext); bjoern@3715: bjoern@3715: addMember(label); bjoern@3828: bjoern@3828: Double station = gauge.getStation(); bjoern@3828: if (station != null) { bjoern@3828: String stext = nf.format(station); bjoern@3828: stext += " km"; bjoern@3828: label = new Label(stext); bjoern@3828: addMember(label); bjoern@3828: } bjoern@3839: bjoern@3839: addMember(new Anchor(MSG.gauge_info_link(), gauge.getInfoURL())); bjoern@3715: } bjoern@3715: } bjoern@3715: bjoern@3715: class GaugeInfoPanel extends DecoratorPanel { bjoern@3828: bjoern@3715: public GaugeInfoPanel(GaugeInfo gauge) { bjoern@3715: setStyleName("gaugeinfopanel"); bjoern@3715: Grid grid = new Grid(4, 2); bjoern@3715: bjoern@3828: NumberFormat nf = NumberFormat.getDecimalFormat(); bjoern@3828: bjoern@3828: Double minw = gauge.getMinW(); bjoern@3828: Double maxw = gauge.getMaxW(); bjoern@3828: if (minw != null && maxw != null) { bjoern@3828: grid.setText(0, 0, MSG.wq_value_q()); bjoern@3828: grid.setText(0, 1, "" + nf.format(minw) + bjoern@3828: " - " + nf.format(maxw)); bjoern@3828: } bjoern@3828: bjoern@3828: Double minq = gauge.getMinQ(); bjoern@3828: Double maxq = gauge.getMaxQ(); bjoern@3828: if (minq != null && maxq != null) { bjoern@3828: grid.setText(1, 0, MSG.wq_value_w()); bjoern@3828: grid.setText(1, 1, "" + nf.format(minq) + bjoern@3828: " - " + nf.format(maxq)); bjoern@3828: } bjoern@3828: bjoern@3828: Double aeo = gauge.getAeo(); bjoern@3828: if (aeo != null) { bjoern@3828: grid.setText(2, 0, "AEO [kmĀ²]"); bjoern@3828: grid.setText(2, 1, "" + nf.format(aeo)); bjoern@3828: } bjoern@3828: bjoern@3828: Double datum = gauge.getDatum(); bjoern@3828: if (datum != null) { bjoern@3831: grid.setText(3, 0, MSG.gauge_zero() + " [" + bjoern@3831: gauge.getWstUnit() + "]"); bjoern@3828: grid.setText(3, 1, "" + nf.format(datum)); bjoern@3828: } bjoern@3715: bjoern@3715: setWidget(grid); bjoern@3715: } bjoern@3715: } bjoern@3715: }