Skip to content

Commit bc8d2fe

Browse files
committed
Fixing issue Bram-Hub#863.
1 parent 01e09c4 commit bc8d2fe

File tree

4 files changed

+59
-17
lines changed

4 files changed

+59
-17
lines changed

src/main/java/edu/rpi/legup/history/DeleteTreeElementCommand.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ public void executeCommand() {
5353
for (TreeElementView selectedView : selectedViews) {
5454
System.out.println("DELETED");
5555
TreeElement element = selectedView.getTreeElement();
56-
tree.removeTreeElement(element);
5756
puzzle.notifyTreeListeners(listener -> listener.onTreeElementRemoved(element));
57+
tree.removeTreeElement(element);
5858
}
5959

6060
final TreeViewSelection newSelection = new TreeViewSelection(newSelectedView);

src/main/java/edu/rpi/legup/history/MergeCommand.java

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public void executeCommand() {
6868
transition.addParent(node);
6969
}
7070

71+
// puzzle.notifyTreeListeners(listener -> listener.onTreeElementAdded(mergedNode));
7172
puzzle.notifyTreeListeners(listener -> listener.onTreeElementAdded(transition));
7273

7374
final TreeViewSelection newSelection = new TreeViewSelection();

src/main/java/edu/rpi/legup/model/tree/Tree.java

+49-13
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package edu.rpi.legup.model.tree;
22

3+
import com.google.firebase.database.core.operation.Merge;
34
import edu.rpi.legup.controller.TreeController;
45
import edu.rpi.legup.model.gameboard.Board;
6+
import edu.rpi.legup.model.rules.MergeRule;
57
import edu.rpi.legup.ui.proofeditorui.treeview.TreeView;
6-
import java.util.ArrayList;
7-
import java.util.HashSet;
8-
import java.util.List;
9-
import java.util.Set;
8+
9+
import java.util.*;
1010

1111
/**
1212
* Represents a tree structure in a puzzle. The tree consists of {@link TreeNode}s and {@link
@@ -96,18 +96,54 @@ public TreeElement addTreeElement(TreeTransition transition, TreeNode treeNode)
9696
public void removeTreeElement(TreeElement element) {
9797
if (element.getType() == TreeElementType.NODE) {
9898
TreeNode node = (TreeNode) element;
99-
100-
node.getParent().removeChild(node);
101-
node.getParent().setChildNode(null);
99+
removeTreeNode(node);
102100
} else {
103-
TreeTransition transition = (TreeTransition) element;
101+
TreeTransition trans = (TreeTransition) element;
102+
removeTreeTransition(trans);
103+
104+
// trans.getParents().forEach(n -> n.removeChild(trans));
105+
// TreeController treeController = new TreeController();
106+
// TreeView treeView = new TreeView(treeController);
107+
// treeView.removeTreeTransition(trans);
108+
}
109+
}
110+
111+
public void removeTreeNode(TreeNode node) {
112+
// node.getParent().removeChild(node);
113+
node.getParent().setChildNode(null);
114+
115+
List<TreeTransition> children = node.getChildren();
116+
if (children != null) {
117+
Iterator<TreeTransition> childrenItr = children.iterator();
118+
while (childrenItr.hasNext()) {
119+
TreeTransition transition = childrenItr.next();
120+
if (transition.getRule() instanceof MergeRule) {
121+
Iterator<TreeNode> iterator = transition.getParents().iterator();
122+
while (iterator.hasNext()) {
123+
TreeNode parent = iterator.next();
124+
if (parent != node) {
125+
parent.getChildren().remove(transition);
126+
}
127+
}
128+
} else {
129+
removeTreeTransition(transition);
130+
}
131+
}
132+
}
133+
}
134+
135+
public void removeTreeTransition(TreeTransition trans) {
136+
List<TreeNode> parents = trans.getParents();
137+
138+
trans.getParents().forEach(n -> n.removeChild(trans));
139+
TreeController treeController = new TreeController();
140+
TreeView treeView = new TreeView(treeController);
141+
treeView.removeTreeTransition(trans);
104142

105-
transition.getParents().forEach(n -> n.removeChild(transition));
106-
TreeController treeController = new TreeController();
107-
TreeView treeView = new TreeView(treeController);
108-
treeView.removeTreeTransition(transition);
109-
transition.getParents().get(0).getChildren().forEach(TreeTransition::reverify);
143+
if (trans.getChildNode() != null) {
144+
removeTreeNode(trans.getChildNode());
110145
}
146+
parents.getFirst().getChildren().forEach(TreeTransition::reverify);
111147
}
112148

113149
/**

src/main/java/edu/rpi/legup/ui/proofeditorui/treeview/TreeView.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import edu.rpi.legup.model.gameboard.PuzzleElement;
1212
import edu.rpi.legup.model.observer.ITreeListener;
1313
import edu.rpi.legup.model.rules.CaseRule;
14+
import edu.rpi.legup.model.rules.MergeRule;
1415
import edu.rpi.legup.model.rules.Rule;
1516
import edu.rpi.legup.model.tree.Tree;
1617
import edu.rpi.legup.model.tree.TreeElement;
@@ -420,7 +421,6 @@ public void onTreeElementRemoved(TreeElement element) {
420421
}
421422
}
422423
}
423-
424424
transView.getParentViews().forEach(n -> n.removeChildrenView(transView));
425425
removeTreeTransition(trans);
426426
}
@@ -464,7 +464,7 @@ public TreeElementView getElementView(TreeElement element) {
464464
public void removeTreeNode(TreeNode node) {
465465
viewMap.remove(node);
466466
if (node.getChildren() != null) {
467-
node.getChildren().forEach(t -> removeTreeTransition(t));
467+
node.getChildren().forEach(this::removeTreeTransition);
468468
}
469469

470470
List<TreeTransition> children = node.getChildren();
@@ -557,6 +557,11 @@ public void removeTreeTransition(TreeTransition trans) {
557557
nextAncestorIsCaseRule = true;
558558
}
559559
}
560+
} else if (rule instanceof MergeRule) {
561+
TreeNodeView view = (TreeNodeView) viewMap.get(parent);
562+
if (view != null) {
563+
view.getChildrenViews().clear();
564+
}
560565
}
561566
}
562567
}
@@ -671,7 +676,7 @@ public void drawTree(Graphics2D graphics2D) {
671676
dimension.height = (int) rootNodeView.getSpan();
672677

673678
redrawTree(graphics2D, rootNodeView);
674-
LOGGER.debug("DrawTree: dimensions - " + dimension.width + "x" + dimension.height);
679+
LOGGER.debug("DrawTree: dimensions - " + dimension.width + "x" + dimension.height);
675680
}
676681
}
677682

0 commit comments

Comments
 (0)