/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.ui; import org.apache.log4j.Logger; import java.awt.Component; import java.util.Collection; import java.util.LinkedHashMap; import javax.swing.SwingUtilities; import javax.swing.UIManager; /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ public final class LAFManager { //~ Static fields/initializers --------------------------------------------- private static final Logger logger = Logger.getLogger(LAFManager.class); private static LAFManager manager = null; //~ Instance fields -------------------------------------------------------- private final LinkedHashMap installedLookAndFeels; //~ Constructors ----------------------------------------------------------- /** * Creates a new LAFManager object. */ private LAFManager() { this.installLookAndFeels(); final UIManager.LookAndFeelInfo[] lnfinfo = UIManager.getInstalledLookAndFeels(); this.installedLookAndFeels = new LinkedHashMap(lnfinfo.length); for (int i = 0; i < lnfinfo.length; i++) { if (logger.isDebugEnabled()) { logger.debug("installed look and feel #" + i + ": '" + lnfinfo[i].getName() + "' (" + lnfinfo[i].getClassName() + ")"); // NOI18N } this.installedLookAndFeels.put(lnfinfo[i].getName(), lnfinfo[i]); } if (logger.isDebugEnabled()) { logger.debug("- SystemLookAndFeel class: '" + UIManager.getSystemLookAndFeelClassName() + "'"); // NOI18N logger.debug("- CrossPlatformLookAndFeel class: '" + UIManager.getCrossPlatformLookAndFeelClassName() + "'"); // NOI18N logger.debug("- Default look and feel: '" + this.getDefaultLookAndFeel() + "'"); // NOI18N logger.debug("- Current look and feel: '" + UIManager.getLookAndFeel() + "'"); // NOI18N } } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static LAFManager getManager() { if (manager == null) { manager = new LAFManager(); } return manager; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public UIManager.LookAndFeelInfo getDefaultLookAndFeel() { return UIManager.getInstalledLookAndFeels()[0]; } /** * DOCUMENT ME! * * @param lnfName DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean isInstalledLookAndFeel(final String lnfName) { return this.installedLookAndFeels.containsKey(lnfName); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Collection getInstalledLookAndFeelNames() { return this.installedLookAndFeels.keySet(); } /** * DOCUMENT ME! * * @param lnfName DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean changeLookAndFeel(final String lnfName) { return this.changeLookAndFeel(lnfName, null); } /** * DOCUMENT ME! * * @param lnfName DOCUMENT ME! * @param component DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean changeLookAndFeel(final String lnfName, final Component component) { final UIManager.LookAndFeelInfo lnfinfo; if (this.isInstalledLookAndFeel(lnfName)) { lnfinfo = (UIManager.LookAndFeelInfo)this.installedLookAndFeels.get(lnfName); } else { logger.warn("could not change look & feel: unknown look and feel '" + lnfName + "'"); // NOI18N lnfinfo = this.getDefaultLookAndFeel(); } try { if (logger.isInfoEnabled()) { logger.info("changing look & feel to '" + lnfinfo + "' (" + lnfinfo.getClassName() + ")"); // NOI18N } if (lnfinfo.getName().equalsIgnoreCase("Plastic 3D")) // NOI18N { if (logger.isDebugEnabled()) { logger.debug("setting Plastic 3D Theme"); // NOI18N } } UIManager.setLookAndFeel(lnfinfo.getClassName()); if (component != null) { SwingUtilities.updateComponentTreeUI(component); component.validate(); } } catch (final Exception ex) { logger.error("could not change look to '" + lnfName + "'", ex); // NOI18N return false; } return true; } /** * DOCUMENT ME! */ private void installLookAndFeels() { try { if (logger.isDebugEnabled()) { logger.debug("installing GTK+ Look & Feel"); // NOI18N } UIManager.installLookAndFeel("GTK+", "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); // NOI18N } catch (final Exception e) { logger.warn("could not install GTK+ & Feel", e); // NOI18N } try { if (logger.isDebugEnabled()) { logger.debug("installing Plastic 3D Look & Feel"); // NOI18N } UIManager.installLookAndFeel("Plastic 3D", "com.jgoodies.looks.plastic.Plastic3DLookAndFeel"); // NOI18N final String heavyComps = System.getProperty("contains.heavyweight.comps"); if ("true".equals(heavyComps)) { com.jgoodies.looks.Options.setPopupDropShadowEnabled(false); } } catch (final Exception e) { logger.warn("could not install Plastic 3D Look & Feel", e); // NOI18N } } }