Mercurial > dive4elements > river
diff flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java @ 3715:8d3e48f189d2
Add first draft for the gauge overview info ui
flys-client/trunk@5472 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Bjoern Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Fri, 14 Sep 2012 14:07:48 +0000 |
parents | |
children | 4e33aa341e51 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java Fri Sep 14 14:07:48 2012 +0000 @@ -0,0 +1,245 @@ +package de.intevation.flys.client.client.ui; + +import java.util.List; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.rpc.AsyncCallback; +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.google.gwt.user.client.ui.ScrollPanel; + +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.types.LayoutPolicy; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.layout.SectionStack; +import com.smartgwt.client.widgets.layout.SectionStackSection; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.Layout; +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; +import de.intevation.flys.client.client.services.GaugeOverviewInfoServiceAsync; +import de.intevation.flys.client.shared.model.GaugeInfo; +import de.intevation.flys.client.shared.model.RiverInfo; + +/** + * The GaugePanel is intendet to be used within a SectionStackSection + * It extends the VLayout by two methods to show and hide the + * section stack section. + */ +public class GaugePanel extends VLayout { + + /** SectionStackSection where this GaugePanel belongs in*/ + private SectionStackSection sectionStack; + + /** Name of the river */ + private String river; + + /** The message class that provides i18n strings.*/ + protected FLYSConstants MSG = GWT.create(FLYSConstants.class); + + protected GaugeOverviewInfoServiceAsync gaugeOverviewInfoService = + GWT.create(GaugeOverviewInfoService.class); + + /** + * 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(); + sectionStack.setItems(this); + sectionStack.setHidden(true); + this.sectionStack = sectionStack; + setStyleName("gaugeoverview"); + } + + public void setRiver(String river) { + this.river = river; + this.refresh(); + } + + /** + * Loads the river info and renders it afterwards + */ + public void refresh() { + gaugeOverviewInfoService.getRiverInfo(this.river, new AsyncCallback<RiverInfo>() { + public void onFailure(Throwable e) { + GWT.log("Could not load the river info." + e); + } + + public void onSuccess(RiverInfo riverinfo) { + GWT.log("Loaded river info"); + renderGaugeOverviewInfo(riverinfo); + } + }); + } + + 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%"); + + treewrapper.addMember(gaugetree); + treewrapper.setHeight100(); + treewrapper.setOverflow(Overflow.AUTO); + + addMember(treewrapper); + + List<GaugeInfo> gauges = riverinfo.getGauges(); + if (!gauges.isEmpty()) { + + for (GaugeInfo gauge : gauges) { + TreeItem gaugeitem = new GaugeInfoItem(gauge); + gaugetree.addItem(gaugeitem); + } + } + } + + /** + * Hide the section stack section. + */ + public void hide() { + GWT.log("GaugePanel - hide"); + this.sectionStack.setHidden(true); + } + + /** + * Show the section stack section. + */ + public void show() { + GWT.log("GaugePanel - show"); + this.sectionStack.setHidden(false); + } + + class RiverInfoPanel extends HLayout { + + 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); + + Label label = new Label(riverinfo.getName()); + label.setWidth("*"); + addMember(label); + + String kmtext = ""; + Double start = riverinfo.getKmStart(); + Double end = riverinfo.getKmEnd(); + + if (!riverinfo.isKmUp()) { + Double tmp = end; + end = start; + start = tmp; + } + if (end != null) { + kmtext += end.toString(); + kmtext += " - "; + } + if (start != null) { + kmtext += start.toString(); + } + kmtext += " km"; + + label = new Label(kmtext); + label.setWidth("*"); + label.setAlign(Alignment.CENTER); + addMember(label); + + String qtext = ""; + Double qmin = riverinfo.getMinQ(); + Double qmax = riverinfo.getMaxQ(); + if (qmin != null) { + qtext += qmin.toString(); + qtext += " qm/s"; + qtext += " - "; + } + if (qmax != null) { + qtext += qmax.toString(); + qtext += " qm/s"; + } + + label = new Label(qtext); + label.setWidth("*"); + label.setAlign(Alignment.CENTER); + addMember(label); + } + } + + class GaugeInfoItem extends TreeItem { + public GaugeInfoItem(GaugeInfo gauge) { + GaugeInfoHead gaugeinfohead = new GaugeInfoHead(gauge); + GaugeInfoPanel gaugeinfopanel = new GaugeInfoPanel(gauge); + setWidget(gaugeinfohead); + addItem(gaugeinfopanel); + } + } + + class GaugeInfoHead extends HLayout { + + public GaugeInfoHead(GaugeInfo gauge) { + setStyleName("gaugeinfohead"); + setOverflow(Overflow.VISIBLE); + setAutoHeight(); + setAutoWidth(); + + Label label = new Label(gauge.getName()); + addMember(label); + + Double start = gauge.getKmStart(); + Double end = gauge.getKmEnd(); + String kmtext = ""; + if (start != null) { + kmtext += start.toString(); + kmtext += " - "; + } + if (end != null) { + kmtext += end.toString(); + } + kmtext +=" km"; + + label = new Label(kmtext); + + 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()); + + setWidget(grid); + } + } +}