001/* 002 * $Id: TaskPaneAddon.java 3622 2010-02-25 04:34:55Z kschaefe $ 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 */ 021package org.jdesktop.swingx.plaf; 022 023import java.awt.Color; 024import java.awt.Font; 025import java.awt.SystemColor; 026import java.awt.Toolkit; 027 028import javax.swing.UIDefaults; 029import javax.swing.UIManager; 030import javax.swing.plaf.ColorUIResource; 031import javax.swing.plaf.FontUIResource; 032import javax.swing.plaf.metal.MetalLookAndFeel; 033import javax.swing.plaf.metal.OceanTheme; 034 035import org.jdesktop.swingx.JXTaskPane; 036import org.jdesktop.swingx.plaf.windows.WindowsClassicLookAndFeelAddons; 037import org.jdesktop.swingx.plaf.windows.WindowsLookAndFeelAddons; 038import org.jdesktop.swingx.util.OS; 039 040/** 041 * Addon for <code>JXTaskPane</code>.<br> 042 * 043 * @author <a href="mailto:fred@L2FProd.com">Frederic Lavigne</a> 044 * @author Karl Schaefer 045 */ 046public class TaskPaneAddon extends AbstractComponentAddon { 047 048 public TaskPaneAddon() { 049 super("JXTaskPane"); 050 } 051 052 @Override 053 protected void addBasicDefaults(LookAndFeelAddons addon, DefaultsList defaults) { 054 Font taskPaneFont = UIManagerExt.getSafeFont("Label.font", new Font( 055 "Dialog", Font.PLAIN, 12)); 056 taskPaneFont = taskPaneFont.deriveFont(Font.BOLD); 057 058 Color menuBackground = new ColorUIResource(SystemColor.menu); 059 060 defaults.add(JXTaskPane.uiClassID, "org.jdesktop.swingx.plaf.basic.BasicTaskPaneUI"); 061 defaults.add("TaskPane.font", new FontUIResource(taskPaneFont)); 062 defaults.add("TaskPane.background", UIManagerExt.getSafeColor("List.background", 063 new ColorUIResource(Color.decode("#005C5C")))); 064 defaults.add("TaskPane.specialTitleBackground", new ColorUIResource(menuBackground.darker())); 065 defaults.add("TaskPane.titleBackgroundGradientStart", menuBackground); 066 defaults.add("TaskPane.titleBackgroundGradientEnd", menuBackground); 067 defaults.add("TaskPane.titleForeground", new ColorUIResource(SystemColor.menuText)); 068 defaults.add("TaskPane.specialTitleForeground", new ColorUIResource(SystemColor.menuText.brighter())); 069 defaults.add("TaskPane.animate", Boolean.TRUE); 070 defaults.add("TaskPane.focusInputMap", new UIDefaults.LazyInputMap(new Object[] { 071 "ENTER", "toggleCollapsed", 072 "SPACE", "toggleCollapsed"})); 073 } 074 075 @Override 076 protected void addLinuxDefaults(LookAndFeelAddons addon, DefaultsList defaults) { 077 addMetalDefaults(addon, defaults); 078 } 079 080 @Override 081 protected void addMetalDefaults(LookAndFeelAddons addon, DefaultsList defaults) { 082 super.addMetalDefaults(addon, defaults); 083 084 if (MetalLookAndFeel.getCurrentTheme() instanceof OceanTheme) { 085 defaults.add(JXTaskPane.uiClassID, "org.jdesktop.swingx.plaf.misc.GlossyTaskPaneUI"); 086 } else { 087 defaults.add(JXTaskPane.uiClassID, "org.jdesktop.swingx.plaf.metal.MetalTaskPaneUI"); 088 } 089 090 //TODO use safe methods 091 defaults.add("TaskPane.foreground", UIManager.getColor("activeCaptionText")); 092 defaults.add("TaskPane.background", MetalLookAndFeel.getControl()); 093 defaults.add("TaskPane.specialTitleBackground", MetalLookAndFeel.getPrimaryControl()); 094 defaults.add("TaskPane.titleBackgroundGradientStart", MetalLookAndFeel.getPrimaryControl()); 095 defaults.add("TaskPane.titleBackgroundGradientEnd", MetalLookAndFeel.getPrimaryControlHighlight()); 096 defaults.add("TaskPane.titleForeground", MetalLookAndFeel.getControlTextColor()); 097 defaults.add("TaskPane.specialTitleForeground", MetalLookAndFeel.getControlTextColor()); 098 defaults.add("TaskPane.borderColor", MetalLookAndFeel.getPrimaryControl()); 099 defaults.add("TaskPane.titleOver", new ColorUIResource(MetalLookAndFeel.getControl().darker())); 100 defaults.add("TaskPane.specialTitleOver", MetalLookAndFeel.getPrimaryControlHighlight()); 101 } 102 103 @Override 104 protected void addWindowsDefaults(LookAndFeelAddons addon, DefaultsList defaults) { 105 super.addWindowsDefaults(addon, defaults); 106 107 if (addon instanceof WindowsLookAndFeelAddons) { 108 defaults.add(JXTaskPane.uiClassID, "org.jdesktop.swingx.plaf.windows.WindowsTaskPaneUI"); 109 110 String xpStyle = OS.getWindowsVisualStyle(); 111 if (WindowsLookAndFeelAddons.HOMESTEAD_VISUAL_STYLE 112 .equalsIgnoreCase(xpStyle)) { 113 defaults.add("TaskPane.foreground", new ColorUIResource(86, 102, 45)); 114 defaults.add("TaskPane.background", new ColorUIResource(246, 246, 236)); 115 defaults.add("TaskPane.specialTitleBackground", new ColorUIResource(224, 231, 184)); 116 defaults.add("TaskPane.titleBackgroundGradientStart", new ColorUIResource(Color.WHITE)); 117 defaults.add("TaskPane.titleBackgroundGradientEnd", new ColorUIResource(224, 231, 184)); 118 defaults.add("TaskPane.titleForeground", new ColorUIResource(86, 102, 45)); 119 defaults.add("TaskPane.titleOver", new ColorUIResource(114, 146, 29)); 120 defaults.add("TaskPane.specialTitleForeground", new ColorUIResource(86, 102, 45)); 121 defaults.add("TaskPane.specialTitleOver", new ColorUIResource(114, 146, 29)); 122 defaults.add("TaskPane.borderColor", new ColorUIResource(Color.WHITE)); 123 } else if (WindowsLookAndFeelAddons.SILVER_VISUAL_STYLE 124 .equalsIgnoreCase(xpStyle)) { 125 defaults.add("TaskPane.foreground", new ColorUIResource(Color.BLACK)); 126 defaults.add("TaskPane.background", new ColorUIResource(240, 241, 245)); 127 defaults.add("TaskPane.specialTitleBackground", new ColorUIResource(222, 222, 222)); 128 defaults.add("TaskPane.titleBackgroundGradientStart", new ColorUIResource(Color.WHITE)); 129 defaults.add("TaskPane.titleBackgroundGradientEnd", new ColorUIResource(214, 215, 224)); 130 defaults.add("TaskPane.titleForeground", new ColorUIResource(Color.BLACK)); 131 defaults.add("TaskPane.titleOver", new ColorUIResource(126, 124, 124)); 132 defaults.add("TaskPane.specialTitleForeground", new ColorUIResource(Color.BLACK)); 133 defaults.add("TaskPane.specialTitleOver", new ColorUIResource(126, 124, 124)); 134 defaults.add("TaskPane.borderColor", new ColorUIResource(Color.WHITE)); 135 } else if (OS.isWindowsVista()) { 136 //do not need to use safe method since the properties can never return null 137 final Toolkit toolkit = Toolkit.getDefaultToolkit(); 138 139 defaults.add("TaskPane.foreground", new ColorUIResource(Color.WHITE)); 140 defaults.add("TaskPane.background", 141 new ColorUIResource((Color)toolkit.getDesktopProperty("win.3d.backgroundColor"))); 142 defaults.add("TaskPane.specialTitleBackground", new ColorUIResource(33, 89, 201)); 143 defaults.add("TaskPane.titleBackgroundGradientStart", new ColorUIResource(Color.WHITE)); 144 defaults.add("TaskPane.titleBackgroundGradientEnd", 145 new ColorUIResource((Color)toolkit.getDesktopProperty("win.frame.inactiveCaptionColor"))); 146 defaults.add("TaskPane.titleForeground", 147 new ColorUIResource((Color)toolkit.getDesktopProperty("win.frame.inactiveCaptionTextColor"))); 148 defaults.add("TaskPane.specialTitleForeground", new ColorUIResource(Color.WHITE)); 149 defaults.add("TaskPane.borderColor", new ColorUIResource(Color.WHITE)); 150 } else { 151 defaults.add("TaskPane.foreground", new ColorUIResource(Color.WHITE)); 152 defaults.add("TaskPane.background", new ColorUIResource(214, 223, 247)); 153 defaults.add("TaskPane.specialTitleBackground", new ColorUIResource(33, 89, 201)); 154 defaults.add("TaskPane.titleBackgroundGradientStart", new ColorUIResource(Color.WHITE)); 155 defaults.add("TaskPane.titleBackgroundGradientEnd", new ColorUIResource(199, 212, 247)); 156 defaults.add("TaskPane.titleForeground", new ColorUIResource(33, 89, 201)); 157 defaults.add("TaskPane.specialTitleForeground", new ColorUIResource(Color.WHITE)); 158 defaults.add("TaskPane.borderColor", new ColorUIResource(Color.WHITE)); 159 } 160 } 161 162 if (addon instanceof WindowsClassicLookAndFeelAddons) { 163 defaults.add(JXTaskPane.uiClassID, "org.jdesktop.swingx.plaf.windows.WindowsClassicTaskPaneUI"); 164 defaults.add("TaskPane.foreground", new ColorUIResource(Color.BLACK)); 165 defaults.add("TaskPane.background", new ColorUIResource(Color.WHITE)); 166 defaults.add("TaskPane.specialTitleBackground", new ColorUIResource(10, 36, 106)); 167 defaults.add("TaskPane.titleBackgroundGradientStart", new ColorUIResource(212, 208, 200)); 168 defaults.add("TaskPane.titleBackgroundGradientEnd", new ColorUIResource(212, 208, 200)); 169 defaults.add("TaskPane.titleForeground", new ColorUIResource(Color.BLACK)); 170 defaults.add("TaskPane.specialTitleForeground", new ColorUIResource(Color.WHITE)); 171 defaults.add("TaskPane.borderColor", new ColorUIResource(212, 208, 200)); 172 } 173 } 174 175 @Override 176 protected void addMacDefaults(LookAndFeelAddons addon, DefaultsList defaults) { 177 super.addMacDefaults(addon, defaults); 178 179 defaults.add(JXTaskPane.uiClassID, "org.jdesktop.swingx.plaf.misc.GlossyTaskPaneUI"); 180 defaults.add("TaskPane.background", new ColorUIResource(245, 245, 245)); 181 defaults.add("TaskPane.titleForeground", new ColorUIResource(Color.BLACK)); 182 defaults.add("TaskPane.specialTitleBackground", new ColorUIResource(188,188,188)); 183 defaults.add("TaskPane.specialTitleForeground", new ColorUIResource(Color.BLACK)); 184 defaults.add("TaskPane.titleBackgroundGradientStart", new ColorUIResource(250,250,250)); 185 defaults.add("TaskPane.titleBackgroundGradientEnd", new ColorUIResource(188,188,188)); 186 defaults.add("TaskPane.borderColor", new ColorUIResource(97, 97, 97)); 187 defaults.add("TaskPane.titleOver", new ColorUIResource(125, 125, 97)); 188 defaults.add("TaskPane.specialTitleOver", new ColorUIResource(125, 125, 97)); 189 } 190 191 @Override 192 protected void addNimbusDefaults(LookAndFeelAddons addon, 193 DefaultsList defaults) { 194 super.addNimbusDefaults(addon, defaults); 195 196 defaults.add(JXTaskPane.uiClassID, 197 "org.jdesktop.swingx.plaf.nimbus.NimbusTaskPaneUI"); 198 // dynamically changing the LaF to Nimbus does not refresh correctly the 199 // control colors if they are not hard-coded due to Nimbus DerivedColors 200 // lazy initialization 201 // defaults.add("TaskPane.foreground", new 202 // ColorUIResource(UIManager.getColor("activeCaption"))); 203 defaults.add("TaskPane.foreground", new ColorUIResource(186, 190, 198)); 204 // defaults.add("TaskPane.background", new 205 // ColorUIResource(UIManager.getColor("control"))); 206 defaults.add("TaskPane.background", new ColorUIResource(214, 217, 223)); 207 // defaults.add("TaskPane.specialTitleBackground", new 208 // ColorUIResource(UIManager.getColor("nimbusBlueGrey"))); 209 defaults.add("TaskPane.specialTitleBackground", new ColorUIResource( 210 169, 176, 190)); 211 // defaults.add("TaskPane.titleBackgroundGradientStart", new 212 // ColorUIResource(UIManager.getColor("background"))); 213 defaults.add("TaskPane.titleBackgroundGradientStart", 214 new ColorUIResource(214, 217, 223)); 215 // defaults.add("TaskPane.titleBackgroundGradientEnd", new 216 // ColorUIResource(UIManager.getColor("controlLHighlight"))); 217 defaults.add("TaskPane.titleBackgroundGradientEnd", 218 new ColorUIResource(247, 248, 250)); 219 defaults.add("TaskPane.titleForeground", new ColorUIResource( 220 Color.BLACK)); 221 defaults.add("TaskPane.specialTitleForeground", new ColorUIResource( 222 Color.BLACK)); 223 // defaults.add("TaskPane.borderColor", new 224 // ColorUIResource(UIManager.getColor("nimbusBorder"))); 225 defaults 226 .add("TaskPane.borderColor", new ColorUIResource(146, 151, 161)); 227 // defaults.add("TaskPane.titleOver", new 228 // ColorUIResource(UIManager.getColor("nimbusSelection"))); 229 defaults.add("TaskPane.titleOver", new ColorUIResource(57, 105, 138)); 230 // defaults.add("TaskPane.specialTitleOver", new 231 // ColorUIResource(UIManager.getColor("nimbusSelection"))); 232 defaults.add("TaskPane.specialTitleOver", new ColorUIResource(57, 105, 233 138)); 234 235 } 236 237 238}