/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.gwt.client.controller;
import org.geomajas.geometry.Coordinate;
import org.geomajas.gwt.client.widget.OverviewMap;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.smartgwt.client.types.Cursor;
/**
* Controller used by OverviewMap to handle panning.
*
* @author Kristof Heirwegh
*/
public class OverviewMapController extends AbstractGraphicsController {
private boolean dragging;
private Coordinate oldPosition;
private Coordinate previous;
public OverviewMapController(OverviewMap mapWidget) {
super(mapWidget);
}
@Override
public void onMouseDown(MouseDownEvent event) {
if (event.getNativeButton() != NativeEvent.BUTTON_RIGHT) {
dragging = true;
oldPosition = getWorldPosition(event);
previous = getScreenPosition(event);
mapWidget.setCursor(Cursor.POINTER);
}
}
/**
* Only moving rectangle or reticle during drag.
*/
@Override
public void onMouseMove(MouseMoveEvent event) {
if (dragging) {
Coordinate current = getScreenPosition(event);
getOverviewMap().movePov(current.getX() - previous.getX(), current.getY() - previous.getY());
previous = current;
}
}
@Override
public void onMouseUp(MouseUpEvent event) {
if (dragging) {
Coordinate newPosition = getWorldPosition(event);
getOverviewMap()
.panTargetMap(newPosition.getX() - oldPosition.getX(), newPosition.getY() - oldPosition.getY());
dragging = false;
mapWidget.setCursorString(mapWidget.getDefaultCursorString());
}
}
// ----------------------------------------------------------
private OverviewMap getOverviewMap() {
return (OverviewMap) mapWidget;
}
}