001 /*
002 * Copyright 2002-2004 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * 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, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.richclient.application.config;
017
018 import java.awt.Dimension;
019
020 import org.springframework.beans.factory.InitializingBean;
021 import org.springframework.util.Assert;
022
023 import com.jgoodies.looks.FontPolicy;
024 import com.jgoodies.looks.Options;
025 import com.jgoodies.looks.plastic.PlasticLookAndFeel;
026 import com.jgoodies.looks.plastic.PlasticTheme;
027
028 /**
029 * <p>JGoodies looks configurer bean. Allows to set various options available in the JGoodies looks library.
030 * Use this as follows:</p>
031 * <p/>
032 * <pre>
033 * <bean id="lookAndFeelConfigurer"
034 * class="org.springframework.richclient.application.config.JGoodiesLooksConfigurer">
035 * <property name="popupDropShadowEnabled" value="false" />
036 * <property name="theme">
037 * <bean class="com.jgoodies.looks.plastic.theme.ExperienceBlue" />
038 * </property>
039 * </bean>
040 * </pre>
041 * <p/>
042 * <p>Additionally the LaF FQN can be set using {@link #setLaFName(String)}. Use the static name constants defined in
043 * JGoodies {@link com.jgoodies.looks.Options} to set this property. Default LaF if not specified is the Options#PLASTICXP_NAME.
044 * It is possible to define other LaF's as well, but any other property set in this bean will not be in effect if used in that way.
045 * If you do need to set another LaF without additional configuration use {@link org.springframework.richclient.application.config.UIManagerConfigurer}
046 * and/or create a specific configurer bean for the LaF of your choice.
047 * </p>
048 */
049 public class JGoodiesLooksConfigurer implements InitializingBean {
050
051 private UIManagerConfigurer configurer;
052
053 private String laFName = Options.PLASTICXP_NAME;
054
055 /**
056 * Default constructor.
057 */
058 public JGoodiesLooksConfigurer() {
059 this(new UIManagerConfigurer());
060 }
061
062 /**
063 * Constructor allowing to pass your own UIManagerConfigurer.
064 *
065 * @param configurer the UIManagerConfigurer to use when setting the LaF.
066 */
067 public JGoodiesLooksConfigurer(UIManagerConfigurer configurer) {
068 Assert.notNull(configurer);
069 this.configurer = configurer;
070 }
071
072 /**
073 * @param size default Dimension for the icons.
074 * @see com.jgoodies.looks.Options#setDefaultIconSize(java.awt.Dimension)
075 */
076 public void setDefaultIconSize(Dimension size) {
077 Options.setDefaultIconSize(size);
078 }
079
080 /**
081 * @param theme PlasticTheme to use.
082 * @see com.jgoodies.looks.plastic.PlasticLookAndFeel#setPlasticTheme(com.jgoodies.looks.plastic.PlasticTheme)
083 */
084 public void setTheme(PlasticTheme theme) {
085 PlasticLookAndFeel.setPlasticTheme(theme);
086 }
087
088 /**
089 * @param enabled set to <code>true</true> if drop shadows should be used.
090 * @see com.jgoodies.looks.Options#setPopupDropShadowEnabled(boolean)
091 */
092 public void setPopupDropShadowEnabled(boolean enabled) {
093 Options.setPopupDropShadowEnabled(enabled);
094 }
095
096 /**
097 * @param enabled set to <code>true</code> if tab icons should be enabled.
098 * @see com.jgoodies.looks.Options#setTabIconsEnabled(boolean)
099 */
100 public void setTabIconsEnabled(boolean enabled) {
101 Options.setTabIconsEnabled(enabled);
102 }
103
104 /**
105 * @param enabled set to <code>true</code> if narrow buttons should be used.
106 * @see com.jgoodies.looks.Options#setUseNarrowButtons(boolean)
107 */
108 public void setUseNarrowButtons(boolean enabled) {
109 Options.setUseNarrowButtons(enabled);
110 }
111
112 /**
113 * @param enabled set to <code>true</code> if narrow buttons should be used.
114 * @see com.jgoodies.looks.Options#setUseSystemFonts(boolean)
115 */
116 public void setUseSystemFonts(boolean enabled) {
117 Options.setUseSystemFonts(enabled);
118 }
119
120 /**
121 * @param fontPolicy the font policy.
122 * @see com.jgoodies.looks.plastic.PlasticLookAndFeel#setFontPolicy(com.jgoodies.looks.FontPolicy)
123 */
124 public void setFontSizeHints(FontPolicy fontPolicy) {
125 PlasticLookAndFeel.setFontPolicy(fontPolicy);
126 }
127
128 /**
129 * @param threeDEnabled set to <code>true</code> if 3D should be enabled.
130 * @see com.jgoodies.looks.plastic.PlasticLookAndFeel#set3DEnabled(boolean)
131 */
132 public void set3DEnabled(boolean threeDEnabled) {
133 PlasticLookAndFeel.set3DEnabled(threeDEnabled);
134 }
135
136 /**
137 * @param highContrastEnabled set to <code>true</code> if high contrast should be enabled.
138 * @see com.jgoodies.looks.plastic.PlasticLookAndFeel#setHighContrastFocusColorsEnabled(boolean)
139 */
140 public void setHighContrastFocusColorsEnabled(boolean highContrastEnabled) {
141 PlasticLookAndFeel
142 .setHighContrastFocusColorsEnabled(highContrastEnabled);
143 }
144
145 /**
146 * @param tabStyle set the tab style that should be used.
147 * @see com.jgoodies.looks.plastic.PlasticLookAndFeel#setTabStyle(String)
148 */
149 public void setTabStyle(String tabStyle) {
150 PlasticLookAndFeel.setTabStyle(tabStyle);
151 }
152
153 /**
154 * <p>
155 * Set the FQN of the LaF to use. This should be on of:
156 * </p>
157 * <ul>
158 * <li>{@link com.jgoodies.looks.Options#PLASTIC_NAME</li>
159 * <li>{@link com.jgoodies.looks.Options#PLASTIC3D_NAME</li>
160 * <li>{@link com.jgoodies.looks.Options#PLASTICXP_NAME</li>
161 * <li>{@link com.jgoodies.looks.Options#JGOODIES_WINDOWS_NAME</li>
162 * <li>{@link com.jgoodies.looks.Options#DEFAULT_LOOK_NAME</li>
163 * </ul>
164 *
165 * <p>Default LaF if not specified is Options#PLASTICXP_NAME. Note that you could mention any LaF FQN here, but all other options would then be ignored.</p>
166 *
167 * @param laFName the FQN of the LaF you want to install on the UIManagerConfigurer.
168 */
169 public void setLaFName(String laFName) {
170 this.laFName = laFName;
171 }
172
173 public void afterPropertiesSet() throws Exception {
174 configurer.setLookAndFeel(laFName);
175 }
176 }