Mercurial > dive4elements > river
diff flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/MousePositionPanel.java @ 534:e08777967bad
Added a first implementation of a MousePositionPanel - work is not finished yet.
flys-client/trunk@2025 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 27 May 2011 15:38:24 +0000 |
parents | |
children | 75df57220104 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/MousePositionPanel.java Fri May 27 15:38:24 2011 +0000 @@ -0,0 +1,177 @@ +package de.intevation.flys.client.client.ui.chart; + +import com.smartgwt.client.core.Rectangle; +import com.smartgwt.client.types.Alignment; +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.events.MouseMoveEvent; +import com.smartgwt.client.widgets.events.MouseMoveHandler; +import com.smartgwt.client.widgets.events.ResizedEvent; +import com.smartgwt.client.widgets.events.ResizedHandler; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class MousePositionPanel +extends HLayout +implements MouseMoveHandler, ResizedHandler +{ + protected Canvas window; + protected Rectangle viewport; + + protected Label x; + protected Label y; + + + public MousePositionPanel(Canvas window, Rectangle viewport) { + super(); + + this.window = window; + this.viewport = viewport; + + x = new Label(); + y = new Label(); + + initLayout(); + } + + + /** + * Initializes the layout of this component. + */ + protected void initLayout() { + setLayoutAlign(Alignment.RIGHT); + setMembersMargin(5); + + Label xDesc = new Label("Position: X = "); + Label yDesc = new Label("Y = "); + + xDesc.setWidth(60); + x.setWidth(25); + yDesc.setWidth(20); + y.setWidth(25); + + addMember(xDesc); + addMember(x); + addMember(yDesc); + addMember(y); + } + + + /** + * Computes the x|y position (in chart coordinates) and updates the position + * in the UI. + * + * @param event The MouseMoveEvent. + */ + public void onMouseMove(MouseMoveEvent event) { + int posX = event.getX(); + int posY = event.getY(); + + if (!validX(posX) || !validY(posY)) { + return; + } + + x.setContents(String.valueOf(getXPosition(posX))); + y.setContents(String.valueOf(getYPosition(posY))); + } + + + public void onResized(ResizedEvent event) { + } + + + /** + * Computes the left coordinate of the chart. + * + * @return the left coordinate of the chart. + */ + protected int computeMinX() { + return window.getPageLeft() + viewport.getLeft(); + } + + + /** + * Computes the right coordinate of the chart. + * + * @return the right coordinate of the chart. + */ + protected int computeMaxX() { + return window.getPageLeft() + window.getWidth() - viewport.getWidth(); + } + + + /** + * Computes the upper Y coordinate of the chart. + * + * @return the lower Y coordinate of the chart. + */ + protected int computeMinY() { + return window.getPageTop() + viewport.getTop(); + } + + + /** + * Computes the lower Y coordinate of the chart. + * + * @return the lower Y coordinate of the chart. + */ + protected int computeMaxY() { + return window.getPageBottom() - viewport.getHeight(); + } + + + /** + * Determines if the x value is in the valid range of the chart. + * + * @param x A pixel. + * + * @return true if the x position is valid, otherwise false. + */ + protected boolean validX(int x) { + return (x > computeMinX() && x < computeMaxX()); + } + + + /** + * Determines if the y value is in the valid range of the chart. + * + * @param y A pixel. + * + * @return true if the y position is valid, otherwise false. + */ + protected boolean validY(int y) { + return (y > computeMinY() && y < computeMaxY()); + } + + + /** + * Computes the X coordinate in a chart based on the current mouse position. + * + * @param pixel A pixel on the screen. + * + * @return the computed X value. + */ + protected double getXPosition(int pixel) { + // TODO Compute the x relative to the chart range + + return pixel - computeMinX(); + } + + + /** + * Computes the Y coordinate in a chart based on the current mouse position. + * + * @param pixel A pixel on the screen. + * + * @return the computed Y value. + */ + protected double getYPosition(int pixel) { + // TODO Compute the y relative to the chart range + + return pixel - computeMinY(); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :