package com.gwt.ui.client;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.dom.client.MouseUpHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
/**
*
* @author ibouakl
*
*/
public class SimpleWindowMover implements MouseDownHandler, MouseUpHandler, MouseOverHandler, MouseMoveHandler, MouseOutHandler {
private SimpleWindow window;
private boolean isMoving = false;
private int moveStartX;
private int moveStartY;
public SimpleWindowMover(SimpleWindow window) {
this.window = window;
}
@Override
public void onMouseDown(MouseDownEvent event) {
window.removeStyleName("SimpleWindow-MoveCursor");
window.addStyleName("SimpleWindow-Pointer");
moveStartX = event.getRelativeX(event.getRelativeElement());
moveStartY = event.getRelativeY(event.getRelativeElement());
isMoving = true;
// When the user pressess the mouse in the window bar outside of the close button, we capture events, meaning that until we call
// DOM.realaseCapture in onMouseUp, the window bar will be the only widget that is notified of events. That will make deagging the
// window more efficient
DOM.setCapture((Element)event.getRelativeElement());
}
@Override
public void onMouseUp(MouseUpEvent event) {
if (isMoving) {
window.removeStyleName("SimpleWindow-Pointer");
isMoving = false;
}
// if the user releases the mouse in the window bar outside of the close button, we release the capture tjat we set in onMouseDown()
// by calling DOM.setCapture(). that returns event handling to normal and ends the window bar's exclusive rights to all mouse events
DOM.releaseCapture((Element)event.getRelativeElement());
}
@Override
public void onMouseOver(MouseOverEvent arg0) {
window.addStyleName("SimpleWindow-MoveCursor");
}
@Override
public void onMouseMove(MouseMoveEvent event) {
if (isMoving) {
// move the window as the use is draging the mouse
int deltaX = event.getRelativeX(event.getRelativeElement())- moveStartX;
int deltaY = event.getRelativeY(event.getRelativeElement()) -moveStartY ;
window.setWindowPosition(window.getAbsoluteLeft()+deltaX, window.getAbsoluteTop()+deltaY);
}
}
@Override
public void onMouseOut(MouseOutEvent arg0) {
window.removeStyleName("SimpleWindow-MoveCursor");
}
}