List<TreeNode> parentData;
if (n == 1) {
parentData = (List<TreeNode>)treeData;
} else {
Path parentPath = new Path(path, 0, n - 1);
parentData = (List<TreeNode>)Sequence.Tree.get(treeData, parentPath);
}
// Notifying the parent will close the popup
if (parentData.getComparator() == null) {
parentData.update(path.get(n - 1), treeNode);
} else {
// Save local reference to members variables before they get cleared
TreeView treeView = this.treeView;
Path path = this.path;
parentData.remove(path.get(n - 1), 1);
parentData.add(treeNode);
// Re-select the node, and make sure it's visible
Path newPath = new Path(path, 0, n - 1);
newPath.add(parentData.indexOf(treeNode));
treeView.setSelectedPath(newPath);
treeView.scrollAreaToVisible(treeView.getNodeBounds(newPath));
}
}