Mercurial > dive4elements > river
diff flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java @ 3719:e82acd5c86f7
Merged revisions 5495-5496,5509,5514-5515,5521-5526 via svnmerge from
file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-client/trunk
........
r5495 | ingo | 2012-09-17 14:55:09 +0200 (Mo, 17 Sep 2012) | 1 line
Added missing i18n strings for minfo state description.
........
r5496 | ingo | 2012-09-17 15:47:43 +0200 (Mo, 17 Sep 2012) | 1 line
Tagged 'flys-client' as 2.9.1
........
r5509 | teichmann | 2012-09-18 17:54:37 +0200 (Di, 18 Sep 2012) | 1 line
Removed trailing whitespace.
........
r5514 | bricks | 2012-09-19 09:56:42 +0200 (Mi, 19 Sep 2012) | 2 lines
Add missing Changelog entry for r5472
........
r5515 | bricks | 2012-09-19 09:59:35 +0200 (Mi, 19 Sep 2012) | 2 lines
Implement a scrolling gauge info tree
........
r5521 | bricks | 2012-09-19 14:41:48 +0200 (Mi, 19 Sep 2012) | 2 lines
Add station info to the gauges
........
r5522 | bricks | 2012-09-19 14:43:43 +0200 (Mi, 19 Sep 2012) | 2 lines
Improve the handling of the GaugePanel in the ParameterList
........
r5523 | bricks | 2012-09-19 14:51:02 +0200 (Mi, 19 Sep 2012) | 4 lines
Improve the GaugePanel
Be locale aware and only load the gauge info if the river name changes.
........
r5524 | bricks | 2012-09-19 15:14:46 +0200 (Mi, 19 Sep 2012) | 5 lines
Fix a NullPointerException
When iterating over a list it must be checked if the reference to the list is
valid.
........
r5525 | bricks | 2012-09-19 15:16:24 +0200 (Mi, 19 Sep 2012) | 2 lines
Don't display the GaugePanel if no river is selected
........
r5526 | bricks | 2012-09-19 15:18:36 +0200 (Mi, 19 Sep 2012) | 2 lines
Use the wstunit from the river as unit for the Pegelnullpunkt
........
flys-client/tags/2.9.1@5528 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 19 Sep 2012 14:42:48 +0000 |
parents | 4e33aa341e51 |
children | 22cd60315e08 |
line wrap: on
line diff
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java Mon Sep 17 13:47:43 2012 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java Wed Sep 19 14:42:48 2012 +0000 @@ -1,20 +1,27 @@ package de.intevation.flys.client.client.ui; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.DecoratorPanel; +import com.google.gwt.user.client.ui.Grid; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.Tree; import com.google.gwt.user.client.ui.TreeItem; -import com.google.gwt.user.client.ui.Grid; -import com.google.gwt.user.client.ui.DecoratorPanel; +import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Overflow; -import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.widgets.events.ResizedEvent; +import com.smartgwt.client.widgets.events.ResizedHandler; +import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.SectionStackSection; -import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; -import com.smartgwt.client.widgets.Label; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.services.GaugeOverviewInfoService; @@ -27,7 +34,7 @@ * It extends the VLayout by two methods to show and hide the * section stack section. */ -public class GaugePanel extends VLayout { +public class GaugePanel extends VLayout implements ResizedHandler { /** SectionStackSection where this GaugePanel belongs in*/ private SectionStackSection sectionStack; @@ -41,22 +48,32 @@ protected GaugeOverviewInfoServiceAsync gaugeOverviewInfoService = GWT.create(GaugeOverviewInfoService.class); + protected GaugeTree gaugetree = new GaugeTree(); + + protected RiverInfoPanel riverinfopanel; + /** * Creates a new VLayout with a SectionStackSection * The GaugePanel's SectionStackSection is hidden by default. * @param sectionStack The section stack section to place the VLayout in. */ public GaugePanel(SectionStackSection sectionStack) { - super(); + setOverflow(Overflow.HIDDEN); + sectionStack.setHidden(true); sectionStack.setItems(this); - sectionStack.setHidden(true); this.sectionStack = sectionStack; - setStyleName("gaugeoverview"); + setStyleName("gaugepanel"); + addResizedHandler(this); } + /** + * Sets and loads the river data if river is not the current set river + */ public void setRiver(String river) { - this.river = river; - this.refresh(); + if (!river.equals(this.river)) { + this.river = river; + this.refresh(); + } } /** @@ -71,38 +88,39 @@ public void onSuccess(RiverInfo riverinfo) { GWT.log("Loaded river info"); renderGaugeOverviewInfo(riverinfo); + gaugetree.openAll(); } }); } public void renderGaugeOverviewInfo(RiverInfo riverinfo) { - setStyleName("gaugepanel"); - sectionStack.setResizeable(true); - - RiverInfoPanel riverinfopanel = new RiverInfoPanel(riverinfo); - - addMember(riverinfopanel); - - VLayout treewrapper = new VLayout(); - Tree gaugetree = new Tree(); - gaugetree.setHeight("100%"); + removeMembers(getMembers()); - treewrapper.addMember(gaugetree); - treewrapper.setHeight100(); - treewrapper.setOverflow(Overflow.AUTO); - - addMember(treewrapper); + riverinfopanel = new RiverInfoPanel(riverinfo); + addMember(riverinfopanel); + addMember(gaugetree); - List<GaugeInfo> gauges = riverinfo.getGauges(); - if (!gauges.isEmpty()) { + gaugetree.setGauges(riverinfo); + } - for (GaugeInfo gauge : gauges) { - TreeItem gaugeitem = new GaugeInfoItem(gauge); - gaugetree.addItem(gaugeitem); - } + @Override + public void onResized(ResizedEvent event) { + /* this height calculation is only an approximation and doesn't reflect + * the real height of the the gaugetree. */ + int height = getInnerContentHeight() - + (RiverInfoPanel.HEIGHT + + (2 * RiverInfoPanel.BORDER_WIDTH) + + (2 * RiverInfoPanel.PADDING) + + (2 * RiverInfoPanel.MARGIN)); + + if (height < 0) { + height = 0; } + + gaugetree.setHeight("" + height + "px"); } + /** * Hide the section stack section. */ @@ -119,25 +137,84 @@ this.sectionStack.setHidden(false); } - class RiverInfoPanel extends HLayout { + class GaugeTree extends ScrollPanel { + + private Tree tree; + + public GaugeTree() { + tree = new Tree(); + setWidget(tree); + } + + /** + * Resets the items of the tree. + * If the list of gauges is empty or null the tree will be empty. + */ + public void setGauges(RiverInfo riverinfo) { + tree.clear(); + + List<GaugeInfo> gauges = riverinfo.getGauges(); + + if (gauges != null && !gauges.isEmpty()) { + + ArrayList<GaugeInfo> emptygauges = new ArrayList<GaugeInfo>(); + + if (!riverinfo.isKmUp()) { + for (GaugeInfo gauge : gauges) { + addGauge(gauge, emptygauges); + } + } + else { + for (int i = gauges.size(); i >= 0; i--) { + GaugeInfo gauge = gauges.get(i); + addGauge(gauge, emptygauges); + } + } + + // put empty gauges to the end + for (GaugeInfo gauge : emptygauges) { + addGauge(gauge); + } + } + } + + private void addGauge(GaugeInfo gauge, List<GaugeInfo> empty) { + if (gauge.getKmStart() != null && gauge.getKmEnd() != null) { + addGauge(gauge); + } + else { + empty.add(gauge); + } + } + + private void addGauge(GaugeInfo gauge) { + TreeItem gaugeitem = new GaugeInfoItem(gauge); + tree.addItem(gaugeitem); + } + + public void openAll() { + for (Iterator<TreeItem> it = tree.treeItemIterator(); it.hasNext();) { + TreeItem item = it.next(); + item.setState(true); + } + } + } + + class RiverInfoPanel extends HorizontalPanel { + + public final static int HEIGHT = 30; + public final static int BORDER_WIDTH = 3; + public final static int PADDING = 8; + public final static int MARGIN = 10; public RiverInfoPanel(RiverInfo riverinfo) { - setStyleName("riverinfo"); - setShowEdges(true); - setEdgeSize(3); - setBackgroundColor("white"); - setEdgeImage(""); - setEdgeBackgroundColor("#CFE1F1"); - setPadding(8); - setOverflow(Overflow.VISIBLE); - setAutoHeight(); - setWidth100(); - setMembersMargin(10); - setMinHeight(30); + setStyleName("riverinfopanel"); + setHeight("" + HEIGHT + "px"); + setVerticalAlignment(ALIGN_MIDDLE); - Label label = new Label(riverinfo.getName()); - label.setWidth("*"); - addMember(label); + NumberFormat nf = NumberFormat.getDecimalFormat(); + + addLabel(riverinfo.getName(), false); String kmtext = ""; Double start = riverinfo.getKmStart(); @@ -149,36 +226,36 @@ start = tmp; } if (end != null) { - kmtext += end.toString(); + kmtext += nf.format(end); kmtext += " - "; } if (start != null) { - kmtext += start.toString(); + kmtext += nf.format(start); } kmtext += " km"; - label = new Label(kmtext); - label.setWidth("*"); - label.setAlign(Alignment.CENTER); - addMember(label); + addLabel(kmtext, false); String qtext = ""; Double qmin = riverinfo.getMinQ(); Double qmax = riverinfo.getMaxQ(); if (qmin != null) { - qtext += qmin.toString(); - qtext += " qm/s"; + qtext += nf.format(qmin); + qtext += " " + MSG.gauge_q_unit(); qtext += " - "; } if (qmax != null) { - qtext += qmax.toString(); - qtext += " qm/s"; + qtext += nf.format(qmax); + qtext += " " + MSG.gauge_q_unit(); } - label = new Label(qtext); - label.setWidth("*"); - label.setAlign(Alignment.CENTER); - addMember(label); + addLabel(qtext, false); + } + + private void addLabel(String text, boolean wordwrap) { + Label label = new Label(text, wordwrap); + add(label); + setCellHeight(label, "" + HEIGHT + "px"); } } @@ -195,44 +272,88 @@ public GaugeInfoHead(GaugeInfo gauge) { setStyleName("gaugeinfohead"); - setOverflow(Overflow.VISIBLE); setAutoHeight(); setAutoWidth(); - Label label = new Label(gauge.getName()); + NumberFormat nf = NumberFormat.getDecimalFormat(); + + Label label = new Label(gauge.getName(), true); addMember(label); - Double start = gauge.getKmStart(); - Double end = gauge.getKmEnd(); + Double start; + Double end; + + if (!gauge.isKmUp()) { + start = gauge.getKmStart(); + end = gauge.getKmEnd(); + } + else { + start = gauge.getKmEnd(); + end = gauge.getKmStart(); + } + String kmtext = ""; if (start != null) { - kmtext += start.toString(); + kmtext += nf.format(start); kmtext += " - "; } if (end != null) { - kmtext += end.toString(); + kmtext += nf.format(end); } - kmtext +=" km"; + if (start != null || end != null) { + kmtext += " km"; + } label = new Label(kmtext); addMember(label); + + Double station = gauge.getStation(); + if (station != null) { + String stext = nf.format(station); + stext += " km"; + label = new Label(stext); + addMember(label); + } } } class GaugeInfoPanel extends DecoratorPanel { + public GaugeInfoPanel(GaugeInfo gauge) { setStyleName("gaugeinfopanel"); Grid grid = new Grid(4, 2); - grid.setText(0, 0, "W-Bereich [cm]"); - grid.setText(0, 1, "" + gauge.getMinW() + " - " + gauge.getMaxW()); - grid.setText(1, 0, "Q-Bereich [m²/s]"); - grid.setText(1, 1, "" + gauge.getMinQ() + " - " + gauge.getMaxQ()); - grid.setText(2, 0, "AEO [km²]"); - grid.setText(2, 1, "" + gauge.getAeo()); - grid.setText(3, 0, "Pegelnullpunk [NN+m]"); - grid.setText(3, 1, "" + gauge.getDatum()); + NumberFormat nf = NumberFormat.getDecimalFormat(); + + Double minw = gauge.getMinW(); + Double maxw = gauge.getMaxW(); + if (minw != null && maxw != null) { + grid.setText(0, 0, MSG.wq_value_q()); + grid.setText(0, 1, "" + nf.format(minw) + + " - " + nf.format(maxw)); + } + + Double minq = gauge.getMinQ(); + Double maxq = gauge.getMaxQ(); + if (minq != null && maxq != null) { + grid.setText(1, 0, MSG.wq_value_w()); + grid.setText(1, 1, "" + nf.format(minq) + + " - " + nf.format(maxq)); + } + + Double aeo = gauge.getAeo(); + if (aeo != null) { + grid.setText(2, 0, "AEO [km²]"); + grid.setText(2, 1, "" + nf.format(aeo)); + } + + Double datum = gauge.getDatum(); + if (datum != null) { + grid.setText(3, 0, MSG.gauge_zero() + " [" + + gauge.getWstUnit() + "]"); + grid.setText(3, 1, "" + nf.format(datum)); + } setWidget(grid); }