/* * @(#)WindowsTableHeaderUI.java 1.13 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.sun.java.swing.plaf.windows; import java.awt.*; import java.awt.event.*; import javax.swing.plaf.basic.*; import javax.swing.plaf.*; import javax.swing.table.*; import javax.swing.border.*; import javax.swing.*; import javax.swing.event.*; public class WindowsTableHeaderUI extends BasicTableHeaderUI { private TableCellRenderer originalHeaderRenderer; private int rolloverColumn = -1; public static ComponentUI createUI(JComponent h) { return new WindowsTableHeaderUI(); } public void installUI(JComponent c) { super.installUI(c); if (XPStyle.getXP() != null) { originalHeaderRenderer = header.getDefaultRenderer(); if (originalHeaderRenderer instanceof UIResource) { header.setDefaultRenderer(new XPDefaultRenderer()); } } } private void updateRolloverColumn(MouseEvent e) { if (header.getDraggedColumn() == null && header.contains(e.getPoint())) { int col = header.columnAtPoint(e.getPoint()); if (col != rolloverColumn) { rolloverColumn = col; header.repaint(); } } } protected MouseInputListener createMouseInputListener() { if (XPStyle.getXP() != null) { return new MouseInputHandler() { public void mouseMoved(MouseEvent e) { super.mouseMoved(e); updateRolloverColumn(e); } public void mouseEntered(MouseEvent e) { super.mouseEntered(e); updateRolloverColumn(e); } public void mouseExited(MouseEvent e) { super.mouseExited(e); rolloverColumn = -1; header.repaint(); } public void mousePressed(MouseEvent e) { super.mousePressed(e); if (header.getReorderingAllowed()) { rolloverColumn = -1; header.repaint(); } } public void mouseDragged(MouseEvent e) { super.mouseDragged(e); updateRolloverColumn(e); } public void mouseReleased(MouseEvent e) { super.mouseReleased(e); updateRolloverColumn(e); } }; } else { return super.createMouseInputListener(); } } public void uninstallUI(JComponent c) { if (header.getDefaultRenderer() instanceof XPDefaultRenderer) { header.setDefaultRenderer(originalHeaderRenderer); } super.uninstallUI(c); } private class XPDefaultRenderer extends DefaultTableCellRenderer implements UIResource { XPStyle.Skin skin = XPStyle.getXP().getSkin("header.headeritem"); boolean isSelected, hasFocus, hasRollover; int column; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (table != null) { JTableHeader header = table.getTableHeader(); if (header != null) { setFont(header.getFont()); } } this.isSelected = isSelected; this.hasFocus = hasFocus; this.column = column; this.hasRollover = (column == rolloverColumn); setText((value == null) ? "" : value.toString()); setBorder(new EmptyBorder(skin.getContentMargin())); return this; } private int viewIndexForColumn(TableColumn aColumn) { TableColumnModel cm = header.getColumnModel(); for (int column = 0; column < cm.getColumnCount(); column++) { if (cm.getColumn(column) == aColumn) { return column; } } return -1; } public void paint(Graphics g) { Dimension size = getSize(); int index = 0; if (column == viewIndexForColumn(header.getDraggedColumn())) { index = 2; } else if (isSelected || hasFocus || hasRollover) { index = 1; } skin.paintSkin(g, 0, 0, size.width-1, size.height-1, index); super.paint(g); } } }