package com.vci.client.ui.tree;
|
|
import java.awt.BorderLayout;
|
import java.awt.Component;
|
|
import javax.swing.JPanel;
|
import javax.swing.JTree;
|
import javax.swing.tree.TreeCellRenderer;
|
import javax.swing.tree.TreePath;
|
|
import com.vci.client.ui.swing.CheckBoxLabel;
|
|
public class CheckBoxTreeCellRenderer extends JPanel implements TreeCellRenderer{
|
|
/**
|
*
|
*/
|
private static final long serialVersionUID = -167967084338672613L;
|
private CheckBoxTreeSelectionModel selectionModel;
|
private CheckBoxLabel label = new CheckBoxLabel();
|
private TreeCellRenderer delegate;
|
|
public CheckBoxTreeCellRenderer(TreeCellRenderer delegate, CheckBoxTreeSelectionModel selectionModel) {
|
this.delegate = delegate;
|
this.selectionModel = selectionModel;
|
setLayout(new BorderLayout());
|
setOpaque(false);
|
label.setOpaque(false);
|
}
|
|
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
|
boolean expanded, boolean leaf, int row, boolean hasFocus) {
|
Component renderer = delegate.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
|
TreePath path = tree.getPathForRow(row);
|
if(path!=null){
|
if(selectionModel.isPathSelected(path, true)) {
|
label.setState(CheckBoxLabel.SELECTED);
|
} else {
|
label.setState(selectionModel.isPartiallySelected(path) ? null : CheckBoxLabel.NOT_SELECTED);
|
}
|
}
|
removeAll();
|
add(label, BorderLayout.WEST);
|
add(renderer, BorderLayout.CENTER);
|
return this;
|
}
|
}
|