001/*
002 * $Id: DatePickerAddon.java 3100 2008-10-14 22:33:10Z rah003 $
003 *
004 * Copyright 2005 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 javax.swing.BorderFactory;
024import javax.swing.LookAndFeel;
025import javax.swing.UIManager;
026import javax.swing.border.LineBorder;
027import javax.swing.plaf.BorderUIResource;
028
029import org.jdesktop.swingx.JXDatePicker;
030import org.jdesktop.swingx.plaf.basic.BasicDatePickerUI;
031import org.jdesktop.swingx.util.OS;
032
033/**
034 * @author Joshua Outwater
035 */
036public class DatePickerAddon extends AbstractComponentAddon {
037    public DatePickerAddon() {
038        super("JXDatePicker");
039    }
040
041    /**
042     * {@inheritDoc}
043     */
044    @Override
045    protected void addBasicDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
046        super.addBasicDefaults(addon, defaults);
047        
048        defaults.add(JXDatePicker.uiClassID, BasicDatePickerUI.class.getName());
049        defaults.add("JXDatePicker.border",
050                new BorderUIResource(BorderFactory.createCompoundBorder(
051                        LineBorder.createGrayLineBorder(),
052                        BorderFactory.createEmptyBorder(3, 3, 3, 3))));
053        
054        UIManagerExt.addResourceBundle(
055                "org.jdesktop.swingx.plaf.basic.resources.DatePicker");
056    }
057
058    /**
059     * {@inheritDoc}
060     */
061    @Override
062    protected void addWindowsDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
063        super.addWindowsDefaults(addon, defaults);
064        if (OS.isWindowsXP() && OS.isUsingWindowsVisualStyles()) {
065            defaults.add("JXDatePicker.arrowIcon",
066                    LookAndFeel.makeIcon(DatePickerAddon.class, "windows/resources/combo-xp.png"));
067        } else {
068            defaults.add("JXDatePicker.arrowIcon",
069                    LookAndFeel.makeIcon(DatePickerAddon.class, "windows/resources/combo-w2k.png"));
070        }
071    }
072
073    /**
074     * {@inheritDoc}
075     */
076    @Override
077    protected void addLinuxDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
078        super.addLinuxDefaults(addon, defaults);
079        
080        defaults.add("JXDatePicker.arrowIcon",
081                LookAndFeel.makeIcon(DatePickerAddon.class, "linux/resources/combo-gtk.png"));
082        
083        if (isGTK()) {
084            // Issue #667-swingx: ugly border in GTK
085            // remove the border which was installed in addBasicDefaults
086           defaults.add("JXDatePicker.border", null); 
087        }
088    }
089
090    /**
091     * 
092     * @return true if the LF is GTK.
093     */
094    private boolean isGTK() {
095        return "GTK".equals(UIManager.getLookAndFeel().getID());
096    }
097
098    /**
099     * {@inheritDoc}
100     */
101    @Override
102    protected void addMacDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
103        super.addMacDefaults(addon, defaults);
104        
105        defaults.add("JXDatePicker.arrowIcon",
106                LookAndFeel.makeIcon(DatePickerAddon.class, "macosx/resources/combo-osx.png"));
107
108        defaults.add("JXDatePicker.border", "none");
109
110    }
111    
112    /** {@inheritDoc} */
113    @Override
114    protected void addNimbusDefaults (LookAndFeelAddons addon, 
115        DefaultsList defaults) {
116        super.addNimbusDefaults (addon, defaults);
117
118        // Issue #913-swingx: ugly in Nimbus
119        // TODO: don't use an image here, Nimbus uses Painters for everything 
120        // => e.g. reuse the
121//        com.sun.java.swing.plaf.nimbus.ComboBoxComboBoxArrowButtonPainter
122        // (at the moment the OS-X icon looks most similar, it's much better
123        //  than no icon...)
124        defaults.add ("JXDatePicker.arrowIcon",
125            LookAndFeel.makeIcon (DatePickerAddon.class, 
126            "macosx/resources/combo-osx.png"));
127
128        // Issue #913-swingx: ugly in Nimbus
129        // remove the border which was installed in addBasicDefaults
130        // this is done by Nimbus
131        defaults.add ("JXDatePicker.border", null);
132    }
133
134}
135