Skip to content

Commit 182fa88

Browse files
committed
Editor fixes: bool values, node copies & auto-expand, menu rendering
1 parent 42d5210 commit 182fa88

File tree

7 files changed

+46
-15
lines changed

7 files changed

+46
-15
lines changed

engine/src/main/java/org/terasology/rendering/nui/contextMenu/ContextMenuScreen.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
import com.google.common.base.Preconditions;
1919
import com.google.common.collect.Lists;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
2022
import org.terasology.assets.ResourceUrn;
2123
import org.terasology.math.geom.Rect2i;
2224
import org.terasology.math.geom.Vector2i;
@@ -37,6 +39,7 @@
3739
*/
3840
public class ContextMenuScreen extends CoreScreenLayer {
3941

42+
private Logger logger = LoggerFactory.getLogger(ContextMenuScreen.class);
4043
public static final ResourceUrn ASSET_URI = new ResourceUrn("engine:contextMenuScreen");
4144

4245
/**
@@ -87,7 +90,6 @@ public void onClosed() {
8790
@Override
8891
public void onDraw(Canvas canvas) {
8992
canvas.addInteractionRegion(mainListener);
90-
9193
Vector2i currentPosition = null;
9294
int currentWidth = 0;
9395
for (ContextMenuLevel level : menuLevels) {
@@ -100,6 +102,14 @@ public void onDraw(Canvas canvas) {
100102
UIWidget menuWidget = level.getMenuWidget();
101103
Rect2i region = Rect2i.createFromMinAndSize(currentPosition,
102104
canvas.calculatePreferredSize(menuWidget));
105+
double percentageThreshold = 0.9;
106+
if (region.maxY() > canvas.getRegion().height() * percentageThreshold) {
107+
region = Rect2i.createFromMinAndMax(region.minX(),
108+
region.minY() - (region.maxY() - canvas.getRegion().height()) -
109+
(int) (canvas.getRegion().height() * (1 - percentageThreshold)),
110+
region.maxX(),
111+
canvas.getRegion().height());
112+
}
103113
currentWidth = canvas.calculatePreferredSize(menuWidget).getX() - 8;
104114
canvas.drawWidget(level.getMenuWidget(), region);
105115
}

engine/src/main/java/org/terasology/rendering/nui/editor/NUIEditorContextMenuBuilder.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,9 @@ private void createChild(String name, JsonTree node, Field field, Class clazz)
180180
}
181181
}
182182

183-
node.addChild(childValue);
183+
JsonTree child = new JsonTree(childValue);
184+
child.setExpanded(true);
185+
node.addChild(child);
184186
}
185187

186188
private boolean isWidget(Field field) throws IllegalAccessException {
@@ -230,6 +232,11 @@ private Object getFieldValue(Field field, Class clazz) throws IllegalAccessExcep
230232
} else {
231233
value = field.get(clazz.newInstance());
232234
}
235+
236+
if (value != null && value instanceof Boolean) {
237+
value = !(Boolean) value;
238+
}
239+
233240
return value != null ? value :
234241
field.getType().newInstance();
235242
}

engine/src/main/java/org/terasology/rendering/nui/editor/NUIEditorScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public void set(String value) {
170170
}
171171

172172
editor.subscribeTreeViewUpdate(() -> {
173-
JsonTree rootNode = (JsonTree) editor.getModel().getNode(0).getRoot();
173+
JsonTree rootNode = (JsonTree) editor.getModel().getNode(0).getRoot().copy();
174174
addToHistory(rootNode);
175175
setPreviewWidget(rootNode);
176176
updateConfig();

engine/src/main/java/org/terasology/rendering/nui/widgets/UITreeView.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -224,20 +224,24 @@ public boolean onKeyEvent(NUIKeyEvent event) {
224224

225225
if (id == Keyboard.KeyId.UP || id == Keyboard.KeyId.DOWN) {
226226
// Up/Down: change a node's position within the parent node.
227-
moveSelected(id);
228-
return true;
227+
return moveSelected(id);
229228
} else if (id == Keyboard.KeyId.DELETE) {
230229
// Delete: remove a node (and all its' children).
231-
removeSelected();
232-
return true;
230+
return removeSelected();
233231
} else if (ctrlDown && id == Keyboard.KeyId.C) {
234232
// Ctrl+C: copy a selected node.
235-
copy(model.get().getNode(state.getSelectedIndex()));
236-
return true;
233+
if (state.getSelectedIndex() != null) {
234+
copy(model.get().getNode(state.getSelectedIndex()));
235+
return true;
236+
}
237+
return false;
237238
} else if (ctrlDown && id == Keyboard.KeyId.V) {
238239
// Ctrl+V: paste the copied node as a child of the currently selected node.
239-
paste(model.get().getNode(state.getSelectedIndex()));
240-
return true;
240+
if (state.getSelectedIndex() != null) {
241+
paste(model.get().getNode(state.getSelectedIndex()));
242+
return true;
243+
}
244+
return false;
241245
} else {
242246
return false;
243247
}
@@ -413,7 +417,7 @@ private void updateListeners() {
413417
}
414418
}
415419

416-
private void moveSelected(int keyId) {
420+
private boolean moveSelected(int keyId) {
417421
if (state.getSelectedIndex() != null) {
418422
Tree<T> selectedNode = model.get().getNode(state.getSelectedIndex());
419423
Tree<T> parent = selectedNode.getParent();
@@ -443,16 +447,22 @@ private void moveSelected(int keyId) {
443447
fireUpdateListeners();
444448
}
445449
}
450+
451+
return true;
446452
}
453+
454+
return false;
447455
}
448456

449-
private void removeSelected() {
457+
private boolean removeSelected() {
450458
if (state.getSelectedIndex() != null) {
451459
model.get().removeNode(state.getSelectedIndex());
452460
state.setSelectedIndex(null);
453461

454462
fireUpdateListeners();
463+
return true;
455464
}
465+
return false;
456466
}
457467

458468
private boolean onNodeClick(int index, NUIMouseClickEvent event) {

engine/src/main/java/org/terasology/rendering/nui/widgets/treeView/JsonTree.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public JsonTree getSiblingWithKey(String key) {
9898

9999
@Override
100100
public Tree<JsonTreeValue> copy() {
101-
Tree<JsonTreeValue> copy = new JsonTree(this.value);
101+
Tree<JsonTreeValue> copy = new JsonTree(this.value.copy());
102102
copy.setExpanded(this.isExpanded());
103103

104104
for (Tree<JsonTreeValue> child : this.children) {

engine/src/main/java/org/terasology/rendering/nui/widgets/treeView/JsonTreeValue.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,8 @@ public String toString() {
124124
return key != null ? key : NULL_STRING;
125125
}
126126
}
127+
128+
public JsonTreeValue copy() {
129+
return new JsonTreeValue(key, value, type);
130+
}
127131
}

engine/src/main/java/org/terasology/rendering/nui/widgets/treeView/TreeModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public Tree<T> getNode(int index) {
7575
* @return The node with the given value.
7676
*/
7777
public Tree<T> getNodeByValue(T value) {
78-
Optional<Tree<T>> node = this.nodes.stream().filter(n -> n.getValue().equals(value)).findFirst();
78+
Optional<Tree<T>> node = this.nodes.stream().filter(n -> n.getValue() == value).findFirst();
7979
return node.isPresent() ? node.get() : null;
8080
}
8181

0 commit comments

Comments
 (0)