aboutsummaryrefslogtreecommitdiff
path: root/libjava/javax/swing/plaf/basic/BasicListUI.java
blob: abac504503119617b683290356149cfa35abe226 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package javax.swing.plaf.basic;

import javax.swing.plaf.*;
import javax.swing.*;
import java.awt.*;


public class BasicListUI extends ListUI
{
    int gap_between_cells;
    Color textColor, disabledTextColor, pressedBackgroundColor, normalBackgroundColor;
    

    public static ComponentUI createUI(final JComponent c) 
    {
	return new BasicButtonUI();
    }

    
    public void installUI(final JComponent c) 
    {
	super.installUI(c);

	textColor                = new Color(0,0,0);
	disabledTextColor        = new Color(130, 130, 130);
	pressedBackgroundColor   = new Color(150,150,150);
	normalBackgroundColor    = new Color(192,192,192);
    }

    public Dimension getPreferredSize(JComponent c) 
    {
	JList l = (JList) c;

	System.out.println("XXXXXXXXXXXXXXXxx   getPreferredSize------------> " + l);

	
	int rows = l.getVisibleRowCount();

	ListCellRenderer render = l.getCellRenderer();
	
	int width  = 200;
	int height = rows * 16; 
	
	if (l.getModel().getSize() == 0)
	    {
		return new Dimension(width, height);
	    }

	System.out.println("BASIC_LIST_UI ====-> " + l.getModel().getElementAt(0));

	Component elt = render.getListCellRendererComponent(l,
							    l.getModel().getElementAt(0),
							    0,            
							    false,
							    false);
	Dimension a = elt.getPreferredSize();
	if (a == null)
	    {
		return new Dimension(width, height);
	    }

	return new Dimension(a.width,
			     a.height * rows);
    }

    public void paintBackground(Graphics g,
			 JComponent c)
    {
	Dimension size = getPreferredSize(c);

	g.setColor(normalBackgroundColor);
	g.fillRect(0,0,size.width, size.height);  
    }

    public void paint(Graphics g, 
		      JComponent c)
    {      
	JList l = (JList) c;

	int rows = l.getVisibleRowCount();

	ListCellRenderer render = l.getCellRenderer();

	System.out.println("RENDER-JLIST: " + rows + ", " + l.getModel().getSize());

	paintBackground(g, c);

	if (l.getModel().getSize() == 0)
	    return;

	// use element 0 to figure out how big we are:
	Component elt = render.getListCellRendererComponent(l,
							    l.getModel().getElementAt(0),
							    0,       
							    false,
							    false);
	Dimension dim = elt.getPreferredSize();
	
	Rectangle a = new Rectangle(0,
				    0,
				    dim.width,
				    dim.height);

	for (int i=0;i<l.getModel().getSize();i++)
	    {
		boolean is_sel = false;
		boolean has_focus = false;

		Component comp = render.getListCellRendererComponent(l,
								     l.getModel().getElementAt(i),
								     i,            
								     is_sel,
								     has_focus);

		//System.out.println("AAAAA=> " + a + ", " + comp + ", index = " + i);

		comp.setBounds(a);

		comp.paint(g);

		a.y += dim.height + gap_between_cells;
	    }
    }
}