|
|
|
@ -37,8 +37,13 @@ import com.jme3.gde.core.scene.SceneListener; |
|
|
|
|
import com.jme3.gde.core.scene.SceneRequest; |
|
|
|
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode; |
|
|
|
|
import com.jme3.gde.core.sceneexplorer.nodes.JmeNode; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Collection; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.Iterator; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.logging.Level; |
|
|
|
|
import java.util.logging.Logger; |
|
|
|
|
import org.openide.util.Lookup.Result; |
|
|
|
|
import org.openide.util.NbBundle; |
|
|
|
@ -77,6 +82,8 @@ public final class SceneExplorerTopComponent extends TopComponent implements Exp |
|
|
|
|
private final Result<AbstractSceneExplorerNode> nodeSelectionResult; |
|
|
|
|
private AbstractSceneExplorerNode selectedSpatial; |
|
|
|
|
private AbstractSceneExplorerNode lastSelected; |
|
|
|
|
private Map<String, MaterialChangeProvider> materialChangeProviders = new HashMap<String, MaterialChangeProvider>(); |
|
|
|
|
private Map<String, List<MaterialChangeListener>> materialChangeListeners = new HashMap<String, List<MaterialChangeListener>>(); |
|
|
|
|
|
|
|
|
|
public SceneExplorerTopComponent() { |
|
|
|
|
initComponents(); |
|
|
|
@ -95,7 +102,7 @@ public final class SceneExplorerTopComponent extends TopComponent implements Exp |
|
|
|
|
CopyAction copy = SystemAction.get(CopyAction.class); |
|
|
|
|
getActionMap().put(copy.getActionMapKey(), ExplorerUtils.actionCopy(explorerManager)); |
|
|
|
|
PasteAction paste = SystemAction.get(PasteAction.class); |
|
|
|
|
getActionMap().put(paste.getActionMapKey(), ExplorerUtils.actionPaste(explorerManager)); |
|
|
|
|
getActionMap().put(paste.getActionMapKey(), ExplorerUtils.actionPaste(explorerManager)); |
|
|
|
|
DeleteAction delete = SystemAction.get(DeleteAction.class); |
|
|
|
|
getActionMap().put(delete.getActionMapKey(), ExplorerUtils.actionDelete(explorerManager, true)); |
|
|
|
|
} |
|
|
|
@ -238,7 +245,6 @@ public final class SceneExplorerTopComponent extends TopComponent implements Exp |
|
|
|
|
public UndoRedo getUndoRedo() { |
|
|
|
|
return Lookup.getDefault().lookup(UndoRedo.class); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private transient ExplorerManager explorerManager = new ExplorerManager(); |
|
|
|
|
|
|
|
|
|
public ExplorerManager getExplorerManager() { |
|
|
|
@ -261,6 +267,10 @@ public final class SceneExplorerTopComponent extends TopComponent implements Exp |
|
|
|
|
public void sceneRequested(SceneRequest request) { |
|
|
|
|
this.request = request; |
|
|
|
|
JmeNode node = request.getJmeNode(); |
|
|
|
|
for (Iterator it = materialChangeProviders.values().iterator(); it.hasNext();) { |
|
|
|
|
MaterialChangeProvider provider = (MaterialChangeProvider) it.next(); |
|
|
|
|
provider.clearMaterialChangeListeners(); |
|
|
|
|
} |
|
|
|
|
if (node != null) { |
|
|
|
|
explorerManager.setRootContext(node); |
|
|
|
|
explorerManager.getRootContext().setDisplayName(node.getName()); |
|
|
|
@ -282,4 +292,82 @@ public final class SceneExplorerTopComponent extends TopComponent implements Exp |
|
|
|
|
public AbstractSceneExplorerNode getLastSelected() { |
|
|
|
|
return lastSelected; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void addMaterialChangeProvider(MaterialChangeProvider provider) { |
|
|
|
|
Logger.getLogger(SceneExplorerTopComponent.class.getName()).log(Level.INFO, "New materail provider registered for: {0}", provider.getKey()); |
|
|
|
|
materialChangeProviders.put(provider.getKey(), provider); |
|
|
|
|
List<MaterialChangeListener> listeners = materialChangeListeners.get(provider.getKey()); |
|
|
|
|
if (listeners == null) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
provider.addAllMaterialChangeListener(listeners); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void removeMaterialChangeProvider(MaterialChangeProvider provider) { |
|
|
|
|
Logger.getLogger(SceneExplorerTopComponent.class.getName()).log(Level.INFO, "Removing material provider for : {0}", provider.getKey()); |
|
|
|
|
System.out.println("Removing provider : " + provider.getKey()); |
|
|
|
|
materialChangeProviders.remove(provider.getKey()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void addMaterialChangeListener(MaterialChangeListener listener) { |
|
|
|
|
|
|
|
|
|
if (listener.getKey() != null) { |
|
|
|
|
Logger.getLogger(SceneExplorerTopComponent.class.getName()).log(Level.INFO, "New material listener for : {0}", listener.getKey()); |
|
|
|
|
List<MaterialChangeListener> listeners = materialChangeListeners.get(listener.getKey()); |
|
|
|
|
if (listeners == null) { |
|
|
|
|
listeners = new ArrayList<MaterialChangeListener>(); |
|
|
|
|
materialChangeListeners.put(listener.getKey(), listeners); |
|
|
|
|
} |
|
|
|
|
listeners.add(listener); |
|
|
|
|
|
|
|
|
|
MaterialChangeProvider provider = materialChangeProviders.get(listener.getKey()); |
|
|
|
|
if (provider != null) { |
|
|
|
|
provider.addMaterialChangeListener(listener); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void removeMaterialChangeListener(MaterialChangeListener listener) { |
|
|
|
|
Logger.getLogger(SceneExplorerTopComponent.class.getName()).log(Level.INFO, "Removing material listener for: {0}", listener.getKey()); |
|
|
|
|
List<MaterialChangeListener> listeners = materialChangeListeners.get(listener.getKey()); |
|
|
|
|
if (listeners == null) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
listeners.remove(listener); |
|
|
|
|
|
|
|
|
|
MaterialChangeProvider provider = materialChangeProviders.get(listener.getKey()); |
|
|
|
|
if (provider != null) { |
|
|
|
|
provider.removeMaterialChangeListener(listener); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void swapMaterialChangeListener(MaterialChangeListener listener, String oldKey, String newKey) { |
|
|
|
|
Logger.getLogger(SceneExplorerTopComponent.class.getName()).log(Level.INFO, "Swaping material listeners : {0} -> {1}", new Object[]{oldKey, newKey}); |
|
|
|
|
if (oldKey != null) { |
|
|
|
|
List<MaterialChangeListener> listeners = materialChangeListeners.get(oldKey); |
|
|
|
|
if (listeners != null) { |
|
|
|
|
listeners.remove(listener); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
MaterialChangeProvider provider = materialChangeProviders.get(oldKey); |
|
|
|
|
if (provider != null) { |
|
|
|
|
provider.removeMaterialChangeListener(listener); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (newKey != null) { |
|
|
|
|
// assert newKey.equals(listener.getKey());
|
|
|
|
|
List<MaterialChangeListener> listeners = materialChangeListeners.get(newKey); |
|
|
|
|
if (listeners == null) { |
|
|
|
|
listeners = new ArrayList<MaterialChangeListener>(); |
|
|
|
|
materialChangeListeners.put(newKey, listeners); |
|
|
|
|
} |
|
|
|
|
listeners.add(listener); |
|
|
|
|
|
|
|
|
|
MaterialChangeProvider provider = materialChangeProviders.get(newKey); |
|
|
|
|
if (provider != null) { |
|
|
|
|
provider.addMaterialChangeListener(listener); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|