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}