Skip to content

Commit 8a95a24

Browse files
committed
finished implementing improvements with layers.
1 parent b95b54d commit 8a95a24

File tree

9 files changed

+89
-36
lines changed

9 files changed

+89
-36
lines changed

src/com/ss/editor/ui/component/editor/impl/scene/AbstractSceneFileEditor.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,12 @@ public void selectNodeFromTree(@Nullable final Object object) {
679679
final ModelNode parentNode = modelNode.getParent();
680680
parent = parentNode == null ? null : parentNode.getElement();
681681
element = modelNode.getElement();
682+
} else {
683+
element = object;
684+
}
685+
686+
if (element instanceof SceneLayer || element instanceof SceneNode) {
687+
element = null;
682688
}
683689

684690
Spatial spatial = null;

src/com/ss/editor/ui/component/editor/impl/scene/SceneFileEditor.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -289,12 +289,11 @@ private void selectAppStateFromList(@Nullable final EditableSceneAppState appSta
289289
final FilterList filterList = getFilterList();
290290
filterList.clearSelection();
291291

292+
super.selectNodeFromTree(appState);
293+
292294
} finally {
293295
setNeedSyncSelection(true);
294296
}
295-
296-
final ModelPropertyEditor modelPropertyEditor = getModelPropertyEditor();
297-
modelPropertyEditor.buildFor(appState, null);
298297
}
299298

300299
/**
@@ -316,8 +315,7 @@ private void selectFilterFromList(@Nullable final EditableSceneFilter<?> sceneFi
316315
final AppStateList appStateList = getAppStateList();
317316
appStateList.clearSelection();
318317

319-
final ModelPropertyEditor modelPropertyEditor = getModelPropertyEditor();
320-
modelPropertyEditor.buildFor(sceneFilter, null);
318+
super.selectNodeFromTree(sceneFilter);
321319

322320
} finally {
323321
setNeedSyncSelection(true);
@@ -343,8 +341,7 @@ private void selectNodeFromLayersTree(@Nullable final Object object) {
343341
final FilterList filterList = getFilterList();
344342
filterList.clearSelection();
345343

346-
final ModelPropertyEditor modelPropertyEditor = getModelPropertyEditor();
347-
modelPropertyEditor.buildFor(object, null);
344+
super.selectNodeFromTree(object);
348345

349346
} finally {
350347
setNeedSyncSelection(true);
@@ -353,8 +350,6 @@ private void selectNodeFromLayersTree(@Nullable final Object object) {
353350

354351
@Override
355352
public void selectNodeFromTree(@Nullable final Object object) {
356-
super.selectNodeFromTree(object);
357-
358353
if (!isNeedSyncSelection()) return;
359354

360355
setNeedSyncSelection(false);
@@ -369,6 +364,8 @@ public void selectNodeFromTree(@Nullable final Object object) {
369364
final FilterList filterList = getFilterList();
370365
filterList.clearSelection();
371366

367+
super.selectNodeFromTree(object);
368+
372369
} finally {
373370
setNeedSyncSelection(true);
374371
}
Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package com.ss.editor.ui.control.layer;
22

3+
import static java.util.Objects.requireNonNull;
4+
import com.jme3.scene.Spatial;
5+
import com.ss.editor.model.undo.editor.ModelChangeConsumer;
36
import com.ss.editor.model.undo.editor.SceneChangeConsumer;
7+
import com.ss.editor.ui.control.layer.node.SceneLayerModelNode;
8+
import com.ss.editor.ui.control.model.property.operation.ModelPropertyOperation;
49
import com.ss.editor.ui.control.tree.AbstractNodeTreeCell;
5-
10+
import com.ss.editor.ui.control.tree.node.ModelNode;
11+
import com.ss.extension.scene.SceneLayer;
12+
import javafx.scene.control.TreeItem;
613
import org.jetbrains.annotations.NotNull;
714

815
/**
@@ -12,7 +19,35 @@
1219
*/
1320
public class LayerNodeTreeCell extends AbstractNodeTreeCell<SceneChangeConsumer, LayerNodeTree> {
1421

15-
public LayerNodeTreeCell(@NotNull final LayerNodeTree nodeTree) {
22+
LayerNodeTreeCell(@NotNull final LayerNodeTree nodeTree) {
1623
super(nodeTree);
1724
}
25+
26+
@Override
27+
protected boolean processDragDropped(@NotNull final TreeItem<ModelNode<?>> dragTreeItem,
28+
@NotNull final ModelNode<?> dragItem, @NotNull final ModelNode<?> item,
29+
final boolean isCopy, @NotNull final TreeItem<ModelNode<?>> newParentItem,
30+
@NotNull final Object element) {
31+
32+
final ModelNode<?> newParent = newParentItem.getValue();
33+
34+
if (element instanceof Spatial && newParent instanceof SceneLayerModelNode) {
35+
36+
final LayerNodeTree nodeTree = getNodeTree();
37+
final ModelChangeConsumer changeConsumer = requireNonNull(nodeTree.getChangeConsumer());
38+
39+
final Spatial spatial = (Spatial) element;
40+
final SceneLayer targetLayer = ((SceneLayerModelNode) newParent).getElement();
41+
final SceneLayer currentLayer = SceneLayer.getLayer(spatial);
42+
43+
final ModelPropertyOperation<Spatial, SceneLayer> operation =
44+
new ModelPropertyOperation<>(spatial, SceneLayer.KEY, targetLayer, currentLayer);
45+
operation.setApplyHandler((sp, layer) -> SceneLayer.setLayer(layer, sp));
46+
47+
changeConsumer.execute(operation);
48+
return false;
49+
}
50+
51+
return super.processDragDropped(dragTreeItem, dragItem, item, isCopy, newParentItem, element);
52+
}
1853
}

src/com/ss/editor/ui/control/layer/node/SceneLayerModelNode.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.ss.editor.ui.control.layer.node;
22

33
import static java.util.Objects.requireNonNull;
4-
54
import com.jme3.scene.Spatial;
65
import com.ss.editor.model.undo.editor.ChangeConsumer;
76
import com.ss.editor.model.undo.editor.ModelChangeConsumer;
87
import com.ss.editor.model.undo.editor.SceneChangeConsumer;
98
import com.ss.editor.ui.Icons;
109
import com.ss.editor.ui.control.model.node.spatial.NodeModelNode;
10+
import com.ss.editor.ui.control.model.node.spatial.SpatialModelNode;
1111
import com.ss.editor.ui.control.model.tree.action.RenameNodeAction;
1212
import com.ss.editor.ui.control.model.tree.action.operation.RenameNodeOperation;
1313
import com.ss.editor.ui.control.model.tree.action.operation.scene.ChangeVisibleSceneLayerOperation;
@@ -17,18 +17,14 @@
1717
import com.ss.editor.ui.control.tree.node.ModelNode;
1818
import com.ss.editor.ui.control.tree.node.ModelNodeFactory;
1919
import com.ss.extension.scene.SceneLayer;
20-
21-
import org.jetbrains.annotations.NotNull;
22-
import org.jetbrains.annotations.Nullable;
23-
2420
import javafx.collections.ObservableList;
2521
import javafx.scene.control.MenuItem;
2622
import javafx.scene.image.Image;
23+
import org.jetbrains.annotations.NotNull;
24+
import org.jetbrains.annotations.Nullable;
2725
import rlib.util.array.Array;
2826
import rlib.util.array.ArrayFactory;
2927

30-
import java.util.concurrent.atomic.AtomicInteger;
31-
3228
/**
3329
* The implementation of the {@link NodeModelNode} for representing the {@link SceneLayer} in the editor.
3430
*
@@ -74,7 +70,7 @@ public Array<ModelNode<?>> getChildren(@NotNull final AbstractNodeTree<?> nodeTr
7470

7571
final Array<ModelNode<?>> result = ArrayFactory.newArray(ModelNode.class);
7672
final ModelChangeConsumer changeConsumer = (ModelChangeConsumer) requireNonNull(nodeTree.getChangeConsumer());
77-
73+
7874
final Spatial currentModel = changeConsumer.getCurrentModel();
7975
currentModel.depthFirstTraversal(spatial -> {
8076
final SceneLayer layer = SceneLayer.getLayer(spatial);
@@ -86,6 +82,14 @@ public Array<ModelNode<?>> getChildren(@NotNull final AbstractNodeTree<?> nodeTr
8682
return result;
8783
}
8884

85+
@Override
86+
public boolean canAccept(@NotNull final ModelNode<?> child) {
87+
if (!(child instanceof SpatialModelNode<?>)) return false;
88+
final SpatialModelNode<?> spatialNode = (SpatialModelNode<?>) child;
89+
final Spatial element = spatialNode.getElement();
90+
return SceneLayer.getLayer(element) != getElement();
91+
}
92+
8993
@NotNull
9094
@Override
9195
public String getName() {

src/com/ss/editor/ui/control/model/node/spatial/SpatialModelNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
*/
5050
public class SpatialModelNode<T extends Spatial> extends ModelNode<T> {
5151

52-
public SpatialModelNode(@NotNull final T element, final long objectId) {
52+
SpatialModelNode(@NotNull final T element, final long objectId) {
5353
super(element, objectId);
5454
}
5555

src/com/ss/editor/ui/control/model/property/ModelPropertyEditor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.ss.editor.util.NodeUtils;
88
import org.jetbrains.annotations.NotNull;
99
import org.jetbrains.annotations.Nullable;
10+
import rlib.ui.util.FXUtils;
1011
import tonegod.emitter.ParticleEmitterNode;
1112
import tonegod.emitter.node.ParticleNode;
1213

src/com/ss/editor/ui/control/model/property/builder/impl/SpatialPropertyBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,18 @@ protected void buildForImpl(@NotNull final Object object, @Nullable final Object
134134
final Collection<String> userDataKeys = spatial.getUserDataKeys();
135135
if (userDataKeys.isEmpty()) return;
136136

137+
int count = 0;
138+
139+
for (final String key : userDataKeys) {
140+
if (SceneLayer.KEY.equals(key)) continue;
141+
if (SceneEditorControl.LOADED_MODEL_KEY.equals(key)) continue;
142+
count++;
143+
}
144+
145+
if(count < 1) {
146+
return;
147+
}
148+
137149
addSplitLine(container);
138150

139151
final Array<String> sortedKeys = ArrayFactory.newSortedArray(String.class);

src/com/ss/editor/ui/control/model/tree/ModelNodeTreeCell.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ss.editor.ui.control.model.tree;
22

3+
import static java.util.Objects.requireNonNull;
34
import com.jme3.scene.Node;
45
import com.jme3.scene.Spatial;
56
import com.ss.editor.model.undo.editor.ModelChangeConsumer;
@@ -20,7 +21,7 @@
2021
*/
2122
public class ModelNodeTreeCell extends AbstractNodeTreeCell<ModelChangeConsumer, ModelNodeTree> {
2223

23-
public ModelNodeTreeCell(@NotNull final ModelNodeTree nodeTree) {
24+
ModelNodeTreeCell(@NotNull final ModelNodeTree nodeTree) {
2425
super(nodeTree);
2526
}
2627

@@ -32,7 +33,7 @@ protected boolean processDragDropped(@NotNull final TreeItem<ModelNode<?>> dragT
3233
if (element instanceof Spatial) {
3334

3435
final ModelNodeTree nodeTree = getNodeTree();
35-
final ModelChangeConsumer changeConsumer = Objects.requireNonNull(nodeTree.getChangeConsumer());
36+
final ModelChangeConsumer changeConsumer = requireNonNull(nodeTree.getChangeConsumer());
3637

3738
final TreeItem<ModelNode<?>> parent = dragTreeItem.getParent();
3839

src/com/ss/editor/ui/control/tree/AbstractNodeTreeCell.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public abstract class AbstractNodeTreeCell<C extends ChangeConsumer, M extends A
5555

5656
private static final Insets VISIBLE_ICON_OFFSET = new Insets(0, 0, 0, 2);
5757

58-
public final StringConverter<ModelNode<?>> stringConverter = new StringConverter<ModelNode<?>>() {
58+
private final StringConverter<ModelNode<?>> stringConverter = new StringConverter<ModelNode<?>>() {
5959

6060
@Override
6161
public String toString(@NotNull final ModelNode<?> object) {
@@ -185,14 +185,14 @@ public void startEdit() {
185185
/**
186186
* @return true if need to ignore update.
187187
*/
188-
public boolean isIgnoreUpdate() {
188+
private boolean isIgnoreUpdate() {
189189
return ignoreUpdate;
190190
}
191191

192192
/**
193193
* @param ignoreUpdate the flag of ignoring updates.
194194
*/
195-
public void setIgnoreUpdate(final boolean ignoreUpdate) {
195+
private void setIgnoreUpdate(final boolean ignoreUpdate) {
196196
this.ignoreUpdate = ignoreUpdate;
197197
}
198198

@@ -205,7 +205,7 @@ public void cancelEdit() {
205205
}
206206

207207
@Override
208-
public void commitEdit(final ModelNode<?> newValue) {
208+
public void commitEdit(@NotNull final ModelNode<?> newValue) {
209209
super.commitEdit(newValue);
210210
final TreeItem<ModelNode<?>> treeItem = getTreeItem();
211211
if (treeItem != null) treeItem.setGraphic(content);
@@ -273,7 +273,7 @@ protected M getNodeTree() {
273273
/**
274274
* Handle a mouse click.
275275
*/
276-
private void processClick(final MouseEvent event) {
276+
private void processClick(@NotNull final MouseEvent event) {
277277

278278
final ModelNode<?> item = getItem();
279279
if (item == null) return;
@@ -291,7 +291,7 @@ private void processClick(final MouseEvent event) {
291291
/**
292292
* Handle stopping dragging.
293293
*/
294-
private void stopDrag(final DragEvent event) {
294+
private void stopDrag(@NotNull final DragEvent event) {
295295
setId(CSSIds.MODEL_NODE_TREE_CELL);
296296
setCursor(Cursor.DEFAULT);
297297
event.consume();
@@ -300,7 +300,7 @@ private void stopDrag(final DragEvent event) {
300300
/**
301301
* Handle starting dragging.
302302
*/
303-
private void startDrag(final MouseEvent mouseEvent) {
303+
private void startDrag(@NotNull final MouseEvent mouseEvent) {
304304

305305
final ModelNode<?> item = getItem();
306306
if (item == null) return;
@@ -328,7 +328,7 @@ private void startDrag(final MouseEvent mouseEvent) {
328328
/**
329329
* Handle dropping a dragged element.
330330
*/
331-
protected void dragDropped(@NotNull final DragEvent dragEvent) {
331+
private void dragDropped(@NotNull final DragEvent dragEvent) {
332332

333333
final Dragboard dragboard = dragEvent.getDragboard();
334334
final Long objectId = (Long) dragboard.getContent(DATA_FORMAT);
@@ -376,14 +376,11 @@ protected boolean processDragDropped(@NotNull final TreeItem<ModelNode<?>> dragT
376376
/**
377377
* Handle entering a dragged element.
378378
*/
379-
private void dragOver(final DragEvent dragEvent) {
379+
private void dragOver(@NotNull final DragEvent dragEvent) {
380380

381381
final Dragboard dragboard = dragEvent.getDragboard();
382382
final Long objectId = (Long) dragboard.getContent(DATA_FORMAT);
383-
384-
if (objectId == null) {
385-
return;
386-
}
383+
if (objectId == null) return;
387384

388385
final TreeView<ModelNode<?>> treeView = getTreeView();
389386
final TreeItem<ModelNode<?>> dragTreeItem = findItem(treeView, objectId);
@@ -405,7 +402,7 @@ private void dragOver(final DragEvent dragEvent) {
405402
/**
406403
* Handle exiting a dragged element.
407404
*/
408-
private void dragExited(final DragEvent dragEvent) {
405+
private void dragExited(@NotNull final DragEvent dragEvent) {
409406
setId(CSSIds.MODEL_NODE_TREE_CELL);
410407
}
411408
}

0 commit comments

Comments
 (0)