X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.simulator.toolkit%2Fsrc%2Forg%2Fsimantics%2Fsimulator%2Ftoolkit%2FStandardNodeManager.java;h=8f1d1cf53c9c2a0c29ce8a6fbefd499128646df7;hp=87ae4f32f3b7394d1e8168c705c2584ba0ae3f8c;hb=8c8283a01e63980527d605936286747006bea601;hpb=0b65b9e03c2fe0eae91af7a8b87b63df749dc5f9 diff --git a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java index 87ae4f32f..8f1d1cf53 100644 --- a/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java +++ b/bundles/org.simantics.simulator.toolkit/src/org/simantics/simulator/toolkit/StandardNodeManager.java @@ -43,7 +43,7 @@ import gnu.trove.set.hash.THashSet; /** * StandardNodeManager gives default implementations to some methods * of NodeManager. - * + * * @author Antti Villberg */ public abstract class StandardNodeManager> implements NodeManager { @@ -108,15 +108,15 @@ public abstract class StandardNodeManager valueCache = new THashMap<>(); - protected THashMap> listeners = new THashMap<>(); + THashMap valueCache = new THashMap<>(); + protected THashMap> listeners = new THashMap<>(); AtomicBoolean fireNodeListenersScheduled = new AtomicBoolean(false); Runnable fireNodeListeners = new Runnable() { @@ -136,7 +136,7 @@ public abstract class StandardNodeManager valueCache.clear(); + Runnable clearValueCache = () -> valueCache.clear(); public StandardNodeManager(StandardRealm realm, Node root) { assert(realm != null); @@ -263,6 +263,20 @@ public abstract class StandardNodeManager { + valueCache.remove(node); + synchronized(listeners) { + THashSet runnables = listeners.get(node); + if (runnables != null) { + for (Runnable r : runnables) { + r.run(); + } + } + } + }); + } + public void refreshVariables() { realm.asyncExec(clearValueCache); fireNodeListeners(); @@ -327,7 +341,7 @@ public abstract class StandardNodeManager