001/*
002 * Copyright (c) 2005 Jens Schou, Staffan Gustafsson, Bjorn Lanneskog, 
003 * Einar Pehrson and Sebastian Kekkonen
004 *
005 * This file is part of
006 * CleanSheets Extension for Test Cases
007 *
008 * CleanSheets Extension for Test Cases is free software; you can
009 * redistribute it and/or modify it under the terms of the GNU General Public
010 * License as published by the Free Software Foundation; either version 2 of
011 * the License, or (at your option) any later version.
012 *
013 * CleanSheets Extension for Test Cases is distributed in the hope that
014 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
015 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016 * See the GNU General Public License for more details.
017 *
018 * You should have received a copy of the GNU General Public License
019 * along with CleanSheets Extension for Test Cases; if not, write to the
020 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
021 * Boston, MA  02111-1307  USA
022 */
023package csheets.ext.test.ui;
024
025import java.awt.GridLayout;
026
027import javax.swing.BorderFactory;
028import javax.swing.Icon;
029import javax.swing.ImageIcon;
030import javax.swing.JComponent;
031import javax.swing.JPanel;
032import javax.swing.JToolBar;
033import javax.swing.border.TitledBorder;
034
035import csheets.ext.test.TestExtension;
036import csheets.ui.ctrl.UIController;
037import csheets.ui.ext.CellDecorator;
038import csheets.ui.ext.UIExtension;
039
040/**
041 * The user interface extension for tests.
042 * @author Einar Pehrson
043 */
044public class TestUIExtension extends UIExtension {
045
046        /** The icon to display with the extension's name */
047        private Icon icon;
048
049        /** A cell decorator that visualizes test cases for cells */
050        private CellDecorator cellDecorator;
051
052        /** A toolbar that visualizes cell and spreadsheet testedness */
053        private TestToolBar toolBar;
054
055        /** A side bar that provides editing of test cases and test case parameters */
056        private JComponent sideBar;
057
058        /**
059         * Creates a new user interface extension for tests.
060         * @param extension the extension for which components are provided
061         * @param uiController the user interface controller
062         */
063        public TestUIExtension(TestExtension extension, UIController uiController) {
064                super(extension, uiController);
065        }
066
067        /**
068         * Returns an icon to display with the extension's name.
069         * @return an icon with a testing pad
070         */
071        public Icon getIcon() {
072                if (icon == null)
073                        icon = new ImageIcon(
074                                TestExtension.class.getResource("res/img/logo.gif"));
075                return icon;
076        }
077
078        /**
079         * Returns a cell decorator that visualizes test cases for cells.
080         * @return decorator for testable cells
081         */
082        public CellDecorator getCellDecorator() {
083                if (cellDecorator == null)
084                        cellDecorator = new TestableCellDecorator();
085                return cellDecorator;
086        }
087
088        /**
089         * Returns a toolbar that visualizes cell and spreadsheet testedness.
090         * @return a JToolBar component
091         */
092        public JToolBar getToolBar() {
093                if (toolBar == null) {
094                        toolBar = new TestToolBar();
095                        uiController.addSelectionListener(toolBar);
096                }
097                return toolBar;
098        }
099
100        /**
101         * Returns a side bar that provides editing of test cases and test case
102         * parameters.
103         * @return a side bar
104         */
105        public JComponent getSideBar() {
106                if (sideBar == null) {
107                        // Creates and configures components
108                        TestCasePanel testCasePanel = new TestCasePanel(uiController);
109                        TestCaseParamPanel testCaseParamPanel = new TestCaseParamPanel(uiController);
110                        uiController.addSelectionListener(testCasePanel);
111                        uiController.addSelectionListener(testCaseParamPanel);
112        
113                        // Adds borders
114                        TitledBorder border = BorderFactory.createTitledBorder("Test Cases");
115                        border.setTitleJustification(TitledBorder.CENTER);
116                        testCasePanel.setBorder(border);
117                        border = BorderFactory.createTitledBorder("Test Case Parameters");
118                        border.setTitleJustification(TitledBorder.CENTER);
119                        testCaseParamPanel.setBorder(border);
120        
121                        // Creates side bar
122                        sideBar = new JPanel(new GridLayout(2, 1));
123                        sideBar.add(testCaseParamPanel);
124                        sideBar.add(testCasePanel);
125                        sideBar.setName(TestExtension.NAME);
126                }
127                return sideBar;
128        }
129}