/*
* (c) 2005-2009 Carlos G�mez Rodr�guez, todos los derechos reservados / all rights reserved.
* Licencia en license/bsd.txt / License in license/bsd.txt
*
* Created at regulus on 19-jul-2005 19:51:01
* as file AddNodeTool.java on package org.f2o.absurdum.puck.gui
*/
package org.f2o.absurdum.puck.gui;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.AbstractAction;
import org.f2o.absurdum.puck.gui.cursors.CursorHandler;
import org.f2o.absurdum.puck.gui.graph.GraphEditingPanel;
import org.f2o.absurdum.puck.gui.graph.Node;
/**
* @author carlos
*
* Created at regulus, 19-jul-2005 19:51:01
*/
public class AddNodeTool extends ToolAction
{
private Node prototype;
private MouseListener listener;
private MouseMotionListener motionListener;
private int lastSpecialNodeLocationX;
private int lastSpecialNodeLocationY;
public AddNodeTool ( Node prototype , GraphEditingPanel panel )
{
super(panel);
this.prototype = prototype;
listener = new MouseListener()
{
public void mouseClicked(MouseEvent arg0)
{
Node n = getPanel().getSpecialNode();
/*
AddNodeTool.this.panel.setToolListener(null);
AddNodeTool.this.panel.setToolMotionListener(null);
*/
//getPanel().resetToolListeners();
getPanel().setSpecialNode(null);
getPanel().addNode(n);
getPanel().resetSelections();
getPanel().selectNode(n);
getPanel().getPropertiesPanel().show(n);
getPanel().getPropertiesPanel().repaint();
getPanel().repaint();
//getPanel().setCursor(CursorHandler.getInstance().getCursor("DEFAULT"));
toolDone();
}
public void mouseEntered(MouseEvent arg0)
{
}
public void mouseExited(MouseEvent arg0)
{
}
public void mousePressed(MouseEvent arg0)
{
}
public void mouseReleased(MouseEvent arg0)
{
}
};
motionListener = new MouseMotionListener()
{
public void mouseDragged(MouseEvent arg0)
{
}
public void mouseMoved(MouseEvent arg0)
{
/*
AddNodeTool.this.prototype.paint(
AddNodeTool.this.panel.getGraphics(),arg0.getX(),arg0.getY());
*/
int newLocationX = getPanel().panelToMapX(arg0.getX());
int newLocationY = getPanel().panelToMapY(arg0.getY());
if ( getPanel().isSnapToGridEnabled( ))
{
newLocationX = (newLocationX/20)*20;
newLocationY = (newLocationY/20)*20;
}
lastSpecialNodeLocationX = newLocationX;
lastSpecialNodeLocationY = newLocationY;
getPanel().getSpecialNode().setLocation(newLocationX,newLocationY);
getPanel().repaint();
/*
AddNodeTool.this.panel.repaint();
SwingUtilities.invokeLater
(
new Runnable()
{
public void run()
{
AddNodeTool.this.panel.repaint();
System.out.println("Nay.");
}
}
);
*/
}
};
}
public void loadTool()
{
getPanel().setToolListener(listener);
getPanel().setToolMotionListener(motionListener);
getPanel().setSpecialNode((Node)prototype.clone());
//getPanel().getSpecialNode().setLocation(lastSpecialNodeLocationX,lastSpecialNodeLocationY);
getPanel().setCursor(CursorHandler.getInstance().getCursor("ADD"));
}
public void unloadTool()
{
getPanel().resetToolListeners();
getPanel().setCursor(CursorHandler.getInstance().getCursor("DEFAULT"));
}
}