001/* 002 * Copyright (c) 2005 Peter Palotas, Fredrik Johansson, Einar Pehrson, 003 * Sebastian Kekkonen, Lars Magnus Lang, Malin Johansson and Sofia Nilsson 004 * 005 * This file is part of 006 * CleanSheets Extension for Assertions 007 * 008 * CleanSheets Extension for Assertions 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 Assertions 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 Assertions; 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.assertion.ui; 024 025import javax.swing.Icon; 026import javax.swing.ImageIcon; 027import javax.swing.JLabel; 028import javax.swing.JTextField; 029import javax.swing.JToolBar; 030 031import csheets.core.Cell; 032import csheets.ext.assertion.AssertableCell; 033import csheets.ext.assertion.AssertableCellListener; 034import csheets.ext.assertion.Assertion; 035import csheets.ext.assertion.AssertionExtension; 036import csheets.ui.ctrl.SelectionEvent; 037import csheets.ui.ctrl.SelectionListener; 038 039/** 040 * A toolbar that shows information about assertions. 041 * @author Lars Magnus "Burken" Lang 042 * @author Sebastian Kekkonen 043 */ 044@SuppressWarnings("serial") 045public class AssertionToolBar extends JToolBar implements SelectionListener, 046 AssertableCellListener { 047 048 private JTextField usAssertion; 049 private JTextField sgAssertion; 050 051 private Icon redIcon; 052 private Icon yellowIcon; 053 private Icon greenIcon; 054 055 private JLabel lightLabelAssertion; 056 057 public AssertionToolBar(){ 058 setName(AssertionExtension.NAME); 059 redIcon = new ImageIcon(AssertionExtension.class.getResource( 060 "res/img/light_red.gif"), "Red light"); 061 yellowIcon = new ImageIcon(AssertionExtension.class.getResource( 062 "res/img/light_yellow.gif"), "Yellow light"); 063 greenIcon = new ImageIcon(AssertionExtension.class.getResource( 064 "res/img/light_green.gif"), "Green light"); 065 066 lightLabelAssertion = new JLabel(yellowIcon); 067 //yellowIcon.paintIcon(lightPanelAssertion, lightPanelAssertion.getGraphics(), 0, 0); 068 069 usAssertion = new JTextField(5); 070 usAssertion.setEditable(false); 071 sgAssertion = new JTextField(5); 072 sgAssertion.setEditable(false); 073 074 add(new JLabel(new ImageIcon( 075 AssertionExtension.class.getResource("res/img/logo.gif")))); 076 addSeparator(); 077 add(lightLabelAssertion); 078 addSeparator(); 079 add(usAssertion); 080 addSeparator(); 081 add(new JLabel("=")); 082 addSeparator(); 083 add(sgAssertion); 084 } 085 086 private void setUSAssertionText(String s){ 087 usAssertion.setText(s); 088 } 089 090 private void setSGAssertionText(String s){ 091 sgAssertion.setText(s); 092 } 093 094 095 /* 096 * 097 * @param lamp 1-green, 2-yellow, 3-red 098 */ 099 private void setAssertionLamp(int lamp){ 100 switch(lamp){ 101 case 1: 102 lightLabelAssertion.setIcon(greenIcon); 103 break; 104 case 2: 105 lightLabelAssertion.setIcon(yellowIcon); 106 break; 107 case 3: 108 lightLabelAssertion.setIcon(redIcon); 109 break; 110 default: 111 lightLabelAssertion.setIcon(yellowIcon); 112 break; 113 } 114 } 115 116 public void selectionChanged(SelectionEvent event) { 117 Cell cell = event.getCell(); 118 if (cell != null) { 119 AssertableCell activeCell 120 = (AssertableCell)cell.getExtension(AssertionExtension.NAME); 121 activeCell.addAssertableCellListener(this); 122 assertionsChanged(activeCell); 123 } else 124 setAssertionLamp(2); 125 126 // Stops listening to previous active cell 127 if (event.getPreviousCell() != null) 128 ((AssertableCell)event.getPreviousCell().getExtension(AssertionExtension.NAME)) 129 .removeAssertableCellListener(this); 130 } 131 132 /** 133 * Updates the assertion field and status label when the assertion of the 134 * active cell is changed. 135 * @param cell the cell whose assertion changed 136 */ 137 public void assertionsChanged(AssertableCell cell) { 138 Assertion usAssertion = cell.getUSAssertion(); 139 Assertion sgAssertion = cell.getSGAssertion(); 140 141 //Set lights depending on the circumstances 142 // Code for setting lamps simplified by Peter after the addition of some new methods in cell. 143 if (cell.hasAssertionError()) { 144 if (cell.assertAssertions() == Assertion.ComparisonResult.OK 145 && cell.assertAny() == Assertion.Result.NO_DATA) 146 setAssertionLamp(2); 147 else 148 setAssertionLamp(3); 149 } else if (cell.isAsserted()) 150 setAssertionLamp(1); 151 else 152 setAssertionLamp(2); 153 154 if(usAssertion != null) 155 setUSAssertionText(usAssertion.toString()); 156 else 157 setUSAssertionText(""); 158 159 if(sgAssertion != null) 160 setSGAssertionText(sgAssertion.toString()); 161 else 162 setSGAssertionText(""); 163 } 164}