// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.plugins.main.ccp;
import graphtea.extensions.io.GraphSaveObject;
import graphtea.graph.atributeset.GraphAttrSet;
import graphtea.graph.graph.Edge;
import graphtea.graph.graph.GraphModel;
import graphtea.graph.graph.SubGraph;
import graphtea.graph.graph.Vertex;
import graphtea.platform.core.AbstractAction;
import graphtea.platform.core.BlackBoard;
import graphtea.plugins.main.select.Select;
import graphtea.ui.UIUtils;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.util.HashMap;
/**
* @author roozbeh
*/
public class Copy extends AbstractAction {
public static final String event = UIUtils.getUIEventKey("Copy");
public Copy(BlackBoard bb) {
super(bb);
this.listen4Event(event);
}
public void performAction(String eventName, Object value) {
SubGraph sd = Select.getSelection(blackboard);
GraphModel gg = blackboard.getData(GraphAttrSet.name);
copy(sd);
// sd.moveToGraph(gg);
Paste.status = "Copy";
}
/**
* copies the given subgraph as a (GraphML) String to clipboard
*/
public static void copy(SubGraph subGraph) {
GraphModel g = new GraphModel();
copyGraph(subGraph, g);
// gg.view.repaint();
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
String data = GraphSaveObject.graph2String(g);
StringSelection string = new StringSelection(data);
cb.setContents(string, string);
}
/**
* copies the sd to g
*/
public static void copyGraph(SubGraph sd, GraphModel g) {
HashMap<Vertex, Vertex> map = new HashMap<>();
for (Vertex v1 : sd.vertices) {
Vertex v = new Vertex(v1);
map.put(v1, v);
g.insertVertex(v);
}
for (Edge e1 : sd.edges) {
Edge e = new Edge(e1, map.get(e1.source), map.get(e1.target));
g.insertEdge(e);
}
}
}