41 |
import java.awt.Graphics; |
import java.awt.Graphics; |
42 |
import java.awt.Insets; |
import java.awt.Insets; |
43 |
import java.awt.Rectangle; |
import java.awt.Rectangle; |
|
import java.awt.event.ComponentListener; |
|
|
import java.awt.event.FocusListener; |
|
|
import java.awt.event.KeyListener; |
|
|
import java.awt.event.MouseListener; |
|
|
import java.beans.PropertyChangeListener; |
|
|
import java.util.Hashtable; |
|
44 |
|
|
45 |
import javax.swing.JComponent; |
import javax.swing.JComponent; |
46 |
import javax.swing.JTree; |
import javax.swing.JTree; |
|
import javax.swing.UIDefaults; |
|
|
import javax.swing.UIManager; |
|
|
import javax.swing.tree.TreeCellEditor; |
|
|
import javax.swing.tree.TreeModel; |
|
47 |
import javax.swing.tree.TreePath; |
import javax.swing.tree.TreePath; |
|
import javax.swing.event.CellEditorListener; |
|
|
import javax.swing.event.TreeExpansionListener; |
|
|
import javax.swing.event.TreeModelListener; |
|
|
import javax.swing.event.TreeSelectionListener; |
|
48 |
import javax.swing.plaf.ComponentUI; |
import javax.swing.plaf.ComponentUI; |
49 |
import javax.swing.plaf.basic.BasicTreeUI; |
import javax.swing.plaf.basic.BasicTreeUI; |
50 |
|
|
53 |
*/ |
*/ |
54 |
public class MetalTreeUI extends BasicTreeUI |
public class MetalTreeUI extends BasicTreeUI |
55 |
{ |
{ |
|
|
|
|
/** Listeners */ |
|
|
private PropertyChangeListener propertyChangeListener; |
|
|
private FocusListener focusListener; |
|
|
private TreeSelectionListener treeSelectionListener; |
|
|
private MouseListener mouseListener; |
|
|
private KeyListener keyListener; |
|
|
private PropertyChangeListener selectionModelPropertyChangeListener; |
|
|
private ComponentListener componentListener; |
|
|
private CellEditorListener cellEditorListener; |
|
|
private TreeExpansionListener treeExpansionListener; |
|
|
private TreeModelListener treeModelListener; |
|
|
|
|
56 |
/** |
/** |
57 |
* Constructs a new instance of <code>MetalTreeUI</code>. |
* Constructs a new instance of <code>MetalTreeUI</code>. |
58 |
*/ |
*/ |
101 |
*/ |
*/ |
102 |
public void installUI(JComponent c) |
public void installUI(JComponent c) |
103 |
{ |
{ |
104 |
tree = (JTree) c; |
// TODO: What to do here, if anything? |
105 |
configureLayoutCache(); |
super.installUI(c); |
|
|
|
|
UIDefaults defaults = UIManager.getLookAndFeelDefaults(); |
|
|
tree.setFont(defaults.getFont("Tree.font")); |
|
|
tree.setForeground(defaults.getColor("Tree.foreground")); |
|
|
tree.setBackground(defaults.getColor("Tree.background")); |
|
|
tree.setOpaque(true); |
|
|
tree.setScrollsOnExpand(defaults.getBoolean("Tree.scrollsOnExpand")); |
|
|
rightChildIndent = defaults.getInt("Tree.rightChildIndent"); |
|
|
leftChildIndent = defaults.getInt("Tree.leftChildIndent"); |
|
|
setRowHeight(defaults.getInt("Tree.rowHeight")); |
|
|
tree.setRowHeight(defaults.getInt("Tree.rowHeight")); |
|
|
tree.requestFocusInWindow(false); |
|
|
|
|
|
setExpandedIcon(defaults.getIcon("Tree.expandedIcon")); |
|
|
setCollapsedIcon(defaults.getIcon("Tree.collapsedIcon")); |
|
|
|
|
|
currentCellRenderer = createDefaultCellRenderer(); |
|
|
rendererPane = createCellRendererPane(); |
|
|
createdRenderer = true; |
|
|
setCellEditor(createDefaultCellEditor()); |
|
|
createdCellEditor = true; |
|
|
TreeModel mod = tree.getModel(); |
|
|
setModel(mod); |
|
|
|
|
|
treeSelectionModel = tree.getSelectionModel(); |
|
|
drawingCache = new Hashtable(); |
|
|
nodeDimensions = createNodeDimensions(); |
|
|
|
|
|
propertyChangeListener = createPropertyChangeListener(); |
|
|
focusListener = createFocusListener(); |
|
|
treeSelectionListener = createTreeSelectionListener(); |
|
|
mouseListener = createMouseListener(); |
|
|
keyListener = createKeyListener(); |
|
|
selectionModelPropertyChangeListener = createSelectionModelPropertyChangeListener(); |
|
|
componentListener = createComponentListener(); |
|
|
cellEditorListener = createCellEditorListener(); |
|
|
treeExpansionListener = createTreeExpansionListener(); |
|
|
treeModelListener = createTreeModelListener(); |
|
|
|
|
|
editingRow = -1; |
|
|
lastSelectedRow = -1; |
|
|
|
|
|
installKeyboardActions(); |
|
|
|
|
|
tree.addPropertyChangeListener(propertyChangeListener); |
|
|
tree.addFocusListener(focusListener); |
|
|
tree.addTreeSelectionListener(treeSelectionListener); |
|
|
tree.addMouseListener(mouseListener); |
|
|
tree.addKeyListener(keyListener); |
|
|
tree.addPropertyChangeListener(selectionModelPropertyChangeListener); |
|
|
tree.addComponentListener(componentListener); |
|
|
tree.addTreeExpansionListener(treeExpansionListener); |
|
|
if (treeModel != null) |
|
|
treeModel.addTreeModelListener(treeModelListener); |
|
|
|
|
|
if (mod != null) |
|
|
{ |
|
|
TreePath path = new TreePath(mod.getRoot()); |
|
|
if (!tree.isExpanded(path)) |
|
|
toggleExpandState(path); |
|
|
} |
|
|
|
|
|
completeUIInstall(); |
|
106 |
} |
} |
107 |
|
|
108 |
/** |
/** |
122 |
*/ |
*/ |
123 |
public void uninstallUI(JComponent c) |
public void uninstallUI(JComponent c) |
124 |
{ |
{ |
125 |
tree.setFont(null); |
// TODO: What to do here? |
126 |
tree.setForeground(null); |
super.uninstallUI(c); |
|
tree.setBackground(null); |
|
|
|
|
|
uninstallKeyboardActions(); |
|
|
|
|
|
tree.removePropertyChangeListener(propertyChangeListener); |
|
|
tree.removeFocusListener(focusListener); |
|
|
tree.removeTreeSelectionListener(treeSelectionListener); |
|
|
tree.removeMouseListener(mouseListener); |
|
|
tree.removeKeyListener(keyListener); |
|
|
tree.removePropertyChangeListener(selectionModelPropertyChangeListener); |
|
|
tree.removeComponentListener(componentListener); |
|
|
tree.removeTreeExpansionListener(treeExpansionListener); |
|
|
|
|
|
TreeCellEditor tce = tree.getCellEditor(); |
|
|
if (tce != null) |
|
|
tce.removeCellEditorListener(cellEditorListener); |
|
|
TreeModel tm = tree.getModel(); |
|
|
if (tm != null) |
|
|
tm.removeTreeModelListener(treeModelListener); |
|
|
|
|
|
tree = null; |
|
|
uninstallComponents(); |
|
|
completeUIUninstall(); |
|
127 |
} |
} |
128 |
|
|
129 |
/** |
/** |