/* * The MIT License * * Copyright 2013 Andreas Giemza. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package de.andreasgiemza.jgeagle.gui; import de.andreasgiemza.jgeagle.JGeagle; import de.andreasgiemza.jgeagle.repo.data.EagleFile; import de.andreasgiemza.jgeagle.gui.eaglefilestree.EagleFilesTreeCellRenderer; import de.andreasgiemza.jgeagle.gui.eaglefilestree.EagleFilesTreeSelectionListener; import de.andreasgiemza.jgeagle.repo.Repo; import java.nio.file.Path; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeSelectionModel; /** * * @author Andreas Giemza */ public class EagleFilesTree { private final JTree jTree; public EagleFilesTree(JGeagle jGeagle, JTree jTree) { this.jTree = jTree; setupJTree(jGeagle); } private void setupJTree(JGeagle jGeagle) { jTree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION); jTree.addTreeSelectionListener( new EagleFilesTreeSelectionListener(jGeagle, jTree)); jTree.setCellRenderer(new EagleFilesTreeCellRenderer()); } public void buildAndDisplayTree(Repo repo) { DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(repo.getRepoName()); for (EagleFile eagleFile : repo.getEagleFiles()) { DefaultMutableTreeNode lastNode = rootNode; for (Path pathPart : eagleFile.getRepoFile()) { if (!pathPart.toString().equals(eagleFile.getRepoFile().getFileName().toString())) { Boolean found = false; for (int i = 0; i < lastNode.getChildCount(); i++) { if (pathPart.toString().equals(lastNode.getChildAt(i).toString())) { lastNode = (DefaultMutableTreeNode) lastNode.getChildAt(i); found = true; } } if (!found) { DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(pathPart.toString()); lastNode.add(newNode); lastNode = newNode; } } else { lastNode.add(new DefaultMutableTreeNode(eagleFile)); } } } DefaultTreeModel treeModel = new DefaultTreeModel(rootNode); jTree.setModel(treeModel); } public void expandAll() { for (int i = 0; i < jTree.getRowCount(); i++) { jTree.expandRow(i); } } public void collapseAll() { for (int i = jTree.getRowCount() - 1; i >= 1; i--) { jTree.collapseRow(i); } } public void reset() { jTree.setModel(null); } }