001 /*
002 * $Id: JXTaskPaneAddon.java,v 1.6 2005/10/15 09:55:47 l2fprod Exp $
003 *
004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
020 */
021 package org.jdesktop.swingx.plaf;
022
023 import java.awt.Color;
024 import java.awt.Font;
025 import java.awt.SystemColor;
026 import java.lang.reflect.Method;
027 import java.util.Arrays;
028 import java.util.List;
029
030 import javax.swing.UIDefaults;
031 import javax.swing.UIManager;
032 import javax.swing.plaf.ColorUIResource;
033 import javax.swing.plaf.FontUIResource;
034 import javax.swing.plaf.metal.MetalLookAndFeel;
035
036 import org.jdesktop.swingx.JXTaskPane;
037 import org.jdesktop.swingx.plaf.windows.WindowsClassicLookAndFeelAddons;
038 import org.jdesktop.swingx.plaf.windows.WindowsLookAndFeelAddons;
039 import org.jdesktop.swingx.util.JVM;
040 import org.jdesktop.swingx.util.OS;
041
042 /**
043 * Addon for <code>JXTaskPane</code>.<br>
044 *
045 * @author <a href="mailto:fred@L2FProd.com">Frederic Lavigne</a>
046 */
047 public class JXTaskPaneAddon extends AbstractComponentAddon {
048
049 public JXTaskPaneAddon() {
050 super("JXTaskPane");
051 }
052
053 @Override
054 protected void addBasicDefaults(LookAndFeelAddons addon, List<Object> defaults) {
055 Font taskPaneFont = UIManager.getFont("Label.font");
056 if (taskPaneFont == null) {
057 taskPaneFont = new Font("Dialog", Font.PLAIN, 12);
058 }
059 taskPaneFont = taskPaneFont.deriveFont(Font.BOLD);
060
061 Color menuBackground = new ColorUIResource(SystemColor.menu);
062 defaults.addAll(Arrays.asList(new Object[]{
063 JXTaskPane.uiClassID,
064 "org.jdesktop.swingx.plaf.basic.BasicTaskPaneUI",
065 "TaskPane.font",
066 new FontUIResource(taskPaneFont),
067 "TaskPane.background",
068 UIManager.getColor("List.background"),
069 "TaskPane.specialTitleBackground",
070 new ColorUIResource(menuBackground.darker()),
071 "TaskPane.titleBackgroundGradientStart",
072 menuBackground,
073 "TaskPane.titleBackgroundGradientEnd",
074 menuBackground,
075 "TaskPane.titleForeground",
076 new ColorUIResource(SystemColor.menuText),
077 "TaskPane.specialTitleForeground",
078 new ColorUIResource(SystemColor.menuText).brighter(),
079 "TaskPane.animate",
080 Boolean.TRUE,
081 "TaskPane.focusInputMap",
082 new UIDefaults.LazyInputMap(
083 new Object[] {
084 "ENTER",
085 "toggleExpanded",
086 "SPACE",
087 "toggleExpanded" }),
088 }));
089 }
090
091 @Override
092 protected void addMetalDefaults(LookAndFeelAddons addon, List<Object> defaults) {
093 super.addMetalDefaults(addon, defaults);
094 // if using Ocean, use the Glossy l&f
095 String taskPaneGroupUI = "org.jdesktop.swingx.plaf.metal.MetalTaskPaneUI";
096 if (JVM.current().isOrLater(JVM.JDK1_5)) {
097 try {
098 Method method = MetalLookAndFeel.class.getMethod("getCurrentTheme");
099 Object currentTheme = method.invoke(null);
100 if (Class.forName("javax.swing.plaf.metal.OceanTheme").isInstance(
101 currentTheme)) {
102 taskPaneGroupUI = "org.jdesktop.swingx.plaf.misc.GlossyTaskPaneUI";
103 }
104 } catch (Exception e) {
105 }
106 }
107 defaults.addAll(Arrays.asList(new Object[]{
108 JXTaskPane.uiClassID,
109 taskPaneGroupUI,
110 "TaskPane.foreground",
111 UIManager.getColor("activeCaptionText"),
112 "TaskPane.background",
113 MetalLookAndFeel.getControl(),
114 "TaskPane.specialTitleBackground",
115 MetalLookAndFeel.getPrimaryControl(),
116 "TaskPane.titleBackgroundGradientStart",
117 MetalLookAndFeel.getPrimaryControl(),
118 "TaskPane.titleBackgroundGradientEnd",
119 MetalLookAndFeel.getPrimaryControlHighlight(),
120 "TaskPane.titleForeground",
121 MetalLookAndFeel.getControlTextColor(),
122 "TaskPane.specialTitleForeground",
123 MetalLookAndFeel.getControlTextColor(),
124 "TaskPane.borderColor",
125 MetalLookAndFeel.getPrimaryControl(),
126 "TaskPane.titleOver",
127 MetalLookAndFeel.getControl().darker(),
128 "TaskPane.specialTitleOver",
129 MetalLookAndFeel.getPrimaryControlHighlight()
130 }));
131 }
132
133 @Override
134 protected void addWindowsDefaults(LookAndFeelAddons addon,
135 List<Object> defaults) {
136 super.addWindowsDefaults(addon, defaults);
137
138 if (addon instanceof WindowsLookAndFeelAddons) {
139 defaults.addAll(Arrays.asList(new Object[]{
140 JXTaskPane.uiClassID,
141 "org.jdesktop.swingx.plaf.windows.WindowsTaskPaneUI"}));
142
143 String xpStyle = OS.getWindowsVisualStyle();
144 if (WindowsLookAndFeelAddons.HOMESTEAD_VISUAL_STYLE
145 .equalsIgnoreCase(xpStyle)) {
146 defaults.addAll(Arrays.asList(new Object[]{
147 "TaskPane.foreground",
148 new ColorUIResource(86, 102, 45),
149 "TaskPane.background",
150 new ColorUIResource(246, 246, 236),
151 "TaskPane.specialTitleBackground",
152 new ColorUIResource(224, 231, 184),
153 "TaskPane.titleBackgroundGradientStart",
154 new ColorUIResource(255, 255, 255),
155 "TaskPane.titleBackgroundGradientEnd",
156 new ColorUIResource(224, 231, 184),
157 "TaskPane.titleForeground",
158 new ColorUIResource(86, 102, 45),
159 "TaskPane.titleOver",
160 new ColorUIResource(114, 146, 29),
161 "TaskPane.specialTitleForeground",
162 new ColorUIResource(86, 102, 45),
163 "TaskPane.specialTitleOver",
164 new ColorUIResource(114, 146, 29),
165 "TaskPane.borderColor",
166 new ColorUIResource(255, 255, 255),
167 }));
168 } else if (WindowsLookAndFeelAddons.SILVER_VISUAL_STYLE
169 .equalsIgnoreCase(xpStyle)) {
170 defaults.addAll(Arrays.asList(new Object[]{
171 "TaskPane.foreground",
172 new ColorUIResource(Color.black),
173 "TaskPane.background",
174 new ColorUIResource(240, 241, 245),
175 "TaskPane.specialTitleBackground",
176 new ColorUIResource(222, 222, 222),
177 "TaskPane.titleBackgroundGradientStart",
178 new ColorUIResource(Color.white),
179 "TaskPane.titleBackgroundGradientEnd",
180 new ColorUIResource(214, 215, 224),
181 "TaskPane.titleForeground",
182 new ColorUIResource(Color.black),
183 "TaskPane.titleOver",
184 new ColorUIResource(126, 124, 124),
185 "TaskPane.specialTitleForeground",
186 new ColorUIResource(Color.black),
187 "TaskPane.specialTitleOver",
188 new ColorUIResource(126, 124, 124),
189 "TaskPane.borderColor",
190 new ColorUIResource(Color.white),
191 }));
192 } else {
193 defaults.addAll(Arrays.asList(new Object[]{
194 "TaskPane.foreground",
195 new ColorUIResource(Color.white),
196 "TaskPane.background",
197 new ColorUIResource(214, 223, 247),
198 "TaskPane.specialTitleBackground",
199 new ColorUIResource(33, 89, 201),
200 "TaskPane.titleBackgroundGradientStart",
201 new ColorUIResource(Color.white),
202 "TaskPane.titleBackgroundGradientEnd",
203 new ColorUIResource(199, 212, 247),
204 "TaskPane.titleForeground",
205 new ColorUIResource(33, 89, 201),
206 "TaskPane.specialTitleForeground",
207 new ColorUIResource(Color.white),
208 "TaskPane.borderColor",
209 new ColorUIResource(Color.white),
210 }));
211 }
212 }
213
214 if (addon instanceof WindowsClassicLookAndFeelAddons) {
215 defaults.addAll(Arrays.asList(new Object[]{
216 JXTaskPane.uiClassID,
217 "org.jdesktop.swingx.plaf.windows.WindowsClassicTaskPaneUI",
218 "TaskPane.foreground",
219 new ColorUIResource(Color.black),
220 "TaskPane.background",
221 new ColorUIResource(Color.white),
222 "TaskPane.specialTitleBackground",
223 new ColorUIResource(10, 36, 106),
224 "TaskPane.titleBackgroundGradientStart",
225 new ColorUIResource(212, 208, 200),
226 "TaskPane.titleBackgroundGradientEnd",
227 new ColorUIResource(212, 208, 200),
228 "TaskPane.titleForeground",
229 new ColorUIResource(Color.black),
230 "TaskPane.specialTitleForeground",
231 new ColorUIResource(Color.white),
232 "TaskPane.borderColor",
233 new ColorUIResource(212, 208, 200),
234 }));
235 }
236 }
237
238 @Override
239 protected void addMacDefaults(LookAndFeelAddons addon, List<Object> defaults) {
240 super.addMacDefaults(addon, defaults);
241 defaults.addAll(Arrays.asList(new Object[]{
242 JXTaskPane.uiClassID,
243 "org.jdesktop.swingx.plaf.misc.GlossyTaskPaneUI",
244 "TaskPane.background",
245 new ColorUIResource(245, 245, 245),
246 "TaskPane.titleForeground",
247 new ColorUIResource(Color.black),
248 "TaskPane.specialTitleBackground",
249 new ColorUIResource(188,188,188),
250 "TaskPane.specialTitleForeground",
251 new ColorUIResource(Color.black),
252 "TaskPane.titleBackgroundGradientStart",
253 new ColorUIResource(250,250,250),
254 "TaskPane.titleBackgroundGradientEnd",
255 new ColorUIResource(188,188,188),
256 "TaskPane.borderColor",
257 new ColorUIResource(97, 97, 97),
258 "TaskPane.titleOver",
259 new ColorUIResource(125, 125, 97),
260 "TaskPane.specialTitleOver",
261 new ColorUIResource(125, 125, 97),
262 }));
263 }
264
265 }