/*
* (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.Point;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.IOException;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JOptionPane;
import org.f2o.absurdum.puck.gui.cursors.CursorHandler;
import org.f2o.absurdum.puck.gui.graph.GraphEditingPanel;
import org.f2o.absurdum.puck.gui.graph.Node;
import org.f2o.absurdum.puck.gui.panels.EntityPanel;
import org.f2o.absurdum.puck.gui.panels.WorldPanel;
import org.f2o.absurdum.puck.i18n.UIMessages;
import org.f2o.absurdum.puck.util.debug.Debug;
import org.f2o.absurdum.puck.util.xml.DOMUtils;
/**
* @author carlos
*
* Created at regulus, 19-jul-2005 19:51:01
*/
public class PasteNodeAction extends AbstractAction
{
//private Node prototype;
private GraphEditingPanel panel;
public PasteNodeAction ( GraphEditingPanel panel )
{
this.panel = panel;
this.putValue(Action.NAME,UIMessages.getInstance().getMessage("menuaction.paste"));
}
public void actionPerformed(ActionEvent arg0)
{
Clipboard clipboard = panel.getToolkit().getSystemClipboard();
try
{
String theString = (String) clipboard.getContents(this).getTransferData(DataFlavor.stringFlavor);
org.w3c.dom.Element e = (org.w3c.dom.Element) DOMUtils.stringToNode(theString);
e.setAttribute("name",e.getAttribute("name")+"(copy)");
WorldPanel wp = (WorldPanel) panel.getWorldNode().getAssociatedPanel();
while(wp.nameToNode(e.getAttribute("name"))!=null)
{
e.setAttribute("name",e.getAttribute("name")+"(otra)");
}
Point coords = null;
Point mousePos = panel.getMousePosition();
if ( mousePos != null ) //entity is pasted at mouse position if possible
{
coords = new Point(panel.panelToMapX(mousePos.x),panel.panelToMapY(mousePos.y));
}
wp.addEntityFromXML(e,null,-1,coords);
}
catch ( Exception e )
{
JOptionPane.showMessageDialog(panel,UIMessages.getInstance().getMessage("error.clip.nonode"),"Whoops!",JOptionPane.ERROR_MESSAGE);
Debug.println("The clipboard does not contain a valid node to paste.");
e.printStackTrace();
}
}
}