/*
* $Id: ColumnHeaderRendererAddon.java,v 1.13 2008/12/16 09:58:59 kleopatra Exp $
*
* Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
* Santa Clara, California 95054, U.S.A. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.jdesktop.swingx.plaf;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.plaf.BorderUIResource;
import javax.swing.plaf.metal.MetalBorders;
import org.jdesktop.swingx.plaf.windows.WindowsClassicLookAndFeelAddons;
import org.jdesktop.swingx.table.ColumnHeaderRenderer;
import org.jdesktop.swingx.util.JVM;
import org.jdesktop.swingx.util.OS;
/**
* Addon for ColumnHeaderRenderer.<p>
* Loads LF specific sort icons.
*
* @author Jeanette Winzenburg
* @author Karl Schaefer
*/
public class ColumnHeaderRendererAddon extends AbstractComponentAddon {
@SuppressWarnings("unused")
private static final Logger LOG = Logger
.getLogger(ColumnHeaderRendererAddon.class.getName());
public ColumnHeaderRendererAddon() {
super("ColumnHeaderRenderer");
}
/**
* {@inheritDoc}
*/
@Override
protected void addBasicDefaults(LookAndFeelAddons addon,
DefaultsList defaults) {
super.addBasicDefaults(addon, defaults);
defaults.add(ColumnHeaderRenderer.UP_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "basic/resources/sort-jlf-up.png"));
defaults.add(ColumnHeaderRenderer.DOWN_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "basic/resources/sort-jlf-dn.png"));
hackMetalBorder(addon, defaults);
}
private void hackMetalBorder(LookAndFeelAddons addon, DefaultsList defaults) {
Border border = UIManager.getBorder("TableHeader.cellBorder");
if (border instanceof MetalBorders.TableHeaderBorder) {
border = new BorderUIResource.CompoundBorderUIResource(border,
BorderFactory.createEmptyBorder());
// too heavyweight ...
// UIManager.put("TableHeader.cellBorder", border);
// LOG.info("updated border " + border);
defaults.add(ColumnHeaderRenderer.METAL_BORDER_HACK, border);
}
}
/**
* {@inheritDoc}
*/
@Override
protected void addLinuxDefaults(LookAndFeelAddons addon,
DefaultsList defaults) {
super.addLinuxDefaults(addon, defaults);
if (isSynth()) {
defaults.add(ColumnHeaderRenderer.UP_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "linux/resources/sort-gtk-up.png"));
defaults.add(ColumnHeaderRenderer.DOWN_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "linux/resources/sort-gtk-dn.png"));
}
}
/**
* {@inheritDoc}
*/
@Override
protected void addMacDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
super.addMacDefaults(addon, defaults);
defaults.add(ColumnHeaderRenderer.UP_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "macosx/resources/sort-osx-up.png"));
defaults.add(ColumnHeaderRenderer.DOWN_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "macosx/resources/sort-osx-dn.png"));
}
/**
* {@inheritDoc}
*/
@Override
protected void addWindowsDefaults(LookAndFeelAddons addon, DefaultsList defaults) {
super.addWindowsDefaults(addon, defaults);
if (OS.isWindowsXP()) {
defaults.add(ColumnHeaderRenderer.UP_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "windows/resources/sort-xp-up.png"));
defaults.add(ColumnHeaderRenderer.DOWN_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "windows/resources/sort-xp-dn.png"));
} else {
defaults.add(ColumnHeaderRenderer.UP_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "windows/resources/sort-w2k-up.png"));
defaults.add(ColumnHeaderRenderer.DOWN_ICON_KEY,
LookAndFeel.makeIcon(ColumnHeaderRendererAddon.class, "windows/resources/sort-w2k-dn.png"));
}
hackVistaHeaderBorder(addon, defaults);
}
/**
* Hack around the oversized vista header border installed by core.
* Registers a (5,5,5,5) empty border for vista themes. Does nothing if the
* OS is not Vista or the addon is classic windows or the JVM isn't 1.5.
*
* PENDING: can we have XP themes under vista? If so, this needs to be changed -
* most probably the xp border is okay.
*
* @param addon
* @param defaults
*/
private void hackVistaHeaderBorder(LookAndFeelAddons addon, DefaultsList defaults) {
// do nothing if not vista or for classic design under vista
if (!OS.isWindowsVista() || (addon instanceof WindowsClassicLookAndFeelAddons)
|| !JVM.current().isOneDotFive())
return;
defaults.add(ColumnHeaderRenderer.VISTA_BORDER_HACK,
new BorderUIResource.EmptyBorderUIResource(5, 5, 5, 5));
}
}