ingo@521: package de.intevation.flys.client.client.ui.chart; ingo@521: ingo@521: import java.util.Date; ingo@521: ingo@521: import com.google.gwt.core.client.GWT; ingo@521: ingo@521: import com.smartgwt.client.types.Alignment; ingo@521: ingo@521: import com.smartgwt.client.widgets.Canvas; ingo@521: import com.smartgwt.client.widgets.Img; ingo@521: import com.smartgwt.client.widgets.Label; ingo@521: ingo@521: import com.smartgwt.client.widgets.layout.HLayout; ingo@521: import com.smartgwt.client.widgets.layout.VLayout; ingo@521: ingo@521: import com.smartgwt.client.widgets.events.ClickEvent; ingo@521: import com.smartgwt.client.widgets.events.ClickHandler; ingo@521: import com.smartgwt.client.widgets.events.CloseClickHandler; ingo@521: import com.smartgwt.client.widgets.events.CloseClientEvent; ingo@521: import com.smartgwt.client.widgets.events.ResizedEvent; ingo@521: import com.smartgwt.client.widgets.events.ResizedHandler; ingo@521: ingo@521: import de.intevation.flys.client.shared.model.Artifact; ingo@521: import de.intevation.flys.client.shared.model.Collection; ingo@521: import de.intevation.flys.client.shared.model.OutputMode; ingo@521: import de.intevation.flys.client.client.Config; ingo@521: import de.intevation.flys.client.client.ui.CollectionView; ingo@521: import de.intevation.flys.client.client.ui.DatacageWindow; ingo@521: import de.intevation.flys.client.client.ui.OutputTab; ingo@521: ingo@521: ingo@521: /** ingo@521: * @author Ingo Weinzierl ingo@521: */ ingo@521: public class ChartOutputTab extends OutputTab implements ResizedHandler { ingo@521: ingo@521: public static final int DEFAULT_CHART_WIDTH = 600; ingo@521: public static final int DEFAULT_CHART_HEIGHT = 500; ingo@521: ingo@527: public static final int THEMEPANEL_MIN_WIDTH = 200; ingo@527: ingo@527: ingo@521: /** The canvas that wraps the chart toolbar.*/ ingo@521: protected Canvas tbarPanel; ingo@521: ingo@521: /** The canvas that wraps the theme editor.*/ ingo@521: protected Canvas left; ingo@521: ingo@521: /** The canvas that wraps the chart.*/ ingo@521: protected Canvas right; ingo@521: ingo@521: ingo@521: /** ingo@521: * The default constructor to create a new ChartOutputTab. ingo@521: * ingo@521: * @param title The title of this tab. ingo@521: * @param collection The Collection which this chart belongs to. ingo@521: * @param mode The OutputMode. ingo@521: */ ingo@521: public ChartOutputTab( ingo@521: String title, ingo@521: Collection collection, ingo@521: OutputMode mode, ingo@521: CollectionView collectionView ingo@521: ){ ingo@521: super(title, collection, mode); ingo@521: ingo@521: tbarPanel = new Canvas(); ingo@521: left = new Canvas(); ingo@521: right = new Canvas(); ingo@521: ingo@521: tbarPanel.setBorder("1px solid black"); ingo@521: tbarPanel.setHeight(30); ingo@521: left.setBorder("1px solid black"); ingo@527: left.setWidth(THEMEPANEL_MIN_WIDTH); ingo@527: left.setMinWidth(THEMEPANEL_MIN_WIDTH); ingo@521: right.setWidth("*"); ingo@521: ingo@521: VLayout vLayout = new VLayout(); ingo@521: vLayout.setMembersMargin(2); ingo@521: ingo@521: HLayout hLayout = new HLayout(); ingo@521: hLayout.setWidth100(); ingo@521: hLayout.setHeight100(); ingo@521: hLayout.setMembersMargin(10); ingo@521: ingo@521: hLayout.addMember(left); ingo@521: hLayout.addMember(right); ingo@521: ingo@521: right.addChild(createChartPanel()); ingo@523: left.addChild(new ChartThemePanel(collection, mode)); ingo@521: tbarPanel.addChild( ingo@521: createTBarPanel(collectionView)); ingo@521: ingo@521: vLayout.addMember(tbarPanel); ingo@521: vLayout.addMember(hLayout); ingo@521: ingo@521: setPane(vLayout); ingo@521: ingo@521: right.addResizedHandler(this); ingo@521: } ingo@521: ingo@521: ingo@521: /** ingo@521: * This method is called after the chart panel has resized. It removes the ingo@521: * chart - if existing - and requests a new one with adjusted size. ingo@521: * ingo@521: * @param event The resize event. ingo@521: */ ingo@521: public void onResized(ResizedEvent event) { ingo@521: Canvas[] children = right.getChildren(); ingo@521: for (Canvas child: children) { ingo@521: right.removeChild(child); ingo@521: } ingo@521: ingo@521: right.addChild(createChartPanel(right.getWidth(), right.getHeight())); ingo@521: } ingo@521: ingo@521: ingo@521: protected Canvas createTBarPanel( ingo@521: final CollectionView collectionView ingo@521: ) { ingo@521: HLayout hLayout = new HLayout(); ingo@521: hLayout.setWidth100(); ingo@521: hLayout.setHeight100(); ingo@521: hLayout.setMembersMargin(10); ingo@521: ingo@521: Label datacage = new Label("Datenkorb"); ingo@521: datacage.setHeight(20); ingo@521: datacage.setBackgroundColor("#BED730"); ingo@521: datacage.setBorder("1px solid black"); ingo@521: datacage.setAlign(Alignment.CENTER); ingo@521: ingo@521: hLayout.setMargin(5); ingo@521: hLayout.addMember(datacage); ingo@521: datacage.addClickHandler(new ClickHandler() { ingo@521: public void onClick(ClickEvent event) { ingo@521: GWT.log("Clicked 'datacage' button."); ingo@521: openDatacageWindow( ingo@521: collectionView.getArtifact()); ingo@521: } ingo@521: }); ingo@521: ingo@521: return hLayout; ingo@521: } ingo@521: ingo@521: protected void openDatacageWindow(Artifact artifact) { ingo@521: final DatacageWindow dc = new DatacageWindow(artifact); ingo@521: dc.addCloseClickHandler(new CloseClickHandler() { ingo@521: public void onCloseClick(CloseClientEvent event) { ingo@521: dc.destroy(); ingo@521: } ingo@521: }); ingo@521: dc.show(); ingo@521: } ingo@521: ingo@521: ingo@521: protected Canvas createChartPanel() { ingo@521: return createChartPanel(DEFAULT_CHART_WIDTH, DEFAULT_CHART_HEIGHT); ingo@521: } ingo@521: ingo@521: ingo@521: protected Canvas createChartPanel(int width, int height) { ingo@521: Img chart = getChartImg(width, height); ingo@521: chart.setWidth100(); ingo@521: chart.setHeight100(); ingo@521: ingo@521: return chart; ingo@521: ingo@521: } ingo@521: ingo@521: ingo@521: protected Canvas createThemeControlPanel() { ingo@521: Label label = new Label("Themensteuerung"); ingo@521: label.setHeight(25); ingo@521: label.setMargin(5); ingo@521: ingo@521: return label; ingo@521: } ingo@521: ingo@521: ingo@521: /** ingo@521: * Builds the chart image and returns it. ingo@521: * ingo@521: * @param width The chart width. ingo@521: * @param height The chart height. ingo@521: * ingo@521: * @return the chart image. ingo@521: */ ingo@521: protected Img getChartImg(int width, int height) { ingo@521: return new Img(getImgUrl(width, height)); ingo@521: } ingo@521: ingo@521: ingo@521: /** ingo@521: * Builds the URL that points to the chart image. ingo@521: * ingo@521: * @param width The width of the requested chart. ingo@521: * @param height The height of the requested chart. ingo@521: * ingo@521: * @return the URL to the chart image. ingo@521: */ ingo@521: protected String getImgUrl(int width, int height) { ingo@521: Config config = Config.getInstance(); ingo@521: ingo@521: String imgUrl = GWT.getModuleBaseURL(); ingo@521: imgUrl += "chart"; ingo@521: imgUrl += "?uuid=" + collection.identifier(); ingo@521: imgUrl += "&type=" + mode.getName(); ingo@521: imgUrl += "&server=" + config.getServerUrl(); ingo@521: imgUrl += "&locale=" + config.getLocale(); ingo@521: imgUrl += "×tamp=" + new Date().getTime(); ingo@521: imgUrl += "&width=" + Integer.toString(width); ingo@521: imgUrl += "&height=" + Integer.toString(height); ingo@521: ingo@521: return imgUrl; ingo@521: } ingo@521: } ingo@521: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :