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.types.Alignment;
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@538: public void setX(double x) {
ingo@538: this.x.setContents(nf.format(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@538: public void setY(double y) {
ingo@538: this.y.setContents(nf.format(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@538: double[] xy = transformer.transform(x,y);
ingo@538:
ingo@538: setX(xy[0]);
ingo@538: setY(xy[1]);
ingo@534: }
ingo@534: }
ingo@534: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :