// Find data nodes in tree nodes
for (MutableTreeNode treeNode : leafNodes) {
RecursiveFindDataNodes(treeNode, dataNodes);
}
PopupMenuBuilder menuBuilder;
if (dataNodes.size() > 0) {
if (leafNodes.size() == 1) {
MutableTreeNode leafNode = leafNodes.get(0);
menuBuilder = new PopupMenuBuilder(leafNode.toString());
if(leafNode instanceof DefaultMutableTreeNode &&
((DefaultMutableTreeNode)leafNode).getUserObject() instanceof String) {
menuBuilder.addAction(new RenameAction((DefaultMutableTreeNode)leafNode));
}
menuBuilder.addAction(new ExportDelimitedFileAction(DataListView.this, leafNode));
menuBuilder.addAction(new ExportMatlabAction(DataListView.this, leafNode));
if (leafNode instanceof NengoTreeNode) {
NengoTreeNode neoTreeNode = (NengoTreeNode) leafNode;
if (neoTreeNode.getNeoNode() != null) {
menuBuilder.addAction(new ConfigureAction("Inspector",
neoTreeNode.getNeoNode()));
}
}
if (leafNode instanceof DataTreeNode) {
((DataTreeNode) leafNode).constructPopupMenu(menuBuilder, dataModel);
}
} else {
menuBuilder = new PopupMenuBuilder(dataNodes.size() + " data nodes selected");
menuBuilder.addAction(new PlotNodesAction(dataNodes));
}
} else if (leafNodes.size() == 1) {
menuBuilder = new PopupMenuBuilder(leafNodes.get(0).toString());
} else {
menuBuilder = new PopupMenuBuilder(leafNodes.size() + " nodes selected");
}
// make sure we don't remove the node representing the network
List<MutableTreeNode> removeNodes = new ArrayList<MutableTreeNode>();
TreeNode root = (TreeNode) dataModel.getRoot();
for (MutableTreeNode node : leafNodes) {
if (node.getParent() == root) {
Enumeration<MutableTreeNode> childEnumerator = node.children();
while (childEnumerator.hasMoreElements()) {
removeNodes.add(childEnumerator.nextElement());
}
} else {
removeNodes.add(node);
}
}
menuBuilder.addAction(new RemoveTreeNodes(removeNodes));
menu = menuBuilder.toJPopupMenu();
if (menu != null) {
menu.show(e.getComponent(), e.getPoint().x, e.getPoint().y);
menu.setVisible(true);
}