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 }