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.Dimension; 026 027import javax.swing.Icon; 028import javax.swing.ImageIcon; 029import javax.swing.JLabel; 030import javax.swing.JProgressBar; 031import javax.swing.JToolBar; 032 033import csheets.core.Cell; 034import csheets.ext.test.TestExtension; 035import csheets.ext.test.TestableCell; 036import csheets.ext.test.TestableCellListener; 037import csheets.ext.test.TestableSpreadsheet; 038import csheets.ui.ctrl.SelectionEvent; 039import csheets.ui.ctrl.SelectionListener; 040 041/** 042 * A toolbar that shows information about test cases. 043 * @author Lars Magnus "Burken" Lang 044 * @author Sebastian Kekkonen 045 */ 046@SuppressWarnings("serial") 047public class TestToolBar extends JToolBar implements SelectionListener, 048 TestableCellListener { 049 050 private JProgressBar cellTestednessBar; 051 private JProgressBar spreadsheetTestednessBar; 052 private JLabel lightLabelTestCases; 053 private Icon redIcon; 054 private Icon yellowIcon; 055 private Icon greenIcon; 056 057 public TestToolBar() { 058 setName(TestExtension.NAME); 059 060 // Loads icons 061 redIcon = new ImageIcon(TestExtension.class.getResource( 062 "res/img/light_red.gif"), "Red light"); 063 yellowIcon = new ImageIcon(TestExtension.class.getResource( 064 "res/img/light_yellow.gif"), "Yellow light"); 065 greenIcon = new ImageIcon(TestExtension.class.getResource( 066 "res/img/light_green.gif"), "Green light"); 067 068 // Creates icon labels 069 lightLabelTestCases = new JLabel(yellowIcon); 070 071 // Creates cell testedness progress bar 072 cellTestednessBar = new JProgressBar(JProgressBar.VERTICAL); 073 cellTestednessBar.setPreferredSize(new Dimension(20, 20)); 074 cellTestednessBar.setToolTipText("Cell Testedness"); 075 cellTestednessBar.setString("0 %"); 076 077 // Creates spreadsheet testedness progress bar 078 spreadsheetTestednessBar = new JProgressBar(JProgressBar.VERTICAL); 079 spreadsheetTestednessBar.setPreferredSize(new Dimension(20, 20)); 080 spreadsheetTestednessBar.setToolTipText("Spreadsheet Testedness"); 081 spreadsheetTestednessBar.setString("0 %"); 082 083 // Lays out components 084 add(new JLabel(new ImageIcon( 085 TestExtension.class.getResource("res/img/logo.gif")))); 086 addSeparator(); 087 add(lightLabelTestCases); 088 addSeparator(); 089 add(cellTestednessBar); 090 addSeparator(); 091 add(spreadsheetTestednessBar); 092 } 093 094 public void selectionChanged(SelectionEvent event) { 095 Cell cell = event.getCell(); 096 if (cell != null) { 097 TestableCell activeCell = (TestableCell)cell.getExtension(TestExtension.NAME); 098 activeCell.addTestableCellListener(this); 099 testCasesChanged(activeCell); 100 } else { 101 setTestCaseLamp(2); 102 setTestCaseProgressBar(0); 103 } 104 105 // Stops listening to previous active cell 106 if (event.getPreviousCell() != null) 107 ((TestableCell)event.getPreviousCell().getExtension(TestExtension.NAME)) 108 .removeTestableCellListener(this); 109 110 // Updates spreadsheet testedness 111 if (event.getSpreadsheet() != null) { 112 TestableSpreadsheet spreadsheet = (TestableSpreadsheet) 113 event.getSpreadsheet().getExtension(TestExtension.NAME); 114 setSpreadsheetTestednessBar(spreadsheet.getTestedness()); 115 } else 116 setSpreadsheetTestednessBar(0); 117 } 118 119 public void testCasesChanged(TestableCell cell) { 120 // Updates cell testedness 121 double testedness = cell.getTestedness(); 122 setTestCaseProgressBar(testedness); 123 if (cell.hasTestError()) 124 setTestCaseLamp(3); 125 else if (testedness < 1.0 ) 126 setTestCaseLamp(2); 127 else 128 setTestCaseLamp(1); 129 } 130 131 public void testCaseParametersChanged(TestableCell cell) {} 132 133 /* 134 * 135 * @param lamp 1-green, 2-yellow, 3-red 136 */ 137 private void setTestCaseLamp(int lamp){ 138 switch(lamp){ 139 case 1: 140 lightLabelTestCases.setIcon(greenIcon); 141 break; 142 case 2: 143 lightLabelTestCases.setIcon(yellowIcon); 144 break; 145 case 3: 146 lightLabelTestCases.setIcon(redIcon); 147 break; 148 default: 149 lightLabelTestCases.setIcon(yellowIcon); 150 break; 151 } 152 } 153 154 private void setTestCaseProgressBar(double testedness){ 155 cellTestednessBar.setValue((int)(testedness*100)); 156 cellTestednessBar.setString((int)(testedness*100) + "%"); 157 } 158 159 private void setSpreadsheetTestednessBar(double testedness){ 160 spreadsheetTestednessBar.setValue((int)(testedness*100)); 161 spreadsheetTestednessBar.setString((int)(testedness*100) + "%"); 162 } 163}