bjoern@3715: package de.intevation.flys.client.client.ui; bjoern@3715: bjoern@3715: import java.util.List; bjoern@3715: bjoern@3715: import com.google.gwt.core.client.GWT; bjoern@3715: import com.google.gwt.user.client.rpc.AsyncCallback; bjoern@3715: import com.google.gwt.user.client.ui.Tree; bjoern@3715: import com.google.gwt.user.client.ui.TreeItem; bjoern@3715: import com.google.gwt.user.client.ui.Grid; bjoern@3715: import com.google.gwt.user.client.ui.DecoratorPanel; bjoern@3715: bjoern@3715: import com.smartgwt.client.types.Overflow; bjoern@3715: import com.smartgwt.client.types.Alignment; bjoern@3715: import com.smartgwt.client.widgets.layout.SectionStackSection; bjoern@3715: import com.smartgwt.client.widgets.layout.HLayout; bjoern@3715: import com.smartgwt.client.widgets.layout.VLayout; bjoern@3715: import com.smartgwt.client.widgets.Label; 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@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@3715: public class GaugePanel extends VLayout { 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@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@3715: super(); bjoern@3715: sectionStack.setItems(this); bjoern@3715: sectionStack.setHidden(true); bjoern@3715: this.sectionStack = sectionStack; bjoern@3715: setStyleName("gaugeoverview"); bjoern@3715: } bjoern@3715: bjoern@3715: public void setRiver(String river) { bjoern@3715: this.river = river; bjoern@3715: this.refresh(); bjoern@3715: } bjoern@3715: bjoern@3715: /** 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@3715: setStyleName("gaugepanel"); bjoern@3715: sectionStack.setResizeable(true); bjoern@3715: bjoern@3715: RiverInfoPanel riverinfopanel = new RiverInfoPanel(riverinfo); bjoern@3715: bjoern@3715: addMember(riverinfopanel); bjoern@3715: bjoern@3715: VLayout treewrapper = new VLayout(); bjoern@3715: Tree gaugetree = new Tree(); bjoern@3715: gaugetree.setHeight("100%"); bjoern@3715: bjoern@3715: treewrapper.addMember(gaugetree); bjoern@3715: treewrapper.setHeight100(); bjoern@3715: treewrapper.setOverflow(Overflow.AUTO); bjoern@3715: bjoern@3715: addMember(treewrapper); bjoern@3715: bjoern@3715: List gauges = riverinfo.getGauges(); bjoern@3715: if (!gauges.isEmpty()) { bjoern@3715: bjoern@3715: for (GaugeInfo gauge : gauges) { bjoern@3715: TreeItem gaugeitem = new GaugeInfoItem(gauge); bjoern@3715: gaugetree.addItem(gaugeitem); bjoern@3715: } bjoern@3715: } bjoern@3715: } bjoern@3715: 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@3715: class RiverInfoPanel extends HLayout { bjoern@3715: bjoern@3715: public RiverInfoPanel(RiverInfo riverinfo) { bjoern@3715: setStyleName("riverinfo"); bjoern@3715: setShowEdges(true); bjoern@3715: setEdgeSize(3); bjoern@3715: setBackgroundColor("white"); bjoern@3715: setEdgeImage(""); bjoern@3715: setEdgeBackgroundColor("#CFE1F1"); bjoern@3715: setPadding(8); bjoern@3715: setOverflow(Overflow.VISIBLE); bjoern@3715: setAutoHeight(); bjoern@3715: setWidth100(); bjoern@3715: setMembersMargin(10); bjoern@3715: setMinHeight(30); bjoern@3715: bjoern@3715: Label label = new Label(riverinfo.getName()); bjoern@3715: label.setWidth("*"); bjoern@3715: addMember(label); 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@3715: kmtext += end.toString(); bjoern@3715: kmtext += " - "; bjoern@3715: } bjoern@3715: if (start != null) { bjoern@3715: kmtext += start.toString(); bjoern@3715: } bjoern@3715: kmtext += " km"; bjoern@3715: bjoern@3715: label = new Label(kmtext); bjoern@3715: label.setWidth("*"); bjoern@3715: label.setAlign(Alignment.CENTER); bjoern@3715: addMember(label); bjoern@3715: bjoern@3715: String qtext = ""; bjoern@3715: Double qmin = riverinfo.getMinQ(); bjoern@3715: Double qmax = riverinfo.getMaxQ(); bjoern@3715: if (qmin != null) { bjoern@3715: qtext += qmin.toString(); bjoern@3715: qtext += " qm/s"; bjoern@3715: qtext += " - "; bjoern@3715: } bjoern@3715: if (qmax != null) { bjoern@3715: qtext += qmax.toString(); bjoern@3715: qtext += " qm/s"; bjoern@3715: } bjoern@3715: bjoern@3715: label = new Label(qtext); bjoern@3715: label.setWidth("*"); bjoern@3715: label.setAlign(Alignment.CENTER); bjoern@3715: addMember(label); bjoern@3715: } bjoern@3715: } bjoern@3715: bjoern@3715: class GaugeInfoItem extends TreeItem { 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@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: setOverflow(Overflow.VISIBLE); bjoern@3715: setAutoHeight(); bjoern@3715: setAutoWidth(); bjoern@3715: bjoern@3715: Label label = new Label(gauge.getName()); bjoern@3715: addMember(label); bjoern@3715: bjoern@3715: Double start = gauge.getKmStart(); bjoern@3715: Double end = gauge.getKmEnd(); bjoern@3715: String kmtext = ""; bjoern@3715: if (start != null) { bjoern@3715: kmtext += start.toString(); bjoern@3715: kmtext += " - "; bjoern@3715: } bjoern@3715: if (end != null) { bjoern@3715: kmtext += end.toString(); bjoern@3715: } bjoern@3715: kmtext +=" km"; bjoern@3715: bjoern@3715: label = new Label(kmtext); bjoern@3715: bjoern@3715: addMember(label); bjoern@3715: } bjoern@3715: } bjoern@3715: bjoern@3715: class GaugeInfoPanel extends DecoratorPanel { bjoern@3715: public GaugeInfoPanel(GaugeInfo gauge) { bjoern@3715: setStyleName("gaugeinfopanel"); bjoern@3715: Grid grid = new Grid(4, 2); bjoern@3715: bjoern@3715: grid.setText(0, 0, "W-Bereich [cm]"); bjoern@3715: grid.setText(0, 1, "" + gauge.getMinW() + " - " + gauge.getMaxW()); bjoern@3715: grid.setText(1, 0, "Q-Bereich [m²/s]"); bjoern@3715: grid.setText(1, 1, "" + gauge.getMinQ() + " - " + gauge.getMaxQ()); bjoern@3715: grid.setText(2, 0, "AEO [km²]"); bjoern@3715: grid.setText(2, 1, "" + gauge.getAeo()); bjoern@3715: grid.setText(3, 0, "Pegelnullpunk [NN+m]"); bjoern@3715: grid.setText(3, 1, "" + gauge.getDatum()); bjoern@3715: bjoern@3715: setWidget(grid); bjoern@3715: } bjoern@3715: } bjoern@3715: }