001 /*
002 * Copyright 2007 - 2007 JEuclid, http://jeuclid.sf.net
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 /* $Id: JMathComponentBeanInfo.java,v 8afef6dd0d58 2007/09/14 08:29:58 maxberger $ */
018
019 package net.sourceforge.jeuclid.swing;
020
021 import java.awt.Image;
022 import java.beans.BeanDescriptor;
023 import java.beans.BeanInfo;
024 import java.beans.IntrospectionException;
025 import java.beans.PropertyDescriptor;
026 import java.beans.SimpleBeanInfo;
027
028 import javax.swing.ImageIcon;
029
030 /**
031 * This is the class providing bean information about the swing component
032 * {@link JMathComponent}. This class might be useful for applications using
033 * JEuclid in their application. With help of this class they can query useful
034 * information about JMathComponent when the application uses it as a bean.
035 *
036 * @version $Revision: 8afef6dd0d58 $
037 */
038 public class JMathComponentBeanInfo extends SimpleBeanInfo {
039 private static final Class<JMathComponent> BEANCLASS = JMathComponent.class;
040
041 private final Image icoColor16 = new ImageIcon(
042 JMathComponentBeanInfo.BEANCLASS
043 .getResource("/icons/jeuclid_16x16.png")).getImage();
044
045 private final Image icoColor32 = new ImageIcon(
046 JMathComponentBeanInfo.BEANCLASS
047 .getResource("/icons/jeuclid_32x32.png")).getImage();
048
049 private final Image icoBw16 = new ImageIcon(
050 JMathComponentBeanInfo.BEANCLASS
051 .getResource("/icons/jeuclid_16x16_bw.png")).getImage();
052
053 private final Image icoBw32 = new ImageIcon(
054 JMathComponentBeanInfo.BEANCLASS
055 .getResource("/icons/jeuclid_32x32_bw.png")).getImage();
056
057 /**
058 * Default Constructor.
059 */
060 public JMathComponentBeanInfo() {
061 // Empty on purpose.
062 }
063
064 /** {@inheritDoc} */
065 @Override
066 public Image getIcon(final int iconKind) {
067 final Image retVal;
068 switch (iconKind) {
069 case BeanInfo.ICON_COLOR_16x16:
070 retVal = this.icoColor16;
071 break;
072 case BeanInfo.ICON_COLOR_32x32:
073 retVal = this.icoColor32;
074 break;
075 case BeanInfo.ICON_MONO_16x16:
076 retVal = this.icoBw16;
077 break;
078 case BeanInfo.ICON_MONO_32x32:
079 retVal = this.icoBw32;
080 break;
081 default:
082 return this.icoColor32;
083 }
084 return retVal;
085 }
086
087 /** {@inheritDoc} */
088 @Override
089 public BeanDescriptor getBeanDescriptor() {
090 final BeanDescriptor beanDescriptor = new BeanDescriptor(
091 JMathComponentBeanInfo.BEANCLASS);
092 beanDescriptor.setName("JEuclid");
093 beanDescriptor.setDisplayName("JEuclid Bean");
094 beanDescriptor
095 .setShortDescription("The JEuclid project creates the possibility to "
096 + "display MathML content. "
097 + "This Bean supports rendering MathML content as a Swing component.");
098 return beanDescriptor;
099 }
100
101 /** {@inheritDoc} */
102 @Override
103 public PropertyDescriptor[] getPropertyDescriptors() {
104 try {
105 final PropertyDescriptor propertyFontSize = this
106 .createPropertyDescriptor("fontSize", "Font size",
107 "This will modify the font size of the displayed MathML elements");
108
109 final PropertyDescriptor propertyContent = this
110 .createPropertyDescriptor("content", "Content",
111 "The XML content for the JEuclid Bean");
112
113 final PropertyDescriptor fgContent = this
114 .createPropertyDescriptor("foreground",
115 "Foreground Color",
116 "Foreground color if not specified within the document");
117
118 final PropertyDescriptor bgContent = this
119 .createPropertyDescriptor("background",
120 "Background Color",
121 "Background color for this component");
122
123 final PropertyDescriptor opaqueContent = this
124 .createPropertyDescriptor("opaque", "Opaque",
125 "If true, will always overpaint the background");
126
127 final PropertyDescriptor fontsContent1 = this
128 .createPropertyDescriptor("fontsSerif", "Serif Fonts",
129 "Fonts to use for Serif characters (the default font)");
130 final PropertyDescriptor fontsContent2 = this
131 .createPropertyDescriptor("fontsSanserif",
132 "Sans-Serif Fonts",
133 "Fonts to use for Sans-Serif characters");
134 final PropertyDescriptor fontsContent3 = this
135 .createPropertyDescriptor("fontsMonospaced",
136 "Monospaced Fonts",
137 "Fonts to use for Monospaced characters");
138 final PropertyDescriptor fontsContent4 = this
139 .createPropertyDescriptor("fontsScript", "Script Fonts",
140 "Fonts to use for Script characters");
141 final PropertyDescriptor fontsContent5 = this
142 .createPropertyDescriptor("fontsFraktur",
143 "Fraktur Fonts",
144 "Fonts to use for Fraktur characters");
145 final PropertyDescriptor fontsContent6 = this
146 .createPropertyDescriptor("fontsDoublestruck",
147 "Double-Struck Fonts",
148 "Fonts to use for Double-Struck characters");
149
150 final PropertyDescriptor vAlign = this
151 .createPropertyDescriptor("verticalAlignment",
152 "Vertical Alignment",
153 "Vertical alignment, as defined by javax.swing.JLabel#getHorizontalAlignment");
154
155 final PropertyDescriptor hAlign = this
156 .createPropertyDescriptor(
157 "horizontalAlignment",
158 "Horizontal Alignment",
159 "Horizontal alignment, as defined by javax.swing.JLabel#getHorizontalAlignment");
160 final PropertyDescriptor border = this.createPropertyDescriptor(
161 "border", "Border", "Swing Border Property");
162
163 return new PropertyDescriptor[] { propertyContent,
164 propertyFontSize, fgContent, bgContent, opaqueContent,
165 fontsContent1, fontsContent2, fontsContent3,
166 fontsContent4, fontsContent5, fontsContent6, vAlign,
167 hAlign, border, };
168 } catch (final IntrospectionException ex) {
169 // should never occur as we know which classes/methods can be used
170 // in this BeanInfo class
171 return super.getPropertyDescriptors();
172 }
173 }
174
175 private PropertyDescriptor createPropertyDescriptor(
176 final String attribute, final String displayName,
177 final String description) throws IntrospectionException {
178 final PropertyDescriptor propertyFontSize = new PropertyDescriptor(
179 attribute, JMathComponentBeanInfo.BEANCLASS);
180 propertyFontSize.setDisplayName(displayName);
181 propertyFontSize.setShortDescription(description);
182 return propertyFontSize;
183 }
184 }