Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / TreeComboCellRenderer.java @ 1424

History | View | Annotate | Download (2.68 KB)

1
package org.gvsig.tools.swing.impl;
2

    
3
import java.awt.Component;
4
import javax.swing.ComboBoxModel;
5
import javax.swing.Icon;
6
import javax.swing.JLabel;
7
import javax.swing.JList;
8
import javax.swing.ListCellRenderer;
9
import javax.swing.UIManager;
10
import javax.swing.border.Border;
11
import javax.swing.border.EmptyBorder;
12
import javax.swing.tree.DefaultMutableTreeNode;
13
import org.gvsig.tools.swing.impl.TreeComboUtils.TreeModelToComboBoxModelAdapter;
14

    
15
public class TreeComboCellRenderer extends JLabel implements ListCellRenderer {
16

    
17
    private static final long serialVersionUID = 3732251042879578480L;
18
    private static final Border emptyBorder = new EmptyBorder(0, 0, 0, 0);
19
    private static final int OFFSET = 16;
20

    
21
    private final Icon leafIcon = (Icon) UIManager.get("Tree.leafIcon");
22
    private final Icon nodeIcon = (Icon) UIManager.get("Tree.openIcon");
23
    private final TreeModelToComboBoxModelAdapter model;
24

    
25
    public TreeComboCellRenderer(ComboBoxModel model) {
26
        this.setOpaque(true);
27
        this.model = (TreeModelToComboBoxModelAdapter) model;
28
    }
29

    
30
    @Override
31
    public Component getListCellRendererComponent(
32
            JList listbox,
33
            Object value,
34
            int index,
35
            boolean isSelected,
36
            boolean cellHasFocus) {
37
        DefaultMutableTreeNode entry = model.getNode(value);
38
        if (entry != null) {
39
            Border border;
40
            setText(getCellText(entry));
41
            setIcon(getCellIcon(entry));
42
            if (index != -1) {
43
                border = new EmptyBorder(0, OFFSET * entry.getLevel(), 0, 0);
44
            } else {
45
                border = emptyBorder;
46
            }
47

    
48
            if (UIManager.getLookAndFeel().getName().equals("CDE/Motif")) {
49
                if (index == -1) {
50
                    this.setOpaque(false);
51
                } else {
52
                    this.setOpaque(true);
53
                }
54
            } else {
55
                this.setOpaque(true);
56
            }
57

    
58
            this.setBorder(border);
59
            if (isSelected) {
60
                this.setBackground(UIManager.getColor("ComboBox.selectionBackground"));
61
                this.setForeground(UIManager.getColor("ComboBox.selectionForeground"));
62
            } else {
63
                this.setBackground(UIManager.getColor("ComboBox.background"));
64
                this.setForeground(UIManager.getColor("ComboBox.foreground"));
65
            }
66
        } else {
67
            setText("");
68
        }
69
        return this;
70
    }
71

    
72
    public Icon getCellIcon(DefaultMutableTreeNode node) {
73
        return node.getAllowsChildren() ? nodeIcon : leafIcon;
74
    }
75

    
76
    public String getCellText(DefaultMutableTreeNode node) {
77
        return node.getUserObject().toString();
78
    }
79
}