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}