/* * This file is part of GumTree. * * GumTree is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GumTree is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with GumTree. If not, see <http://www.gnu.org/licenses/>. * * Copyright 2011-2015 Jean-Rémy Falleri <jr.falleri@gmail.com> * Copyright 2011-2015 Floréal Morandat <florealm@gmail.com> */ package com.github.gumtreediff.client.diff.ui.swing; import com.github.gumtreediff.tree.ITree; import com.github.gumtreediff.tree.TreeContext; import com.github.gumtreediff.tree.ITree; import com.github.gumtreediff.tree.TreeContext; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreeSelectionModel; import java.awt.*; import java.util.HashMap; import java.util.Map; public class TreePanel extends JPanel { private static final long serialVersionUID = 1L; private JTree jtree; private TreeContext tree; private Map<ITree, DefaultMutableTreeNode> trees; public TreePanel(final TreeContext tree, TreeCellRenderer renderer) { super(new GridLayout(1, 0)); trees = new HashMap<>(); this.tree = tree; ITree root = tree.getRoot(); DefaultMutableTreeNode top = new DefaultMutableTreeNode(root); trees.put(root, top); for (ITree child: root.getChildren()) createNodes(top, child); jtree = new JTree(top) { private static final long serialVersionUID = 1L; public String convertValueToText(Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value != null) { ITree node = ((ITree) ((DefaultMutableTreeNode) value).getUserObject()); return node.toPrettyString(tree); } return ""; } }; jtree.setCellRenderer(renderer); jtree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); JScrollPane treeView = new JScrollPane(jtree); Dimension minimumSize = new Dimension(100, 50); treeView.setMinimumSize(minimumSize); add(treeView); } public TreePanel(TreeContext tree) { this(tree, new DefaultTreeCellRenderer()); } public JTree getJTree() { return jtree; } public Map<ITree, DefaultMutableTreeNode> getTrees() { return trees; } public TreeContext getTree() { return this.tree; } public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) jtree.getLastSelectedPathComponent(); if (node == null) return; Object nodeInfo = node.getUserObject(); System.out.println(nodeInfo); } private void createNodes(DefaultMutableTreeNode parent, ITree tree) { DefaultMutableTreeNode node = new DefaultMutableTreeNode(tree); trees.put(tree, node); parent.add(node); for (ITree child: tree.getChildren()) createNodes(node, child); } }