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);
         }

http://dive4elements.wald.intevation.org