ingo@534: package de.intevation.flys.client.client.ui.chart; ingo@534: ingo@538: import com.google.gwt.i18n.client.NumberFormat; ingo@538: ingo@534: import com.smartgwt.client.widgets.Canvas; ingo@534: import com.smartgwt.client.widgets.Label; ingo@534: import com.smartgwt.client.widgets.layout.HLayout; ingo@534: import com.smartgwt.client.widgets.events.MouseMoveEvent; ingo@534: import com.smartgwt.client.widgets.events.MouseMoveHandler; ingo@538: ingo@538: import de.intevation.flys.client.shared.Transform2D; ingo@534: ingo@534: ingo@534: /** ingo@534: * @author Ingo Weinzierl ingo@534: */ ingo@538: public class MousePositionPanel extends HLayout implements MouseMoveHandler { ingo@538: ingo@538: protected ChartOutputTab chartTab; ingo@538: ingo@538: protected NumberFormat nf; ingo@534: ingo@534: protected Label x; ingo@534: protected Label y; ingo@534: ingo@534: ingo@538: public MousePositionPanel(ChartOutputTab chartTab) { ingo@534: super(); ingo@534: ingo@538: this.chartTab = chartTab; ingo@534: ingo@534: x = new Label(); ingo@534: y = new Label(); ingo@534: ingo@538: nf = NumberFormat.getDecimalFormat(); ingo@538: ingo@538: chartTab.getChartPanel().addMouseMoveHandler(this); ingo@538: ingo@534: initLayout(); ingo@534: } ingo@534: ingo@534: ingo@534: /** ingo@539: * Initializes the layout of this component. Note: This layout has a ingo@539: * fixed width of 195px plus a margin of 5px. ingo@534: */ ingo@534: protected void initLayout() { ingo@534: setMembersMargin(5); ingo@534: ingo@534: Label xDesc = new Label("Position: X = "); ingo@534: Label yDesc = new Label("Y = "); ingo@534: ingo@539: HLayout xLayout = new HLayout(); ingo@539: xLayout.setWidth(125); ingo@539: xLayout.addMember(xDesc); ingo@539: xLayout.addMember(x); ingo@539: ingo@539: HLayout yLayout = new HLayout(); ingo@539: yLayout.setWidth(70); ingo@539: yLayout.addMember(yDesc); ingo@539: yLayout.addMember(y); ingo@539: ingo@539: xDesc.setWidth(70); ingo@539: x.setWidth(55); ingo@534: yDesc.setWidth(20); ingo@539: y.setWidth(50); ingo@534: ingo@539: addMember(xLayout); ingo@539: addMember(yLayout); ingo@534: } ingo@534: ingo@534: ingo@534: /** ingo@538: * /Updates the X value displayed in the x label. ingo@534: * ingo@538: * @param x the new x value. ingo@534: */ ingo@1598: public void setX(String x) { ingo@1598: this.x.setContents(x); ingo@534: } ingo@534: ingo@534: ingo@534: /** ingo@538: * /Updates the Y value displayed in the y label. ingo@534: * ingo@538: * @param y the new y value. ingo@534: */ ingo@1598: public void setY(String y) { ingo@1598: this.y.setContents(y); ingo@534: } ingo@534: ingo@534: ingo@534: /** ingo@538: * Listens to mouse move events to refresh the xy position. ingo@534: * ingo@538: * @param event The move event. ingo@534: */ ingo@538: public void onMouseMove(MouseMoveEvent event) { ingo@538: updateMousePosition(event.getX(), event.getY()); ingo@534: } ingo@534: ingo@534: ingo@534: /** ingo@538: * This method takes pixel coordinates, transforms those values into chart ingo@538: * coordinates using the Transform2D class and updates the mouse position. ingo@534: * ingo@538: * @param x The x part of the pixel. ingo@538: * @param y The y part of the pixel. ingo@534: */ ingo@538: public void updateMousePosition(double x, double y) { ingo@538: Transform2D transformer = chartTab.getTransformer(); ingo@534: ingo@538: if (transformer == null) { ingo@538: return; ingo@538: } ingo@534: ingo@538: Canvas chart = chartTab.getChartPanel(); ingo@538: int xOffset = chart.getPageLeft(); ingo@538: int yOffset = chart.getPageTop(); ingo@534: ingo@538: x = x - xOffset; ingo@538: y = y - yOffset; ingo@538: ingo@1598: double[] xy = transformer.transform(x,y); ingo@1598: String[] xyStr = transformer.format(new Number[] { ingo@1598: new Double(xy[0]), new Double(xy[1]) }); ingo@538: ingo@1598: setX(xyStr[0]); ingo@1598: setY(xyStr[1]); ingo@534: } ingo@534: } ingo@534: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :