001package org.jdesktop.swingx.plaf;
002
003import java.awt.Font;
004import java.net.URL;
005
006import javax.swing.ImageIcon;
007import javax.swing.UIManager;
008import javax.swing.plaf.IconUIResource;
009import javax.swing.plaf.InsetsUIResource;
010
011import org.jdesktop.swingx.JXSearchField.LayoutStyle;
012
013@SuppressWarnings("nls")
014public class SearchFieldAddon extends AbstractComponentAddon {
015    public static final String SEARCH_FIELD_SOURCE = "searchField";
016    public static final String BUTTON_SOURCE = "button";
017
018    public SearchFieldAddon() {
019        super("JXSearchField");
020    }
021
022    @Override
023    protected void addBasicDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
024                super.addBasicDefaults(addon, defaults);
025                defaults.add("SearchField.layoutStyle", LayoutStyle.MAC);
026                defaults.add("SearchField.icon", getIcon("basic/resources/search.gif"));
027                defaults.add("SearchField.rolloverIcon", getIcon("basic/resources/search_rollover.gif"));
028                defaults.add("SearchField.pressedIcon", getIcon("basic/resources/search.gif"));
029                defaults.add("SearchField.popupIcon", getIcon("basic/resources/search_popup.gif"));
030                defaults.add("SearchField.popupRolloverIcon", getIcon("basic/resources/search_popup_rollover.gif"));
031                defaults.add("SearchField.clearIcon", getIcon("basic/resources/clear.gif"));
032                defaults.add("SearchField.clearRolloverIcon", getIcon("basic/resources/clear_rollover.gif"));
033                defaults.add("SearchField.clearPressedIcon", getIcon("basic/resources/clear_pressed.gif"));
034                defaults.add("SearchField.buttonMargin", new InsetsUIResource(1, 1, 1, 1));
035                defaults.add("SearchField.popupSource", BUTTON_SOURCE);
036                
037                //webstart fix
038                UIManagerExt.addResourceBundle("org.jdesktop.swingx.plaf.basic.resources.SearchField");
039//              UIManager.getDefaults().addResourceBundle("org.jdesktop.swingx.plaf.basic.resources.SearchField");
040        }
041
042    @Override
043    protected void addMetalDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
044        super.addMetalDefaults(addon, defaults);
045        
046        defaults.add("SearchField.buttonMargin", new InsetsUIResource(0, 0, 1, 1));
047    }
048
049    @Override
050    protected void addWindowsDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
051        super.addWindowsDefaults(addon, defaults);
052        
053        defaults.add("SearchField.promptFontStyle", Font.ITALIC);
054        defaults.add("SearchField.layoutStyle", LayoutStyle.VISTA);
055        defaults.add("SearchField.icon", getIcon("windows/resources/search.gif"));
056        defaults.add("SearchField.rolloverIcon", getIcon("windows/resources/search_rollover.gif"));
057        defaults.add("SearchField.pressedIcon", getIcon("windows/resources/search_pressed.gif"));
058        defaults.add("SearchField.popupIcon", getIcon("windows/resources/search_popup.gif"));
059        defaults.add("SearchField.popupRolloverIcon", getIcon("windows/resources/search_popup_rollover.gif"));
060        defaults.add("SearchField.popupPressedIcon", getIcon("windows/resources/search_popup_pressed.gif"));
061        defaults.add("SearchField.clearIcon", getIcon("windows/resources/clear.gif"));
062        defaults.add("SearchField.clearRolloverIcon", getIcon("windows/resources/clear_rollover.gif"));
063        defaults.add("SearchField.clearPressedIcon", getIcon("windows/resources/clear_pressed.gif"));
064        defaults.add("SearchField.useSeperatePopupButton", Boolean.TRUE);
065        defaults.add("SearchField.popupOffset", -1);
066
067        // Do it like 'Windows Media Player' in XP:
068        // Replace the border line with the search button line on rollover.
069        // But not in classic mode!
070        if (UIManager.getLookAndFeel().getClass().getName().indexOf("Classic") == -1) {
071            defaults.add("SearchField.buttonMargin", new InsetsUIResource(0, -1, 0, -1));
072        } else {
073            defaults.add("SearchField.buttonMargin", new InsetsUIResource(0, 0, 0, 0));
074        }
075    }
076
077    @Override
078    protected void addMotifDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
079        super.addMotifDefaults(addon, defaults);
080        
081        defaults.add("SearchField.icon", getIcon("macosx/resources/search.png"));
082        defaults.add("SearchField.rolloverIcon", getIcon("macosx/resources/search.png"));
083        defaults.add("SearchField.pressedIcon", getIcon("macosx/resources/search.png"));
084        defaults.add("SearchField.popupIcon", getIcon("macosx/resources/search_popup.png"));
085        defaults.add("SearchField.popupRolloverIcon", getIcon("macosx/resources/search_popup.png"));
086        defaults.add("SearchField.popupPressedIcon", getIcon("macosx/resources/search_popup.png"));
087        defaults.add("SearchField.clearIcon", getIcon("macosx/resources/clear.png"));
088        defaults.add("SearchField.clearRolloverIcon", getIcon("macosx/resources/clear_rollover.png"));
089        defaults.add("SearchField.clearPressedIcon", getIcon("macosx/resources/clear_pressed.png"));
090    }
091
092    @Override
093    protected void addMacDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
094        super.addMacDefaults(addon, defaults);
095        
096        defaults.add("SearchField.icon", getIcon("macosx/resources/search.png"));
097        defaults.add("SearchField.rolloverIcon", getIcon("macosx/resources/search.png"));
098        defaults.add("SearchField.pressedIcon", getIcon("macosx/resources/search.png"));
099        defaults.add("SearchField.popupIcon", getIcon("macosx/resources/search_popup.png"));
100        defaults.add("SearchField.popupRolloverIcon", getIcon("macosx/resources/search_popup.png"));
101        defaults.add("SearchField.popupPressedIcon", getIcon("macosx/resources/search_popup.png"));
102        defaults.add("SearchField.clearIcon", getIcon("macosx/resources/clear.png"));
103        defaults.add("SearchField.clearRolloverIcon", getIcon("macosx/resources/clear_rollover.png"));
104        defaults.add("SearchField.clearPressedIcon", getIcon("macosx/resources/clear_pressed.png"));
105        defaults.add("SearchField.buttonMargin", new InsetsUIResource(0, 0, 0, 0));
106        defaults.add("SearchField.popupSource", SEARCH_FIELD_SOURCE);
107    }
108
109    // Workaround: Only return true, when the current LnF is Windows or PlasticXP.
110    @Override
111    protected boolean isWindows(LookAndFeelAddons addon) {
112        return super.isWindows(addon)
113                || UIManager.getLookAndFeel().getClass().getName().indexOf("Windows") != -1
114                || UIManager.getLookAndFeel().getClass().getName().indexOf("PlasticXP") != -1;
115    }
116
117    private IconUIResource getIcon(String resourceName) {
118        URL url = getClass().getResource(resourceName);
119        if (url == null) {
120            return null;
121        } else {
122            return new IconUIResource(new ImageIcon(url));
123        }
124    }
125}