package krasa.grepconsole.gui.table; import com.intellij.ui.treeStructure.treetable.ListTreeTableModelOnColumns; import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; /** * @author Vojtech Krasa */ public class TableUtils { public static void reloadTree(final CheckboxTreeTable treeTable) { final List<TreePath> expandedPaths = TreeUtil.collectExpandedPaths(treeTable.getTree()); ((ListTreeTableModelOnColumns) treeTable.getTree().getModel()).reload(); TreeUtil.restoreExpandedPaths(treeTable.getTree(), expandedPaths); } public static void selectNode(DefaultMutableTreeNode newChild, final CheckboxTreeTable table) { if (newChild != null) { table.getTree().setSelectionPath(new TreePath(newChild.getPath())); } } public static void selectNodes(List<DefaultMutableTreeNode> selectedNodes, CheckboxTreeTable table) { List<TreePath> treePaths = new ArrayList<>(); for (DefaultMutableTreeNode selectedNode : selectedNodes) { treePaths.add(new TreePath(selectedNode.getPath())); } table.getTree().setSelectionPaths(treePaths.toArray(new TreePath[treePaths.size()])); } public static void expand(GrepExpressionGroupTreeNode newChild, CheckboxTreeTable table) { expand(table.getTree(), new TreePath(newChild.getPath()), 1); } public static void expand(List<DefaultMutableTreeNode> nodes, CheckboxTreeTable table) { for (DefaultMutableTreeNode node : nodes) { expand(table.getTree(), new TreePath(node.getPath()), 1); } } private static void expand(@NotNull JTree tree, @NotNull TreePath path, int levels) { if (levels != 0) { tree.expandPath(path); TreeNode node = (TreeNode) path.getLastPathComponent(); Enumeration children = node.children(); while (children.hasMoreElements()) { expand(tree, path.pathByAddingChild(children.nextElement()), levels - 1); } } } }