-
Notifications
You must be signed in to change notification settings - Fork 1
/
TreeDisplay.java
104 lines (75 loc) · 3.2 KB
/
TreeDisplay.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package xmlMVC;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Iterator;
public class TreeDisplay extends JPanel {
private XMLView parentXMLView;
int childLeftIndent = 40;
Box verticalFormBox;
TreeDisplay(XMLView parent) {
parentXMLView = parent;
this.setLayout(new BorderLayout());
this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
verticalFormBox = Box.createVerticalBox();
this.add(verticalFormBox, BorderLayout.NORTH);
// get the elementPanel JPanel from the xmlElement
if (parentXMLView.getRootNode() != null) {
JPanel newFormField = parentXMLView.getRootNode().getXmlElement().getFormField();
verticalFormBox.add(newFormField);
// pass the node and the Box that already contains it to buildFormTree()
// this will get the nodes children and add them to the Box (within a new Box)
buildFormTree(parentXMLView.getRootNode(), verticalFormBox);
}
}
TreeDisplay(XmlNode rootNode) {
this.setLayout(new BorderLayout());
this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
verticalFormBox = Box.createVerticalBox();
this.add(verticalFormBox, BorderLayout.NORTH);
// get the elementPanel JPanel from the xmlElement
if (rootNode != null) {
JPanel newFormField = rootNode.getXmlElement().getFormField();
verticalFormBox.add(newFormField);
// pass the node and the Box that already contains it to buildFormTree()
// this will get the nodes children and add them to the Box (within a new Box)
buildFormTree(rootNode, verticalFormBox);
}
}
// this will get the node's children and add them to the Box (within a new Box)
public void buildFormTree(XmlNode dfNode, Box verticalBox) {
ArrayList<XmlNode> children = dfNode.getChildren();
Box childBox = Box.createVerticalBox();
childBox.setBorder(BorderFactory.createEmptyBorder(0, childLeftIndent, 0, 0));
// the node gets a ref to the Box (used for collapsing. Box becomes hidden)
dfNode.setChildBox(childBox);
// set visibility of the childBox wrt collapsed boolean of xmlElement
// & sets collapse button visible if dataFieldNode has children
dfNode.getXmlElement().refreshTitleCollapsed();
// for each child, get their JPanel, add it to the childBox
for (XmlNode child: children){
JPanel newFormField = child.getXmlElement().getFormField();
childBox.add(newFormField);
// recursively build the tree below each child
buildFormTree(child, childBox);
}
// add the new childBox to it's parent
verticalBox.add(childBox);
}
public void refreshForm() {
// update reference to the root
XmlNode protocolRootNode = parentXMLView.getRootNode();
verticalFormBox.setVisible(false); // otherwise if the new form is smaller, old one still visible
this.remove(verticalFormBox);
verticalFormBox = Box.createVerticalBox();
JPanel newFormField = protocolRootNode.getXmlElement().getFormField();
verticalFormBox.add(newFormField);
buildFormTree(protocolRootNode, verticalFormBox);
this.add(verticalFormBox, BorderLayout.NORTH);
this.getParent().getParent().validate();
this.invalidate();
this.repaint();
}
}