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 java.awt.Color; 026import java.awt.Font; 027import java.awt.Graphics; 028import java.awt.Graphics2D; 029 030import javax.swing.JComponent; 031 032import csheets.core.Cell; 033import csheets.ext.assertion.AssertableCell; 034import csheets.ext.assertion.AssertionExtension; 035import csheets.ui.ext.CellDecorator; 036 037/** 038 * A decorator for assertable cells. 039 * @author Einar Pehrson 040 */ 041public class AssertableCellDecorator extends CellDecorator { 042 043 /** The font used to render the 'A' */ 044 private static final Font font = new Font("Dialog", Font.PLAIN, 10); 045 046 /** 047 * Creates a new cell decorator. 048 */ 049 public AssertableCellDecorator() {} 050 051 /** 052 * Decorates the given graphics context if the cell being rendered 053 * has an assertion error. 054 * @param component the cell renderer component 055 * @param g the graphics context on which drawing should be done 056 * @param cell the cell being rendered 057 * @param selected whether the cell is selected 058 * @param hasFocus whether the cell has focus 059 */ 060 public void decorate(JComponent component, Graphics g, Cell cell, 061 boolean selected, boolean hasFocus) { 062 if (enabled) { 063 AssertableCell assertableCell = (AssertableCell)cell.getExtension(AssertionExtension.NAME); 064 if (assertableCell.hasAssertionError()) { 065 // Stores current graphics context properties 066 Graphics2D g2 = (Graphics2D)g; 067 Color oldPaint = g2.getColor(); 068 Font oldFont = g2.getFont(); 069 070 // Prints 'A' using own font, then restores the old font 071 g2.setColor(Color.red); 072 g2.setFont(font); 073 g2.drawString("A", 4, 12); 074 075 // Restores graphics context properties 076 g2.setColor(oldPaint); 077 g2.setFont(oldFont); 078 } 079 } 080 } 081}