001 /*
002 * Copyright (c) 2005 Jens Schou, Staffan Gustafsson, Björn 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 */
023 package csheets.ext.test.ui;
024
025 import java.awt.Dimension;
026
027 import javax.swing.Icon;
028 import javax.swing.ImageIcon;
029 import javax.swing.JLabel;
030 import javax.swing.JProgressBar;
031 import javax.swing.JToolBar;
032
033 import csheets.core.Cell;
034 import csheets.ext.test.TestExtension;
035 import csheets.ext.test.TestableCell;
036 import csheets.ext.test.TestableCellListener;
037 import csheets.ext.test.TestableSpreadsheet;
038 import csheets.ui.ctrl.SelectionEvent;
039 import csheets.ui.ctrl.SelectionListener;
040
041 /**
042 * A toolbar that shows information about test cases.
043 * @author Lars Magnus "Burken" Lång
044 * @author Sebastian Kekkonen
045 */
046 @SuppressWarnings("serial")
047 public 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 }