Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/GaugePanel.java @ 4254:33b15ac17fd1
Only create and add GaugePanel when necessary
The GaugePanel isn't created always and only show if WINFO and a river is
selected now. It is only created on demand. Therefore all access to the
GaugePanel is abstraced via methods that check if the GaugePanel is null before
accessing it's methods.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Thu, 25 Oct 2012 13:58:53 +0200 |
parents | a1bc5b8cff0f |
children | f75968f0ce80 |
line wrap: on
line source
package de.intevation.flys.client.client.ui; 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.Anchor; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.WidgetCanvas; import com.smartgwt.client.widgets.events.ResizedEvent; import com.smartgwt.client.widgets.events.ResizedHandler; import com.smartgwt.client.widgets.layout.SectionStackSection; import com.smartgwt.client.widgets.layout.VLayout; import de.intevation.flys.client.client.FLYS; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.services.RiverInfoService; import de.intevation.flys.client.client.services.RiverInfoServiceAsync; import de.intevation.flys.client.shared.model.DataList; import de.intevation.flys.client.shared.model.RiverInfo; /** * The GaugePanel is intended to be used within a SectionStackSection * It extends the VLayout by two methods to show and hide the * section stack section. * * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a> */ public class GaugePanel extends VLayout implements ResizedHandler { /** SectionStackSection where this GaugePanel belongs in*/ private SectionStackSection section; /** Name of the river */ private String river; /** The message class that provides i18n strings.*/ protected FLYSConstants MSG = GWT.create(FLYSConstants.class); protected RiverInfoServiceAsync riverInfoService = GWT.create(RiverInfoService.class); protected GaugeTree gaugetree; protected Canvas gaugetreecanvas; protected RiverInfoPanel riverinfopanel; public final static String SECTION_ID = "GaugePanelSection"; private final static String GAUGE_TREE_CANVAS_ID = "GaugeTreeCanvas"; /** * Creates a new VLayout with a SectionStackSection * The GaugePanel's SectionStackSection is hidden by default. * * @param flys The FLYS object * @param section The section stack section to place the VLayout in. */ public GaugePanel(FLYS flys) { SectionStackSection section = new SectionStackSection(); section.setExpanded(false); section.setTitle(MSG.gaugePanelTitle()); section.setName(SECTION_ID); section.setID(SECTION_ID); gaugetree = new GaugeTree(flys); gaugetreecanvas = new WidgetCanvas(gaugetree); gaugetreecanvas.setID(GAUGE_TREE_CANVAS_ID); setOverflow(Overflow.HIDDEN); setStyleName("gaugepanel"); section.setHidden(true); section.setItems(this); this.section = section; addResizedHandler(this); } /** * Sets and loads the river data if river is not the current set river */ public void setRiver(String river) { if (!river.equals(this.river)) { this.river = river; this.refresh(); } } /** * Sets the data and closes not corresponding folds in the gauge tree */ public void setData(DataList[] data) { gaugetree.setData(data); } /** * Loads the river info and renders it afterwards */ public void refresh() { contract(); riverInfoService.getGauges(this.river, new AsyncCallback<RiverInfo>() { @Override public void onFailure(Throwable e) { GWT.log("Could not load the river info." + e); } @Override public void onSuccess(RiverInfo riverinfo) { GWT.log("Loaded river info"); renderGaugeOverviewInfo(riverinfo); expand(); } }); } public void renderGaugeOverviewInfo(RiverInfo riverinfo) { gaugetree.setGauges(riverinfo); if (riverinfopanel == null) { removeAllMembers(); riverinfopanel = new RiverInfoPanel(riverinfo); addMember(riverinfopanel); addMember(gaugetreecanvas); } else { riverinfopanel.setRiverInfo(riverinfo); } } @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.getStaticHeight(); int width = getInnerContentWidth(); if (height < 0) { height = 0; } GWT.log("GaugePanel - onResize " + height); gaugetree.setHeight("" + height + "px"); gaugetree.setWidth("" + width + "px"); } /** * Hide the section stack section. */ @Override public void hide() { GWT.log("GaugePanel - hide"); this.section.setHidden(true); } /** * Show the section stack section. */ @Override public void show() { GWT.log("GaugePanel - show"); this.section.setHidden(false); } @Override public void addMember(Canvas component) { super.addMember(component); expand(); } @Override public void removeMembers(Canvas[] components) { super.removeMembers(components); contract(); } public SectionStackSection getSection() { return this.section; } private void removeAllMembers() { removeMembers(getMembers()); } /** * Expands the gauge section */ public void expand() { section.setExpanded(true); } /** * Contracts/shrinks the expanded gauge section */ public void contract() { section.setExpanded(false); } }