1
1
/*
2
- * Copyright (c) 2009-2010 jMonkeyEngine
2
+ * Copyright (c) 2009-2024 jMonkeyEngine
3
3
* All rights reserved.
4
4
*
5
5
* Redistribution and use in source and binary forms, with or without
31
31
*/
32
32
package com .jme3 .gde .core .sceneexplorer ;
33
33
34
+ import com .jme3 .gde .core .assets .RefreshJmeSpatial ;
34
35
import com .jme3 .gde .core .icons .IconList ;
35
36
import com .jme3 .g
10000
de .core .scene .PreviewRequest ;
36
37
import com .jme3 .gde .core .scene .SceneApplication ;
48
49
import java .util .Map ;
49
50
import java .util .logging .Level ;
50
51
import java .util .logging .Logger ;
52
+ import javax .swing .SwingUtilities ;
51
53
import org .netbeans .api .settings .ConvertAsProperties ;
52
54
import org .openide .actions .CopyAction ;
53
55
import org .openide .actions .CutAction ;
@@ -80,8 +82,9 @@ public final class SceneExplorerTopComponent extends TopComponent implements Exp
80
82
// private final Result<AbstractSceneExplorerNode> nodeSelectionResult;
81
83
private AbstractSceneExplorerNode selectedSpatial ;
82
84
private AbstractSceneExplorerNode lastSelected ;
83
- private Map <String , MaterialChangeProvider > materialChangeProviders = new HashMap <String , MaterialChangeProvider >();
84
- private Map <String , List <MaterialChangeListener >> materialChangeListeners = new HashMap <String , List <MaterialChangeListener >>();
85
+ private final Map <String , MaterialChangeProvider > materialChangeProviders = new HashMap <>();
86
+ private final Map <String , List <MaterialChangeListener >> materialChangeListeners = new HashMap <>();
87
+ private transient ExplorerManager explorerManager = new ExplorerManager ();
85
88
86
89
public SceneExplorerTopComponent () {
87
90
initComponents ();
@@ -90,8 +93,6 @@ public SceneExplorerTopComponent() {
90
93
setToolTipText (NbBundle .getMessage (SceneExplorerTopComponent .class , "HINT_SceneExplorerTopComponent" ));
91
94
setIcon (IconList .jmeLogo .getImage ());
92
95
associateLookup (ExplorerUtils .createLookup (explorerManager , getActionMap ()));
93
- // nodeSelectionResult = Utilities.actionsGlobalContext().lookupResult(AbstractSceneExplorerNode.class);
94
- // nodeSelectionResult.addLookupListener(this);
95
96
}
96
97
97
98
private void initActions () {
@@ -151,7 +152,15 @@ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRS
151
152
if (selectedSpatial == null ) {
152
153
return ;
153
154
}
154
- selectedSpatial .refresh (false );
155
+ SwingUtilities .invokeLater (() -> {
156
+ Node rootNode = SceneExplorerTopComponent .findInstance ().getExplorerManager ().getRootContext ();
157
+ if (rootNode instanceof JmeNode jmeNode ) {
158
+ SceneApplication .getApplication ().enqueue (new RefreshJmeSpatial (jmeNode , selectedSpatial .getName ()));
159
+ } else {
160
+ selectedSpatial .refresh (false );
161
+ }
162
+ });
163
+
155
164
}//GEN-LAST:event_jButton1ActionPerformed
156
165
// Variables declaration - do not modify//GEN-BEGIN:variables
157
166
private javax .swing .JScrollPane explorerScrollPane ;
@@ -164,6 +173,7 @@ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRS
164
173
* only, i.e. deserialization routines; otherwise you could get a
165
174
* non-deserialized instance. To obtain the singleton instance, use
166
175
* {@link #findInstance}.
176
+ * @return
167
177
*/
168
178
public static synchronized SceneExplorerTopComponent getDefault () {
169
179
if (instance == null ) {
@@ -175,6 +185,7 @@ public static synchronized SceneExplorerTopComponent getDefault() {
175
185
/**
176
186
* Obtain the SceneExplorerTopComponent instance. Never call
177
187
* {@link #getDefault} directly!
188
+ * @return
178
189
*/
179
190
public static synchronized SceneExplorerTopComponent findInstance () {
180
191
TopComponent win = WindowManager .getDefault ().findTopComponent (PREFERRED_ID );
@@ -183,8 +194,8 @@ public static synchronized SceneExplorerTopComponent findInstance() {
183
194
"Cannot find " + PREFERRED_ID + " component. It will not be located properly in the window system." );
184
195
return getDefault ();
185
196
}
186
- if (win instanceof SceneExplorerTopComponent ) {
187
- return ( SceneExplorerTopComponent ) win ;
197
+ if (win instanceof SceneExplorerTopComponent sceneExplorerTopComponent ) {
198
+ return sceneExplorerTopComponent ;
188
199
}
189
200
logger .warning (
190
201
"There seem to be multiple components with the '" + PREFERRED_ID
@@ -233,8 +244,8 @@ Object readProperties(java.util.Properties p) {
233
244
}
234
245
235
246
private void readPropertiesImpl (java .util .Properties p ) {
236
- String version = p .getProperty ("version" );
237
247
// TODO read your settings according to their version
248
+
238
249
}
239
250
240
251
@ Override
@@ -246,7 +257,6 @@ protected String preferredID() {
246
257
public UndoRedo getUndoRedo () {
247
258
return Lookup .getDefault ().lookup (UndoRedo .class );
248
259
}
249
- private transient ExplorerManager explorerManager = new ExplorerManager ();
250
260
251
261
@ Override
252
262
public ExplorerManager getExplorerManager () {
@@ -266,26 +276,15 @@ public void setSelectedNode(AbstractSceneExplorerNode node) {
266
276
explorerManager .setSelectedNodes (new Node []{});
267
277
// setActivatedNodes(new Node[]{});
268
278
}
269
- } catch (Exception ex ) {
279
+ } catch (PropertyVetoException ex ) {
270
280
Exceptions .printStackTrace (ex );
271
281
}
272
282
}
273
283
274
- // public void resultChanged(LookupEvent ev) {
275
- // Collection collection = nodeSelectionResult.allInstances();
276
- // for (Iterator it = collection.iterator(); it.hasNext();) {
277
- // Object object = it.next();
278
- // if (object instanceof AbstractSceneExplorerNode) {
279
- // return;
280
- // }
281
- // }
282
- // selectedSpatial = null;
283
- // }
284
284
@ Override
285
285
public void sceneOpened (SceneRequest request ) {
286
286
final JmeNode node = request .getJmeNode ();
287
- for (Iterator it = materialChangeProviders .values ().iterator (); it .hasNext ();) {
288
- MaterialChangeProvider provider = (MaterialChangeProvider ) it .next ();
287
+ for (MaterialChangeProvider provider : materialChangeProviders .values ()) {
289
288
provider .clearMaterialChangeListeners ();
290
289
}
291
290
if (node != null ) {
@@ -339,7 +338,7 @@ public void addMaterialChangeListener(MaterialChangeListener listener) {
339
338
logger .log (Level .FINE , "New material listener for : {0}" , listener .getKey ());
340
339
List <MaterialChangeListener > listeners = materialChangeListeners .get (listener .getKey ());
341
340
if (listeners == null ) {
342
- listeners = new ArrayList <MaterialChangeListener >();
341
+ listeners = new ArrayList <>();
343
342
materialChangeListeners .put (listener .getKey (), listeners );
344
343
}
345
344
listeners .add (listener );
@@ -383,7 +382,7 @@ public void swapMaterialChangeListener(MaterialChangeListener listener, String o
383
382
// assert newKey.equals(listener.getKey());
384
383
List <MaterialChangeListener > listeners = materialChangeListeners .get (newKey );
385
384
if (listeners == null ) {
386
- listeners = new ArrayList <MaterialChangeListener >();
385
+ listeners = new ArrayList <>();
387
386
materialChangeListeners .put (newKey , listeners );
388
387
}
389
388
listeners .add (listener );
@@ -397,6 +396,7 @@ public void swapMaterialChangeListener(MaterialChangeListener listener, String o
397
396
398
397
/**
399
398
* Terrain has a LOD control that requires the camera to function.
399
+ * @param jmeRootNode
400
400
*/
401
401
protected void setTerrainLodCamera (JmeNode jmeRootNode ) {
402
402
Camera camera = SceneApplication .getApplication ().getCamera ();
0 commit comments