001 /* ====================================================== 002 * Orson : a free chart beans library based on JFreeChart 003 * ====================================================== 004 * 005 * (C) Copyright 2007, by Object Refinery Limited. 006 * 007 * Project Info: not-yet-released 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 */ 027 028 package org.jfree.beans.editors; 029 030 import java.awt.Color; 031 import java.awt.Component; 032 import java.awt.GradientPaint; 033 import java.awt.Graphics; 034 import java.awt.Graphics2D; 035 import java.awt.Paint; 036 import java.awt.Rectangle; 037 import java.beans.PropertyChangeEvent; 038 import java.beans.PropertyChangeListener; 039 import java.beans.PropertyEditorSupport; 040 041 /** 042 * A JavaBeans property editor for {@link Paint} instances. Obviously, we 043 * can't provide editing for every type of <code>Paint</code>, but we'll try 044 * to cover {@link Paint} and {@link GradientPaint}. 045 */ 046 public class PaintEditor extends PropertyEditorSupport 047 implements PropertyChangeListener { 048 049 050 /* (non-Javadoc) 051 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) 052 */ 053 public void propertyChange(PropertyChangeEvent evt) { 054 firePropertyChange(); 055 } 056 057 PaintEditorGUI customEditor; 058 059 /** 060 * Creates a new instance. 061 */ 062 public PaintEditor() { 063 this.customEditor = new PaintEditorGUI(); 064 this.customEditor.addPropertyChangeListener(this); 065 } 066 067 public boolean isPaintable() { 068 return true; 069 } 070 071 public void paintValue(Graphics g, Rectangle clipRect) { 072 Graphics2D g2 = (Graphics2D) g; 073 Paint p = this.customEditor.getPaint(); 074 if (p != null) { 075 g2.setPaint(p); 076 int cy = (int) clipRect.getCenterY(); 077 int x = (int) clipRect.getMinX() + 2; 078 Rectangle box = new Rectangle(x, cy - 4, 8, 8); 079 g2.fill(box); 080 g2.setPaint(Color.black); 081 g2.draw(box); 082 } 083 } 084 085 /* (non-Javadoc) 086 * @see java.beans.PropertyEditorSupport#getValue() 087 */ 088 public Object getValue() { 089 return this.customEditor.getPaint(); 090 } 091 092 /* (non-Javadoc) 093 * @see java.beans.PropertyEditorSupport#setValue(java.lang.Object) 094 */ 095 public void setValue(Object value) { 096 this.customEditor.setPaint((Paint) value); 097 } 098 099 /** 100 * Returns a string for the property value. 101 * 102 * @return A string for the property value. 103 */ 104 public String getJavaInitializationString() { 105 Paint p = (Paint) getValue(); 106 if (p == null) { 107 return "null"; 108 } 109 else if (p instanceof Color) { 110 return "Color.black"; 111 } 112 return "new GradientPaint(1.0f, 2.0f, Color.red, 3.0f, 4.0f, Color.blue);"; 113 } 114 115 116 /** 117 * Returns a component for editing a <code>Paint</code> instance. 118 * 119 * @return A component for editing. 120 */ 121 public Component getCustomEditor() { 122 return this.customEditor; 123 } 124 125 /** 126 * Returns <code>true</code> to indicate that we provide a custom editor 127 * via the {@link #getCustomEditor()} method. 128 * 129 * @return <code>true</code>. 130 */ 131 public boolean supportsCustomEditor() { 132 return true; 133 } 134 135 }