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    }