/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2011, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotoolkit.gui.swing.render2d.control.edition;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import javax.swing.event.MouseInputListener;
import org.geotoolkit.display2d.canvas.J2DCanvas;
import org.geotoolkit.gui.swing.render2d.CanvasHandler;
import org.geotoolkit.gui.swing.render2d.JMap2D;
import org.geotoolkit.gui.swing.render2d.decoration.MapDecoration;
import org.apache.sis.util.ArgumentChecks;
/**
*
* @author Johann Sorel (Geomatys)
* @module
*/
public final class EditionHandler implements CanvasHandler, MouseInputListener,KeyListener,MouseWheelListener{
private final JMap2D map;
private final EditionDelegate delegate;
private final MapDecoration delegateDecoration;
public EditionHandler(final JMap2D map,final EditionDelegate delegate) {
ArgumentChecks.ensureNonNull("map", map);
ArgumentChecks.ensureNonNull("delegate", delegate);
this.map = map;
this.delegate = delegate;
this.delegateDecoration = delegate.getDecoration();
}
@Override
public J2DCanvas getCanvas() {
return map.getCanvas();
}
@Override
public void install(final Component component) {
map.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
if(delegateDecoration != null){
map.addDecoration(0,delegateDecoration);
}
component.addMouseListener(this);
component.addMouseMotionListener(this);
component.addMouseWheelListener(this);
component.addKeyListener(this);
}
@Override
public void uninstall(final Component component) {
map.setCursor(Cursor.getDefaultCursor());
if(delegateDecoration != null){
map.removeDecoration(delegateDecoration);
}
component.removeMouseListener(this);
component.removeMouseMotionListener(this);
component.removeMouseWheelListener(this);
component.removeKeyListener(this);
}
////////////////////////////////////////////////////////////////////////////
//forward events to the delegate ///////////////////////////////////////////
@Override
public void mouseClicked(final MouseEvent e) {
//handle grid and geometry snapping
delegate.mouseClicked(e);
}
@Override
public void mousePressed(final MouseEvent e) {
//handle grid and geometry snapping
delegate.mousePressed(e);
}
@Override
public void mouseReleased(final MouseEvent e) {
//handle grid and geometry snapping
delegate.mouseReleased(e);
}
@Override
public void mouseEntered(final MouseEvent e) {
map.getComponent().requestFocus();
//handle grid and geometry snapping
delegate.mouseEntered(e);
}
@Override
public void mouseExited(final MouseEvent e) {
//handle grid and geometry snapping
delegate.mouseExited(e);
}
@Override
public void mouseDragged(final MouseEvent e) {
//handle grid and geometry snapping
delegate.mouseDragged(e);
}
@Override
public void mouseMoved(final MouseEvent e) {
//handle grid and geometry snapping
delegate.mouseMoved(e);
}
@Override
public void mouseWheelMoved(final MouseWheelEvent e) {
//handle grid and geometry snapping
delegate.mouseWheelMoved(e);
}
@Override
public void keyTyped(final KeyEvent e) {
delegate.keyTyped(e);
}
@Override
public void keyPressed(final KeyEvent e) {
delegate.keyPressed(e);
}
@Override
public void keyReleased(final KeyEvent e) {
delegate.keyReleased(e);
}
}