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