Author: scooter
Date: 2012-08-13 19:01:54 -0700 (Mon, 13 Aug 2012)
New Revision: 30184
Added:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/ClipboardImpl.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutEdit.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteEdit.java
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/ClipboardManagerImpl.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutEdgeTaskFactory.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutNodeTaskFactory.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutTask.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutTaskFactory.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CyActivator.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteTask.java
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteTaskFactory.java
Log:
Added undo
Added:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/ClipboardImpl.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/ClipboardImpl.java
(rev 0)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/ClipboardImpl.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -0,0 +1,296 @@
+package org.cytoscape.editor.internal;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyIdentifiable;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyRow;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.subnetwork.CyRootNetwork;
+import org.cytoscape.model.subnetwork.CySubNetwork;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.View;
+import org.cytoscape.view.presentation.property.BasicVisualLexicon;
+
+
+public class ClipboardImpl {
+ private CyNetworkView sourceView;
+ private List<View<CyNode>> nodeViews;
+ private List<View<CyEdge>> edgeViews;
+ private List<CyNode> nodes;
+ private List<CyEdge> edges;
+
+ // Row maps
+ private Map<CyIdentifiable, CyRow> oldSharedRowMap;
+ private Map<CyIdentifiable, CyRow> oldLocalRowMap;
+ private Map<CyIdentifiable, CyRow> oldHiddenRowMap;
+
+ private double xCenter, yCenter;
+
+ public ClipboardImpl(CyNetworkView networkView, List<CyNode> nodes,
List<CyEdge> edges) {
+ this.sourceView = networkView;
+ this.nodes = nodes;
+ this.edges = edges;
+
+ CyNetwork sourceNetwork = sourceView.getModel();
+ nodeViews = new ArrayList<View<CyNode>>();
+ edgeViews = new ArrayList<View<CyEdge>>();
+ oldSharedRowMap = new WeakHashMap<CyIdentifiable, CyRow>();
+ oldLocalRowMap = new WeakHashMap<CyIdentifiable, CyRow>();
+ oldHiddenRowMap = new WeakHashMap<CyIdentifiable, CyRow>();
+
+ // We need the root network to get the shared attributes
+ CyRootNetwork sourceRootNetwork =
((CySubNetwork)sourceNetwork).getRootNetwork();
+
+ xCenter = 0.0;
+ yCenter = 0.0;
+ for (CyNode node: nodes) {
+ View<CyNode> nodeView = networkView.getNodeView(node);
+ nodeViews.add(nodeView);
+ xCenter +=
nodeView.getVisualProperty(BasicVisualLexicon.NODE_X_LOCATION);
+ yCenter +=
nodeView.getVisualProperty(BasicVisualLexicon.NODE_Y_LOCATION);
+ addRows(node, sourceRootNetwork, sourceNetwork);
+ }
+ xCenter = xCenter / nodes.size();
+ yCenter = yCenter / nodes.size();
+
+ for (CyEdge edge: edges) {
+ edgeViews.add(networkView.getEdgeView(edge));
+ addRows(edge, sourceRootNetwork, sourceNetwork);
+ }
+ }
+
+ public List<View<CyNode>> getNodeViews() { return nodeViews; }
+ public List<View<CyEdge>> getEdgeViews() { return edgeViews; }
+ public List<CyNode> getNodes() { return nodes; }
+ public List<CyEdge> getEdges() { return edges; }
+
+ public double getCenterX() { return xCenter; }
+ public double getCenterY() { return yCenter; }
+
+ public boolean clipboardHasData() {
+ if (nodeViews != null && nodeViews.size() > 0)
+ return true;
+ if (edgeViews != null && edgeViews.size() > 0)
+ return true;
+ return false;
+ }
+
+ public List<CyIdentifiable> paste(CyNetworkView targetView, double x,
double y) {
+ List<CyIdentifiable> pastedObjects = new
ArrayList<CyIdentifiable>();
+ final Map<CyRow, CyRow> rowMap = new HashMap<CyRow, CyRow>();
+
+ // We need to do this in two passes. In pass 1, we'll add all
of the nodes
+ // and store their (possibly new) SUID. In pass 2, we'll
reposition the
+ // nodes and add the edges.
+
+ // Pass 1: add the nodes
+ final Map<CyNode, CyNode> newNodeMap = new HashMap<CyNode,
CyNode>();
+ for (View<CyNode> nodeView: nodeViews) {
+ CyNode node = nodeView.getModel();
+ CyNode newNode = pasteNode(sourceView, targetView,
node, rowMap);
+ newNodeMap.put(node, newNode);
+ pastedObjects.add(newNode);
+ }
+
+ // Pass 2: add the edges in
+ for (View<CyEdge> edgeView: edgeViews) {
+ CyEdge edge = edgeView.getModel();
+ CyEdge newEdge = pasteEdge(sourceView, targetView,
edge, rowMap, newNodeMap);
+
+ pastedObjects.add(newEdge);
+ }
+
+ copyRows(rowMap);
+ targetView.updateView();
+
+ // Finally, Pass 3: reposition the nodes and update our view
+ double xOffset = xCenter - x;
+ double yOffset = yCenter - y;
+ for (View<CyNode> nodeView: nodeViews) {
+ double nodeX =
nodeView.getVisualProperty(BasicVisualLexicon.NODE_X_LOCATION) - xOffset;
+ double nodeY =
nodeView.getVisualProperty(BasicVisualLexicon.NODE_Y_LOCATION) - yOffset;
+
+ if (!newNodeMap.containsKey(nodeView.getModel()))
continue; // Shouldn't happen
+
+ // Now, get the node view
+ View<CyNode> newNodeView =
targetView.getNodeView(newNodeMap.get(nodeView.getModel()));
+ if (newNodeView != null) {
+
newNodeView.setVisualProperty(BasicVisualLexicon.NODE_X_LOCATION, nodeX);
+
newNodeView.setVisualProperty(BasicVisualLexicon.NODE_Y_LOCATION, nodeY);
+ }
+ }
+
+ return pastedObjects;
+ }
+
+ private CyEdge pasteEdge(CyNetworkView sourceView, CyNetworkView
targetView,
+ CyEdge edge, Map<CyRow, CyRow> rowMap,
Map<CyNode, CyNode> newNodeMap) {
+ CyNetwork sourceNetwork = sourceView.getModel();
+ CyRootNetwork sourceRoot =
((CySubNetwork)sourceNetwork).getRootNetwork();
+
+ CySubNetwork targetNetwork =
(CySubNetwork)targetView.getModel();
+ CyRootNetwork targetRoot = targetNetwork.getRootNetwork();
+
+ CyEdge newEdge = null;
+ CyNode sourceNode = edge.getSource();
+ CyNode targetNode = edge.getTarget();
+
+ // Same three cases as pasteNode, but we need to be careful to
add missing nodes. If
+ // we paste and edge, but there's no corresponding node, we
need to copy the
+ // node in.
+ //
+ // Three cases:
+ // 1) We're copying edges to a new network in a different
network tree
+ // 2) We're copying edges to a new network in the same network
tree
+ // 3) We're copying edges to a new location in the same network
+ if (sourceRoot != targetRoot) {
+ // Case 1: different root
+
+ if (!newNodeMap.containsKey(sourceNode)) {
+ addRows(sourceNode, sourceRoot, sourceNetwork);
+ newNodeMap.put(sourceNode,
pasteNode(sourceView, targetView, sourceNode, rowMap));
+ }
+
+ if (!newNodeMap.containsKey(targetNode)) {
+ addRows(targetNode, sourceRoot, sourceNetwork);
+ newNodeMap.put(targetNode,
pasteNode(sourceView, targetView, targetNode, rowMap));
+ }
+
+ // Create the edge
+ newEdge =
targetNetwork.addEdge(newNodeMap.get(sourceNode),
+
newNodeMap.get(targetNode), edge.isDirected());
+
+ // Copy the attributes over
+ rowMap.put(oldSharedRowMap.get(edge),
+ targetNetwork.getRow(newEdge,
CyNetwork.DEFAULT_ATTRS));
+ rowMap.put(oldLocalRowMap.get(edge),
+ targetNetwork.getRow(newEdge,
CyNetwork.LOCAL_ATTRS));
+ rowMap.put(oldHiddenRowMap.get(edge),
+ targetNetwork.getRow(newEdge,
CyNetwork.HIDDEN_ATTRS));
+ } else {
+ // Case 2: different network, same root and
+ // Case 3: same network
+
+ // First, see if we already have the nodes
+ if (!newNodeMap.containsKey(sourceNode)) {
+ addRows(sourceNode, sourceRoot, sourceNetwork);
+ if (targetNetwork.containsNode(sourceNode)) {
+ newNodeMap.put(sourceNode, sourceNode);
+ } else {
+ newNodeMap.put(sourceNode,
pasteNode(sourceView, targetView, sourceNode, rowMap));
+ }
+ }
+
+ if (!newNodeMap.containsKey(targetNode)) {
+ addRows(targetNode, sourceRoot, sourceNetwork);
+ if (targetNetwork.containsNode(targetNode)) {
+ newNodeMap.put(targetNode, targetNode);
+ } else {
+ newNodeMap.put(targetNode,
pasteNode(sourceView, targetView, targetNode, rowMap));
+ }
+ }
+
+ // We want to create another copy of the edge
+ // Create the edge
+ newEdge =
targetNetwork.addEdge(newNodeMap.get(sourceNode),
+
newNodeMap.get(targetNode), edge.isDirected());
+
+ // Copy the attributes over
+ rowMap.put(oldLocalRowMap.get(edge),
+ targetNetwork.getRow(newEdge,
CyNetwork.LOCAL_ATTRS));
+ rowMap.put(oldHiddenRowMap.get(edge),
+ targetNetwork.getRow(newEdge,
CyNetwork.HIDDEN_ATTRS));
+ }
+ return newEdge;
+ }
+
+ // TODO: Need to figure out how to copy LOCAL_ATTRS, SHARED_ATTRS, and
HIDDEN_ATTRS
+ // The latter is easy. The second two are both part of the
DEFAULT_ATTRS, but it's
+ // not clear how to create a local attribute specifically....
+ private CyNode pasteNode(CyNetworkView sourceView, CyNetworkView
targetView,
+ CyNode node, Map<CyRow, CyRow> rowMap) {
+
+ CyNetwork sourceNetwork = sourceView.getModel();
+ CyRootNetwork sourceRoot =
((CySubNetwork)sourceNetwork).getRootNetwork();
+
+ CySubNetwork targetNetwork =
(CySubNetwork)targetView.getModel();
+ CyRootNetwork targetRoot = targetNetwork.getRootNetwork();
+
+ CyNode newNode = null;
+
+ // Three cases:
+ // 1) We're copying nodes to a new network in a different
network tree
+ // 2) We're copying nodes to a new network in the same network
tree
+ // 3) We're copying nodes to a new location in the same network
+ if (sourceRoot != targetRoot) {
+ // Case 1: Different roots
+ newNode = targetNetwork.addNode();
+ // Copy the attributes over
+ rowMap.put(oldSharedRowMap.get(node),
+ targetNetwork.getRow(newNode,
CyNetwork.DEFAULT_ATTRS));
+ rowMap.put(oldLocalRowMap.get(node),
+ targetNetwork.getRow(newNode,
CyNetwork.LOCAL_ATTRS));
+ rowMap.put(oldHiddenRowMap.get(node),
+ targetNetwork.getRow(newNode,
CyNetwork.HIDDEN_ATTRS));
+ } else if (!targetNetwork.containsNode(node)) {
+ // Case 2: different subnetwork, same root
+ newNode = targetNetwork.addNode();
+ rowMap.put(oldLocalRowMap.get(node),
+ targetNetwork.getRow(newNode,
CyNetwork.LOCAL_ATTRS));
+ rowMap.put(oldHiddenRowMap.get(node),
+ targetNetwork.getRow(newNode,
CyNetwork.HIDDEN_ATTRS));
+ } else {
+ // Case 3: Copying the node to the same network
+ newNode = targetNetwork.addNode();
+ // Copy in the hidden attributes
+ rowMap.put(oldHiddenRowMap.get(node),
+ targetNetwork.getRow(newNode,
CyNetwork.HIDDEN_ATTRS));
+ // Copy in the local attributes
+ rowMap.put(oldLocalRowMap.get(node),
+ targetNetwork.getRow(newNode,
CyNetwork.LOCAL_ATTRS));
+ targetNetwork.addNode(node);
+ }
+ return newNode;
+ }
+
+ private void copyRows(Map<CyRow,CyRow> rowMap) {
+ if (rowMap == null || rowMap.size() == 0) return;
+
+ for (CyRow sourceRow: rowMap.keySet()) {
+ CyRow targetRow = rowMap.get(sourceRow);
+ CyTable destTable = targetRow.getTable();
+ CyTable sourceTable = sourceRow.getTable();
+
+ Map<String, Object> oldDataMap =
sourceRow.getAllValues();
+ for (String colName: oldDataMap.keySet()) {
+ CyColumn column = destTable.getColumn(colName);
+ if (column == null) {
+ CyColumn sourceColumn =
sourceTable.getColumn(colName);
+ if (sourceColumn.getType() ==
List.class) {
+
destTable.createListColumn(colName, sourceColumn.getListElementType(),
+
sourceColumn.isImmutable());
+ } else {
+ destTable.createColumn(colName,
sourceColumn.getType(),
+
sourceColumn.isImmutable());
+ }
+ } else if (column == null ||
column.isPrimaryKey()) continue;
+
+ targetRow.set(colName, oldDataMap.get(colName));
+ }
+ }
+ }
+
+ public void addRows(CyIdentifiable object, CyRootNetwork
sourceRootNetwork, CyNetwork sourceNetwork) {
+ oldSharedRowMap.put(object, sourceRootNetwork.getRow(object,
CyRootNetwork.SHARED_ATTRS));
+ oldLocalRowMap.put(object, sourceNetwork.getRow(object,
CyNetwork.LOCAL_ATTRS));
+ oldHiddenRowMap.put(object, sourceNetwork.getRow(object,
CyNetwork.HIDDEN_ATTRS));
+ }
+}
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/ClipboardManagerImpl.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/ClipboardManagerImpl.java
2012-08-13 23:24:53 UTC (rev 30183)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/ClipboardManagerImpl.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -1,299 +1,44 @@
+/**
+ * The ClipboardManager provides a simple wrapper around a Clipboard. This
+ * allows us to manipulate the "current" clipboard. In the future, we might
+ * also want to provide for multiple clipboards....
+ */
package org.cytoscape.editor.internal;
-import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import java.util.WeakHashMap;
-import org.cytoscape.model.CyColumn;
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
-import org.cytoscape.model.CyRow;
-import org.cytoscape.model.CyTable;
-import org.cytoscape.model.subnetwork.CyRootNetwork;
-import org.cytoscape.model.subnetwork.CySubNetwork;
import org.cytoscape.view.model.CyNetworkView;
-import org.cytoscape.view.model.View;
-import org.cytoscape.view.presentation.property.BasicVisualLexicon;
-
public final class ClipboardManagerImpl {
- private CyNetworkView sourceView;
- private List<View<CyNode>> nodeViews;
- private List<View<CyEdge>> edgeViews;
+ private ClipboardImpl currentClipboard;
- // Row maps
- private Map<CyIdentifiable, CyRow> oldSharedRowMap;
- private Map<CyIdentifiable, CyRow> oldLocalRowMap;
- private Map<CyIdentifiable, CyRow> oldHiddenRowMap;
-
- private double xCenter, yCenter;
-
public boolean clipboardHasData() {
- if (nodeViews != null && nodeViews.size() > 0)
- return true;
- if (edgeViews != null && edgeViews.size() > 0)
- return true;
- return false;
+ if (currentClipboard == null)
+ return false;
+ return currentClipboard.clipboardHasData();
}
- public void copy(CyNetworkView networkView, List<CyNode> nodes,
List<CyEdge> edges) {
- this.sourceView = networkView;
- CyNetwork sourceNetwork = sourceView.getModel();
- nodeViews = new ArrayList<View<CyNode>>();
- edgeViews = new ArrayList<View<CyEdge>>();
- oldSharedRowMap = new WeakHashMap<CyIdentifiable, CyRow>();
- oldLocalRowMap = new WeakHashMap<CyIdentifiable, CyRow>();
- oldHiddenRowMap = new WeakHashMap<CyIdentifiable, CyRow>();
+ public ClipboardImpl getCurrentClipboard() { return currentClipboard; }
+ public void setCurrentClipboard(ClipboardImpl clip) {
+ this.currentClipboard = clip;
+ }
- // We need the root network to get the shared attributes
- CyRootNetwork sourceRootNetwork =
((CySubNetwork)sourceNetwork).getRootNetwork();
-
- xCenter = 0.0;
- yCenter = 0.0;
- for (CyNode node: nodes) {
- View<CyNode> nodeView = networkView.getNodeView(node);
- nodeViews.add(nodeView);
- xCenter +=
nodeView.getVisualProperty(BasicVisualLexicon.NODE_X_LOCATION);
- yCenter +=
nodeView.getVisualProperty(BasicVisualLexicon.NODE_Y_LOCATION);
- saveRows(node, sourceRootNetwork, sourceNetwork);
- }
- xCenter = xCenter / nodes.size();
- yCenter = yCenter / nodes.size();
-
- for (CyEdge edge: edges) {
- edgeViews.add(networkView.getEdgeView(edge));
- saveRows(edge, sourceRootNetwork, sourceNetwork);
- }
+ public void copy(CyNetworkView networkView, List<CyNode> nodes,
List<CyEdge> edges) {
+ currentClipboard = new ClipboardImpl(networkView, nodes, edges);
}
-
public void cut(CyNetworkView networkView, List<CyNode> nodes,
List<CyEdge> edges) {
copy(networkView, nodes, edges);
networkView.getModel().removeEdges(edges);
networkView.getModel().removeNodes(nodes);
}
- public List<CyIdentifiable> paste(CyNetworkView targetView, double x,
double y, boolean createColumns) {
- List<CyIdentifiable> pastedObjects = new
ArrayList<CyIdentifiable>();
- final Map<CyRow, CyRow> rowMap = new HashMap<CyRow, CyRow>();
-
- // We need to do this in two passes. In pass 1, we'll add all
of the nodes
- // and store their (possibly new) SUID. In pass 2, we'll
reposition the
- // nodes and add the edges.
-
- // Pass 1: add the nodes
- final Map<CyNode, CyNode> newNodeMap = new HashMap<CyNode,
CyNode>();
- for (View<CyNode> nodeView: nodeViews) {
- CyNode node = nodeView.getModel();
- CyNode newNode = pasteNode(sourceView, targetView,
node, rowMap);
- newNodeMap.put(node, newNode);
- pastedObjects.add(newNode);
- }
-
- // Pass 2: add the edges in
- for (View<CyEdge> edgeView: edgeViews) {
- CyEdge edge = edgeView.getModel();
- CyEdge newEdge = pasteEdge(sourceView, targetView,
edge, rowMap, newNodeMap);
-
- pastedObjects.add(newEdge);
- }
-
- copyRows(rowMap, createColumns);
- targetView.updateView();
-
- // Finally, Pass 3: reposition the nodes and update our view
- double xOffset = xCenter - x;
- double yOffset = yCenter - y;
- for (View<CyNode> nodeView: nodeViews) {
- double nodeX =
nodeView.getVisualProperty(BasicVisualLexicon.NODE_X_LOCATION) - xOffset;
- double nodeY =
nodeView.getVisualProperty(BasicVisualLexicon.NODE_Y_LOCATION) - yOffset;
-
- if (!newNodeMap.containsKey(nodeView.getModel()))
continue; // Shouldn't happen
-
- // Now, get the node view
- View<CyNode> newNodeView =
targetView.getNodeView(newNodeMap.get(nodeView.getModel()));
- if (newNodeView != null) {
-
newNodeView.setVisualProperty(BasicVisualLexicon.NODE_X_LOCATION, nodeX);
-
newNodeView.setVisualProperty(BasicVisualLexicon.NODE_Y_LOCATION, nodeY);
- }
- }
-
- return pastedObjects;
+ public List<CyIdentifiable> paste(CyNetworkView targetView, double x,
double y) {
+ return currentClipboard.paste(targetView, x, y);
}
- private CyEdge pasteEdge(CyNetworkView sourceView, CyNetworkView
targetView,
- CyEdge edge, Map<CyRow, CyRow> rowMap,
Map<CyNode, CyNode> newNodeMap) {
- CyNetwork sourceNetwork = sourceView.getModel();
- CyRootNetwork sourceRoot =
((CySubNetwork)sourceNetwork).getRootNetwork();
-
- CySubNetwork targetNetwork =
(CySubNetwork)targetView.getModel();
- CyRootNetwork targetRoot = targetNetwork.getRootNetwork();
-
- CyEdge newEdge = null;
- CyNode sourceNode = edge.getSource();
- CyNode targetNode = edge.getTarget();
-
- // Same three cases as pasteNode, but we need to be careful to
add missing nodes. If
- // we paste and edge, but there's no corresponding node, we
need to copy the
- // node in.
- //
- // Three cases:
- // 1) We're copying edges to a new network in a different
network tree
- // 2) We're copying edges to a new network in the same network
tree
- // 3) We're copying edges to a new location in the same network
- if (sourceRoot != targetRoot) {
- // Case 1: different root
-
- if (!newNodeMap.containsKey(sourceNode)) {
- saveRows(sourceNode, sourceRoot, sourceNetwork);
- newNodeMap.put(sourceNode,
pasteNode(sourceView, targetView, sourceNode, rowMap));
- }
-
- if (!newNodeMap.containsKey(targetNode)) {
- saveRows(targetNode, sourceRoot, sourceNetwork);
- newNodeMap.put(targetNode,
pasteNode(sourceView, targetView, targetNode, rowMap));
- }
-
- // Create the edge
- newEdge =
targetNetwork.addEdge(newNodeMap.get(sourceNode),
-
newNodeMap.get(targetNode), edge.isDirected());
-
- // Copy the attributes over
- rowMap.put(oldSharedRowMap.get(edge),
- targetNetwork.getRow(newEdge,
CyNetwork.DEFAULT_ATTRS));
- rowMap.put(oldLocalRowMap.get(edge),
- targetNetwork.getRow(newEdge,
CyNetwork.LOCAL_ATTRS));
- rowMap.put(oldHiddenRowMap.get(edge),
- targetNetwork.getRow(newEdge,
CyNetwork.HIDDEN_ATTRS));
- // } else if (!targetNetwork.containsEdge(edge)) {
- } else {
- // Case 2: different network, same root and
- // Case 3: same network
-
- // First, see if we already have the nodes
- if (!newNodeMap.containsKey(sourceNode)) {
- saveRows(sourceNode, sourceRoot, sourceNetwork);
- if (targetNetwork.containsNode(sourceNode)) {
- newNodeMap.put(sourceNode, sourceNode);
- } else {
- newNodeMap.put(sourceNode,
pasteNode(sourceView, targetView, sourceNode, rowMap));
- }
- }
-
- if (!newNodeMap.containsKey(targetNode)) {
- saveRows(targetNode, sourceRoot, sourceNetwork);
- if (targetNetwork.containsNode(targetNode)) {
- newNodeMap.put(targetNode, targetNode);
- } else {
- newNodeMap.put(targetNode,
pasteNode(sourceView, targetView, targetNode, rowMap));
- }
- }
-
- // We want to create another copy of the edge
- // Create the edge
- newEdge =
targetNetwork.addEdge(newNodeMap.get(sourceNode),
-
newNodeMap.get(targetNode), edge.isDirected());
-
- // Copy the attributes over
- rowMap.put(oldLocalRowMap.get(edge),
- targetNetwork.getRow(newEdge,
CyNetwork.LOCAL_ATTRS));
- rowMap.put(oldHiddenRowMap.get(edge),
- targetNetwork.getRow(newEdge,
CyNetwork.HIDDEN_ATTRS));
- } /* else {
- // Case 3: same network
- newEdge = edge;
- // Copy the attributes over
- rowMap.put(oldLocalRowMap.get(edge),
- targetNetwork.getRow(newEdge,
CyNetwork.LOCAL_ATTRS));
- rowMap.put(oldHiddenRowMap.get(edge),
- targetNetwork.getRow(newEdge,
CyNetwork.HIDDEN_ATTRS));
- } */
- return newEdge;
- }
-
- // TODO: Need to figure out how to copy LOCAL_ATTRS, SHARED_ATTRS, and
HIDDEN_ATTRS
- // The latter is easy. The second two are both part of the
DEFAULT_ATTRS, but it's
- // not clear how to create a local attribute specifically....
- private CyNode pasteNode(CyNetworkView sourceView, CyNetworkView
targetView,
- CyNode node, Map<CyRow, CyRow> rowMap) {
-
- CyNetwork sourceNetwork = sourceView.getModel();
- CyRootNetwork sourceRoot =
((CySubNetwork)sourceNetwork).getRootNetwork();
-
- CySubNetwork targetNetwork =
(CySubNetwork)targetView.getModel();
- CyRootNetwork targetRoot = targetNetwork.getRootNetwork();
-
- CyNode newNode = null;
-
- // Three cases:
- // 1) We're copying nodes to a new network in a different
network tree
- // 2) We're copying nodes to a new network in the same network
tree
- // 3) We're copying nodes to a new location in the same network
- if (sourceRoot != targetRoot) {
- // Case 1: Different roots
- newNode = targetNetwork.addNode();
- // Copy the attributes over
- rowMap.put(oldSharedRowMap.get(node),
- targetNetwork.getRow(newNode,
CyNetwork.DEFAULT_ATTRS));
- rowMap.put(oldLocalRowMap.get(node),
- targetNetwork.getRow(newNode,
CyNetwork.LOCAL_ATTRS));
- rowMap.put(oldHiddenRowMap.get(node),
- targetNetwork.getRow(newNode,
CyNetwork.HIDDEN_ATTRS));
- } else if (!targetNetwork.containsNode(node)) {
- // Case 2: different subnetwork, same root
- newNode = targetNetwork.addNode();
- rowMap.put(oldLocalRowMap.get(node),
- targetNetwork.getRow(newNode,
CyNetwork.LOCAL_ATTRS));
- rowMap.put(oldHiddenRowMap.get(node),
- targetNetwork.getRow(newNode,
CyNetwork.HIDDEN_ATTRS));
- } else {
- // Case 3: Copying the node to the same network
- newNode = targetNetwork.addNode();
- // Copy in the hidden attributes
- rowMap.put(oldHiddenRowMap.get(node),
- targetNetwork.getRow(newNode,
CyNetwork.HIDDEN_ATTRS));
- // Copy in the local attributes
- rowMap.put(oldLocalRowMap.get(node),
- targetNetwork.getRow(newNode,
CyNetwork.LOCAL_ATTRS));
- targetNetwork.addNode(node);
- }
- return newNode;
- }
-
- private void copyRows(Map<CyRow,CyRow> rowMap, boolean createColumns) {
- if (rowMap == null || rowMap.size() == 0) return;
-
- for (CyRow sourceRow: rowMap.keySet()) {
- CyRow targetRow = rowMap.get(sourceRow);
- CyTable destTable = targetRow.getTable();
- CyTable sourceTable = sourceRow.getTable();
-
- Map<String, Object> oldDataMap =
sourceRow.getAllValues();
- for (String colName: oldDataMap.keySet()) {
- CyColumn column = destTable.getColumn(colName);
- if (column == null && createColumns) {
- CyColumn sourceColumn =
sourceTable.getColumn(colName);
- if (sourceColumn.getType() ==
List.class) {
-
destTable.createListColumn(colName, sourceColumn.getListElementType(),
-
sourceColumn.isImmutable());
- } else {
- destTable.createColumn(colName,
sourceColumn.getType(),
-
sourceColumn.isImmutable());
- }
- } else if (column == null ||
column.isPrimaryKey()) continue;
-
- targetRow.set(colName, oldDataMap.get(colName));
- }
- }
- }
-
- private void saveRows(CyIdentifiable object, CyRootNetwork
sourceRootNetwork, CyNetwork sourceNetwork) {
- oldSharedRowMap.put(object, sourceRootNetwork.getRow(object,
CyRootNetwork.SHARED_ATTRS));
- oldLocalRowMap.put(object, sourceNetwork.getRow(object,
CyNetwork.LOCAL_ATTRS));
- oldHiddenRowMap.put(object, sourceNetwork.getRow(object,
CyNetwork.HIDDEN_ATTRS));
- }
}
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutEdgeTaskFactory.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutEdgeTaskFactory.java
2012-08-13 23:24:53 UTC (rev 30183)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutEdgeTaskFactory.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -8,18 +8,22 @@
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.View;
import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.undo.UndoSupport;
public class CutEdgeTaskFactory extends AbstractEdgeViewTaskFactory {
final CyNetworkManager netMgr;
final ClipboardManagerImpl clipMgr;
+ final UndoSupport undoSupport;
- public CutEdgeTaskFactory(final ClipboardManagerImpl clipboardMgr,
final CyNetworkManager netMgr) {
+ public CutEdgeTaskFactory(final ClipboardManagerImpl clipboardMgr,
final UndoSupport undoSupport,
+ final CyNetworkManager netMgr) {
this.netMgr = netMgr;
this.clipMgr = clipboardMgr;
+ this.undoSupport = undoSupport;
}
@Override
public TaskIterator createTaskIterator(View<CyEdge> edgeView,
CyNetworkView networkView) {
- return new TaskIterator(new CutTask(networkView, edgeView,
clipMgr));
+ return new TaskIterator(new CutTask(networkView, edgeView,
clipMgr, undoSupport));
}
}
Added:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutEdit.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutEdit.java
(rev 0)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutEdit.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -0,0 +1,36 @@
+package org.cytoscape.editor.internal;
+
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.View;
+import org.cytoscape.work.undo.AbstractCyEdit;
+
+import static
org.cytoscape.view.presentation.property.BasicVisualLexicon.NODE_X_LOCATION;
+import static
org.cytoscape.view.presentation.property.BasicVisualLexicon.NODE_Y_LOCATION;
+
+import java.util.List;
+
+public class CutEdit extends AbstractCyEdit {
+ private final CyNetworkView view;
+ private final ClipboardManagerImpl mgr;
+ private final ClipboardImpl clipboard;
+
+ public CutEdit(ClipboardManagerImpl clipMgr, CyNetworkView view) {
+ super("Cut");
+ this.clipboard = clipMgr.getCurrentClipboard();
+ this.view = view;
+ this.mgr = clipMgr;
+ }
+
+ public void redo() {
+ mgr.cut(view, clipboard.getNodes(), clipboard.getEdges());
+ }
+
+ public void undo() {
+ mgr.setCurrentClipboard(clipboard);
+ mgr.paste(view, clipboard.getCenterX(), clipboard.getCenterY());
+ view.updateView();
+ }
+}
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutNodeTaskFactory.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutNodeTaskFactory.java
2012-08-13 23:24:53 UTC (rev 30183)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutNodeTaskFactory.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -8,18 +8,22 @@
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.View;
import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.undo.UndoSupport;
public class CutNodeTaskFactory extends AbstractNodeViewTaskFactory {
final CyNetworkManager netMgr;
final ClipboardManagerImpl clipMgr;
+ final UndoSupport undoSupport;
- public CutNodeTaskFactory(final ClipboardManagerImpl clipboardMgr,
final CyNetworkManager netMgr) {
+ public CutNodeTaskFactory(final ClipboardManagerImpl clipboardMgr,
final UndoSupport undoSupport,
+ final CyNetworkManager netMgr) {
this.netMgr = netMgr;
this.clipMgr = clipboardMgr;
+ this.undoSupport = undoSupport;
}
@Override
public TaskIterator createTaskIterator(View<CyNode> nodeView,
CyNetworkView networkView) {
- return new TaskIterator(new CutTask(networkView, nodeView,
clipMgr));
+ return new TaskIterator(new CutTask(networkView, nodeView,
clipMgr, undoSupport));
}
}
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutTask.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutTask.java
2012-08-13 23:24:53 UTC (rev 30183)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutTask.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -10,6 +10,7 @@
import org.cytoscape.view.model.View;
import org.cytoscape.work.AbstractTask;
import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.undo.UndoSupport;
import java.util.ArrayList;
import java.util.Collections;
@@ -19,11 +20,14 @@
CyNetwork net;
CyNetworkView view;
ClipboardManagerImpl mgr;
+ final UndoSupport undoSupport;
List<CyNode> selNodes;
List<CyEdge> selEdges;
- public CutTask(final CyNetworkView netView, final ClipboardManagerImpl
clipMgr) {
+ public CutTask(final CyNetworkView netView, final ClipboardManagerImpl
clipMgr,
+ final UndoSupport undoSupport) {
this.view = netView;
+ this.undoSupport = undoSupport;
// Get all of the selected nodes and edges
selNodes = CyTableUtil.getNodesInState(netView.getModel(),
CyNetwork.SELECTED, true);
selEdges = CyTableUtil.getEdgesInState(netView.getModel(),
CyNetwork.SELECTED, true);
@@ -33,10 +37,10 @@
}
public CutTask(final CyNetworkView netView, final View<?extends
CyIdentifiable> objView,
- final ClipboardManagerImpl clipMgr) {
+ final ClipboardManagerImpl clipMgr, final UndoSupport
undoSupport) {
// Get all of the selected nodes and edges first
- this(netView, clipMgr);
+ this(netView, clipMgr, undoSupport);
// Now, make sure we add our
if (objView.getModel() instanceof CyNode) {
@@ -52,5 +56,6 @@
public void run(TaskMonitor tm) throws Exception {
mgr.cut(view, selNodes, selEdges);
+ undoSupport.postEdit(new CutEdit(mgr, view));
}
}
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutTaskFactory.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutTaskFactory.java
2012-08-13 23:24:53 UTC (rev 30183)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CutTaskFactory.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -14,14 +14,18 @@
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.View;
import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.undo.UndoSupport;
public class CutTaskFactory extends AbstractNetworkViewTaskFactory {
final CyNetworkManager netMgr;
final ClipboardManagerImpl clipMgr;
+ final UndoSupport undoSupport;
- public CutTaskFactory(final ClipboardManagerImpl clipboardMgr, final
CyNetworkManager netMgr) {
+ public CutTaskFactory(final ClipboardManagerImpl clipboardMgr, final
UndoSupport undoSupport,
+ final CyNetworkManager netMgr) {
this.netMgr = netMgr;
this.clipMgr = clipboardMgr;
+ this.undoSupport = undoSupport;
}
@Override
@@ -38,6 +42,6 @@
@Override
public TaskIterator createTaskIterator(CyNetworkView networkView) {
- return new TaskIterator(new CutTask(networkView, clipMgr));
+ return new TaskIterator(new CutTask(networkView, clipMgr,
undoSupport));
}
}
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CyActivator.java
2012-08-13 23:24:53 UTC (rev 30183)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/CyActivator.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -16,6 +16,7 @@
import org.cytoscape.task.create.CreateNetworkViewTaskFactory;
import org.cytoscape.view.model.CyNetworkViewManager;
import org.cytoscape.view.vizmap.VisualMappingManager;
+import org.cytoscape.work.undo.UndoSupport;
import org.osgi.framework.BundleContext;
import static org.cytoscape.work.ServiceProperties.*;
@@ -30,6 +31,7 @@
CyApplicationManager cyApplicationManagerServiceRef =
getService(bc, CyApplicationManager.class);
CyNetworkManager cyNetworkManagerServiceRef = getService(bc,
CyNetworkManager.class);
CyNetworkViewManager cyNetworkViewManagerServiceRef =
getService(bc, CyNetworkViewManager.class);
+ UndoSupport undoSupportServiceRef =
getService(bc,UndoSupport.class);
CyEventHelper cyEventHelperServiceRef = getService(bc,
CyEventHelper.class);
VisualMappingManager visualMappingManagerServiceRef =
getService(bc, VisualMappingManager.class);
CyGroupManager cyGroupManagerServiceRef = getService(bc,
CyGroupManager.class);
@@ -71,7 +73,7 @@
// Cut node
NetworkViewTaskFactory cutTaskFactory =
- new CutTaskFactory(clipboardManager,
cyNetworkManagerServiceRef);
+ new CutTaskFactory(clipboardManager,
undoSupportServiceRef, cyNetworkManagerServiceRef);
Properties cutTaskFactoryProps = new Properties();
cutTaskFactoryProps.setProperty(ENABLE_FOR, "networkAndView");
cutTaskFactoryProps.setProperty(PREFERRED_ACTION, "NEW");
@@ -83,7 +85,8 @@
// Paste node
NetworkViewLocationTaskFactory pasteTaskFactory =
- new PasteTaskFactory(clipboardManager,
cyEventHelperServiceRef, visualMappingManagerServiceRef);
+ new PasteTaskFactory(clipboardManager,
cyEventHelperServiceRef,
+ undoSupportServiceRef,
visualMappingManagerServiceRef);
Properties pasteTaskFactoryProps = new Properties();
pasteTaskFactoryProps.setProperty(ENABLE_FOR, "networkAndView");
pasteTaskFactoryProps.setProperty(PREFERRED_ACTION, "NEW");
@@ -110,7 +113,7 @@
// Cut node
NodeViewTaskFactory cutNodeTaskFactory =
- new CutNodeTaskFactory(clipboardManager,
cyNetworkManagerServiceRef);
+ new CutNodeTaskFactory(clipboardManager,
undoSupportServiceRef, cyNetworkManagerServiceRef);
Properties cutNodeTaskFactoryProps = new Properties();
cutNodeTaskFactoryProps.setProperty(PREFERRED_ACTION, "NEW");
cutNodeTaskFactoryProps.setProperty(PREFERRED_MENU,
NODE_EDIT_MENU);
@@ -159,7 +162,7 @@
// Cut edge
EdgeViewTaskFactory cutEdgeTaskFactory =
- new CutEdgeTaskFactory(clipboardManager,
cyNetworkManagerServiceRef);
+ new CutEdgeTaskFactory(clipboardManager,
undoSupportServiceRef, cyNetworkManagerServiceRef);
Properties cutEdgeTaskFactoryProps = new Properties();
cutEdgeTaskFactoryProps.setProperty(PREFERRED_ACTION, "NEW");
cutEdgeTaskFactoryProps.setProperty(PREFERRED_MENU,
EDGE_EDIT_MENU);
Added:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteEdit.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteEdit.java
(rev 0)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteEdit.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -0,0 +1,63 @@
+package org.cytoscape.editor.internal;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyIdentifiable;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.task.AbstractNetworkViewTask;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.vizmap.VisualMappingManager;
+import org.cytoscape.view.vizmap.VisualStyle;
+import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.undo.AbstractCyEdit;
+
+public class PasteEdit extends AbstractCyEdit {
+ private final CyNetworkView view;
+ private final VisualMappingManager vmm;
+ private final Point2D xformPt;
+ private final ClipboardManagerImpl clipMgr;
+ private final ClipboardImpl clipboard;
+ private final List<CyIdentifiable> pastedObjects;
+
+ public PasteEdit(VisualMappingManager vmm, CyNetworkView view, Point2D
xformPt,
+ ClipboardManagerImpl clipMgr, List<CyIdentifiable>
pastedObjects) {
+ super("Paste");
+ this.view = view;
+ this.vmm = vmm;
+ this.xformPt = xformPt;
+ this.clipMgr = clipMgr;
+ this.clipboard = clipMgr.getCurrentClipboard();
+ this.pastedObjects = pastedObjects;
+ }
+
+ public void undo() {
+ List<CyNode> nodeList = new ArrayList<CyNode>();
+ List<CyEdge> edgeList = new ArrayList<CyEdge>();
+ for (CyIdentifiable object: pastedObjects) {
+ // Remove edges first
+ if (object instanceof CyEdge)
+ edgeList.add((CyEdge)object);
+ else if (object instanceof CyNode)
+ nodeList.add((CyNode)object);
+ }
+
+ view.getModel().removeEdges(edgeList);
+ view.getModel().removeNodes(nodeList);
+ view.updateView();
+ }
+
+ public void redo() {
+ if (this.xformPt == null)
+ clipboard.paste(view, 0.0, 0.0);
+ else
+ clipboard.paste(view, xformPt.getX(), xformPt.getY());
+
+ // Apply visual style
+ VisualStyle vs = vmm.getVisualStyle(view);
+ vs.apply(view);
+ view.updateView();
+ }
+}
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteTask.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteTask.java
2012-08-13 23:24:53 UTC (rev 30183)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteTask.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -1,25 +1,30 @@
package org.cytoscape.editor.internal;
import java.awt.geom.Point2D;
+import java.util.List;
+import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.task.AbstractNetworkViewTask;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.vizmap.VisualMappingManager;
import org.cytoscape.view.vizmap.VisualStyle;
import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.undo.UndoSupport;
public class PasteTask extends AbstractNetworkViewTask {
private final VisualMappingManager vmm;
private final Point2D xformPt;
private final ClipboardManagerImpl clipMgr;
+ private final UndoSupport undoSupport;
public PasteTask(final VisualMappingManager vmm, final CyNetworkView
view, final Point2D xformPt,
- final ClipboardManagerImpl clip) {
+ final ClipboardManagerImpl clip, final UndoSupport
undoSupport) {
super(view);
this.vmm = vmm;
this.xformPt = xformPt;
this.clipMgr = clip;
+ this.undoSupport = undoSupport;
}
@@ -27,10 +32,13 @@
@Override
public void run(TaskMonitor tm) throws Exception {
+ List<CyIdentifiable> pastedObjects;
if (xformPt == null)
- clipMgr.paste(view, 0.0, 0.0, true);
+ pastedObjects = clipMgr.paste(view, 0.0, 0.0);
else
- clipMgr.paste(view, xformPt.getX(), xformPt.getY(),
true);
+ pastedObjects = clipMgr.paste(view, xformPt.getX(),
xformPt.getY());
+
+ undoSupport.postEdit(new PasteEdit(vmm, view, xformPt, clipMgr,
pastedObjects));
// Apply visual style
VisualStyle vs = vmm.getVisualStyle(view);
Modified:
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteTaskFactory.java
===================================================================
---
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteTaskFactory.java
2012-08-13 23:24:53 UTC (rev 30183)
+++
core3/impl/trunk/editor-impl/src/main/java/org/cytoscape/editor/internal/PasteTaskFactory.java
2012-08-14 02:01:54 UTC (rev 30184)
@@ -9,17 +9,21 @@
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.vizmap.VisualMappingManager;
import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.undo.UndoSupport;
public class PasteTaskFactory extends AbstractNetworkViewLocationTaskFactory {
private final CyEventHelper eh;
private final VisualMappingManager vmm;
private final ClipboardManagerImpl clipMgr;
+ private final UndoSupport undoSupport;
- public PasteTaskFactory(final ClipboardManagerImpl mgr, CyEventHelper
eh, VisualMappingManager vmm) {
+ public PasteTaskFactory(final ClipboardManagerImpl mgr, CyEventHelper
eh,
+ UndoSupport undoSupport, VisualMappingManager
vmm) {
this.clipMgr = mgr;
this.eh = eh;
this.vmm = vmm;
+ this.undoSupport = undoSupport;
}
@Override
@@ -33,7 +37,7 @@
@Override
public TaskIterator createTaskIterator(CyNetworkView networkView,
Point2D javaPt, Point2D xformPt)
{
- return new TaskIterator(new PasteTask(vmm, networkView,
xformPt, clipMgr));
+ return new TaskIterator(new PasteTask(vmm, networkView,
xformPt, clipMgr, undoSupport));
}
}
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.