package devopsdistilled.operp.client.main; import java.awt.Component; import java.util.EventListener; import java.util.HashMap; import java.util.Map; import javax.swing.JTree; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import devopsdistilled.operp.client.abstracts.TaskPane; public class NavigationTree { Map<String, DefaultMutableTreeNode> nodeMap; private final DefaultTreeModel treeModel; private JTree tree; private EventListener listener; public JTree getTree() { return tree; } public void setTree(JTree tree) { this.tree = tree; } public NavigationTree() { nodeMap = new HashMap<>(); TaskPane rootNodePane = new DefaultTaskPane(); String rootNodeDesc = new String(rootNodePane.toString()); DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode( rootNodePane); treeModel = new DefaultTreeModel(rootNode); nodeMap.put(rootNodeDesc, rootNode); tree = new JTree(treeModel); tree.setRootVisible(true); tree.setSelectionRow(0); tree.setCellRenderer(new DefaultTreeCellRenderer() { private static final long serialVersionUID = 6394043979244091638L; @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; TaskPane taskPane = (TaskPane) node.getUserObject(); if (taskPane.getIcon() != null) setIcon(taskPane.getIcon()); else setIcon(leafIcon); tree.revalidate(); tree.repaint(); return this; } }); } public void setListener(EventListener listener) { this.listener = listener; tree.addTreeSelectionListener((TreeSelectionListener) this.listener); } public void addNode(TaskPane taskPane) { addNode(taskPane, new DefaultTaskPane().toString()); } public void addNode(TaskPane taskPane, int index) { addNode(taskPane, new DefaultTaskPane().toString(), index); } public void addNode(TaskPane taskPane, String parentTaskPaneToString) { addNode(taskPane, parentTaskPaneToString, -1); } public void addNode(TaskPane taskPane, String parentTaskPaneToString, int index) { if (nodeMap.containsKey(parentTaskPaneToString)) { DefaultMutableTreeNode parentNode = nodeMap .get(parentTaskPaneToString); DefaultMutableTreeNode node = new DefaultMutableTreeNode(taskPane); if (index == -1) parentNode.add(node); else parentNode.insert(node, index); nodeMap.put(taskPane.toString(), node); } else throw new IllegalArgumentException("Illegal arguements in addNode"); } }