/*
* Copyright (c) 2012 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* HUMBOLDT EU Integrated Project #030962
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.ui.views.styledmap.tool;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.mapviewer.GeoPosition;
import org.jdesktop.swingx.mapviewer.IllegalGeoPositionException;
import de.fhg.igd.mapviewer.MapTool;
import de.fhg.igd.mapviewer.tools.AbstractMapTool;
import de.fhg.igd.mapviewer.tools.renderer.BoxRenderer;
/**
* Tool for selecting instances, either by a click or through a selection box.
*
* @author Simon Templer
*/
public class InstanceTool extends AbstractInstanceTool {
private static final Log log = LogFactory.getLog(InstanceTool.class);
/**
* Default constructor
*/
public InstanceTool() {
BoxRenderer renderer = new BoxRenderer();
renderer.setBackColor(new Color(0, 255, 255, 50));
renderer.setBorderColor(new Color(0, 255, 255, 255));
setRenderer(renderer);
}
/**
* @see AbstractMapTool#click(MouseEvent, GeoPosition)
*/
@Override
public void click(MouseEvent me, GeoPosition pos) {
if (me.getClickCount() == 2) {
mapKit.setCenterPosition(pos);
mapKit.setZoom(mapKit.getMainMap().getZoom() - 1);
}
else if (me.getClickCount() == 1) {
if (me.isAltDown() && getPositions().size() < 1) {
// add pos
addPosition(pos);
}
else if (getPositions().size() == 1) {
// finish box selection
// action & reset
addPosition(pos);
// action
try {
List<Point2D> points = getPoints();
Rectangle rect = new Rectangle((int) points.get(0).getX(), (int) points.get(0)
.getY(), 0, 0);
rect.add(points.get(1));
updateSelection(rect, me.isControlDown() || me.isMetaDown(), true);
} catch (IllegalGeoPositionException e) {
log.error("Error calculating selection box", e); //$NON-NLS-1$
}
reset();
}
else {
// click selection
reset();
updateSelection(me.getPoint(), me.isControlDown() || me.isMetaDown(), true);
}
}
}
/**
* @see AbstractMapTool#popup(MouseEvent, GeoPosition)
*/
@Override
public void popup(MouseEvent me, GeoPosition pos) {
reset();
}
/**
* @see MapTool#isPanEnabled()
*/
@Override
public boolean isPanEnabled() {
return true;
}
}