Browse Source

Merge pull request #578 from neph1/Issue577

fix stopping and removing animclip when deleting them
Rickard Edén 1 year ago
parent
commit
9ec2cc3030

+ 13 - 11
jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/animation/JmeAnimClip.java

@@ -45,6 +45,7 @@ import java.beans.PropertyChangeEvent;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import javax.swing.Action;
+import javax.swing.SwingUtilities;
 import org.openide.actions.DeleteAction;
 import org.openide.actions.RenameAction;
 import org.openide.awt.Actions;
@@ -162,19 +163,20 @@ public class JmeAnimClip extends AbstractSceneExplorerNode {
 
     @Override
     public void destroy() throws IOException {
-        super.destroy();     
+        super.destroy();  
         final AnimComposer control = jmeControl.getLookup().lookup(AnimComposer.class);
-        try {
-            lookupContents.remove(this.animClip);
-            lookupContents.remove(this);
-            SceneApplication.getApplication().enqueue(() -> {
-                control.removeAnimClip(this.animClip);
-                return null;
-            }).get();
-            setChanged();
-        } catch (InterruptedException | ExecutionException ex) {
-            Exceptions.printStackTrace(ex);
+        if (playing) {
+            control.removeCurrentAction(AnimComposer.DEFAULT_LAYER);
+            jmeControl.setAnimClip(null);
+            
         }
+        lookupContents.remove(JmeAnimClip.this.animClip);
+        lookupContents.remove(this);
+        SceneApplication.getApplication().enqueue( () -> {
+            control.removeAnimClip(this.animClip);
+            SwingUtilities.invokeLater(() -> jmeControl.refresh(false));
+        });
+        setChanged();
     }
 
     @Override

+ 2 - 2
jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/animation/JmeAnimClipChildren.java

@@ -94,8 +94,8 @@ public class JmeAnimClipChildren extends Children.Keys<Object> {
 
     @Override
     protected Node[] createNodes(Object key) {
-        if (key instanceof AnimClip) {
-            return new Node[]{ new JmeAnimClip(jmeAnimComposer, (AnimClip)key, dataObject).setReadOnly(readOnly)};
+        if (key instanceof AnimClip animClip) {
+            return new Node[]{ new JmeAnimClip(jmeAnimComposer, animClip, dataObject).setReadOnly(readOnly)};
         } else {
             return new Node[]{ Node.EMPTY };
         }

+ 7 - 1
jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/animation/JmeAnimComposer.java

@@ -125,7 +125,7 @@ public class JmeAnimComposer extends JmeControl {
             Exceptions.printStackTrace(ex);
         }
     }
-
+    
     @Override
     public Action[] getActions(boolean context) {
         return new Action[]{
@@ -149,4 +149,10 @@ public class JmeAnimComposer extends JmeControl {
         JmeAnimClipChildren children = new JmeAnimClipChildren(this);
         return new Node[]{ new JmeAnimComposer((AnimComposer)key, children, key2)};
     }
+    
+    @Override
+    public void refresh(boolean immediate) {
+        ((JmeAnimClipChildren) jmeChildren).refreshChildren(immediate);
+        super.refresh(immediate);
+    }
 }