001    /*
002     * Copyright (c) 2005 Einar Pehrson, Malin Johansson and Sofia Nilsson
003     *
004     * This file is part of
005     * CleanSheets Extension for Dependency Trees
006     *
007     * CleanSheets Extension for Dependency Trees is free software; you can
008     * redistribute it and/or modify it under the terms of the GNU General Public
009     * License as published by the Free Software Foundation; either version 2 of
010     * the License, or (at your option) any later version.
011     *
012     * CleanSheets Extension for Dependency Trees is distributed in the hope that
013     * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
014     * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
015     * See the GNU General Public License for more details.
016     *
017     * You should have received a copy of the GNU General Public License
018     * along with CleanSheets Extension for Dependency Trees; if not, write to the
019     * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020     * Boston, MA  02111-1307  USA
021     */
022    package csheets.ext.deptree;
023    
024    import java.awt.GridLayout;
025    
026    import javax.swing.BorderFactory;
027    import javax.swing.Icon;
028    import javax.swing.ImageIcon;
029    import javax.swing.JComponent;
030    import javax.swing.JPanel;
031    import javax.swing.JScrollPane;
032    import javax.swing.border.TitledBorder;
033    
034    import csheets.ui.ctrl.UIController;
035    import csheets.ui.ext.UIExtension;
036    
037    /**
038     * The user interface extension for dependency trees.
039     * @author Einar Pehrson
040     */
041    public class DependencyTreeUIExtension extends UIExtension {
042    
043            /** The icon to display with the extension's name */
044            private Icon icon;
045    
046            /** A panel in which a precedents tree and a dependents tree is displayed */
047            private JComponent sideBar;
048    
049            /**
050             * Creates a new user interface extension..
051             * @param extension the extension for which components are provided
052             * @param uiController the user interface controller
053             */
054            public DependencyTreeUIExtension(DependencyTreeExtension extension,
055                            UIController uiController) {
056                    super(extension, uiController);
057            }
058    
059            /**
060             * Returns an icon to display with the extension's name.
061             * @return an icon with a tree
062             */
063            public Icon getIcon() {
064                    if (icon == null)
065                            icon = new ImageIcon(
066                                    DependencyTreeExtension.class.getResource("res/img/logo.gif"));
067                    return icon;
068            }
069    
070            /**
071             * Returns a panel in which a precedents tree and a dependents tree is
072             * displayed.
073             * @return a panel with two dependency trees
074             */
075            public JComponent getSideBar() {
076                    if (sideBar == null) {
077                            sideBar = new JPanel(new GridLayout(2, 1));
078                            sideBar.setName(DependencyTreeExtension.NAME);
079            
080                            // Creates components
081                            PrecedentsTree precedentsTree = new PrecedentsTree(uiController);
082                            JScrollPane precedentsPane = new JScrollPane(precedentsTree);
083                            DependentsTree dependentsTree = new DependentsTree(uiController);
084                            JScrollPane dependentsPane = new JScrollPane(dependentsTree);
085            
086                            // Adds borders
087                            TitledBorder border = BorderFactory.createTitledBorder("Precedents");
088                            border.setTitleJustification(TitledBorder.CENTER);
089                            precedentsPane.setBorder(border);
090                            border = BorderFactory.createTitledBorder("Dependents");
091                            border.setTitleJustification(TitledBorder.CENTER);
092                            dependentsPane.setBorder(border);
093            
094                            // Creates side bar
095                            sideBar.add(precedentsPane);
096                            sideBar.add(dependentsPane);
097                    }
098                    return sideBar;
099            }
100    }