X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fscl%2FScriptNodeMap.java;h=d532e1f0557adbf8b93099713bc56732a9e28a66;hb=refs%2Fchanges%2F20%2F3420%2F1;hp=37b124e3f49757fdf2461ac3a8b9ceb012221041;hpb=53d55c24c779745f188bdb18d32f71d20acb61b2;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/g3d/scl/ScriptNodeMap.java b/org.simantics.g3d/src/org/simantics/g3d/scl/ScriptNodeMap.java index 37b124e3..d532e1f0 100644 --- a/org.simantics.g3d/src/org/simantics/g3d/scl/ScriptNodeMap.java +++ b/org.simantics.g3d/src/org/simantics/g3d/scl/ScriptNodeMap.java @@ -1,8 +1,10 @@ package org.simantics.g3d.scl; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Deque; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -40,12 +42,12 @@ import org.simantics.utils.datastructures.Pair; * * @param */ -public abstract class ScriptNodeMap implements NodeMap, IMappingListener, NodeListener { +public abstract class ScriptNodeMap implements NodeMap, IMappingListener, NodeListener { private static final boolean DEBUG = false; protected Session session; - protected IMapping mapping; + protected IMapping mapping; protected ParentNode rootNode; @@ -53,7 +55,7 @@ public abstract class ScriptNodeMap implements NodeMap mapping, ParentNode rootNode) { + public ScriptNodeMap(Session session, IMapping mapping, ParentNode rootNode) { this.session = session; this.mapping = mapping; this.rootNode = rootNode; @@ -240,7 +242,7 @@ public abstract class ScriptNodeMap implements NodeMap implements NodeMap implements NodeMap stack = new ArrayDeque(); + for (Pair n : added) { + stack.add(n.first); + } + while (!stack.isEmpty()) { + E n = stack.pop(); + for (int i = removed.size()-1; i >= 0; i--) { + if (removed.get(i).first == n) { + removed.remove(i); + break; + } + } + if (n instanceof ParentNode) { + ParentNode pn = (ParentNode)n; + for (INode cn : pn.getNodes()) { + stack.push((E)cn); + } + } + } + rem.addAll(removed); add.addAll(added); for (E e : updated.getKeys()) { @@ -538,7 +561,7 @@ public abstract class ScriptNodeMap implements NodeMap getMapping() { + public IMapping getMapping() { return mapping; }