summaryrefslogtreecommitdiffstats
path: root/src/cppcheckplus/control/MyListRenderer.java
blob: 14953784551acd8b847ac02b40085ed26175bf51 (plain) (blame)
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
133
134
135
136
137
138

package cppcheckplus.control;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.OverlayLayout;

import cppcheckplus.shortcut.MyShortcutItem;
import cppcheckplus.shortcut.MyShortcutPanel;

//快捷菜单
public class MyListRenderer extends DefaultListCellRenderer
{
	private JPanel itemRender;
	private int separatorHeight = 30;
	//每组List的分割Group
	private JPanel separatorPanel;
	private JLabel separatorLabel;
	private MySeparator separator;
	private Color itemTextColor;
	private Color separatorTextColor;
	private Color itemSelectedBackground;
	private Color itemSelectedBorder;
	private Font separatorFont;
	
	public MyListRenderer(MyList list)
	{
		super();
		itemRender = new JPanel(new BorderLayout());
		separatorPanel = new JPanel() {

			public Dimension getPreferredSize()
			{
				Dimension size = super.getPreferredSize();
				return new Dimension(size.width, separatorHeight);
			}

		};
		//分割Group的样式
		separatorLabel = new JLabel();
		separator = new MySeparator(0);
		separatorTextColor = Color.white;
		separatorFont = MyContorlUtil.FONT_12_BOLD;
		
		itemTextColor = MyContorlUtil.LIST_TEXT_COLOR;	
		itemSelectedBackground = new Color(199, 198, 200);
		itemSelectedBorder = new Color(163, 163, 163);	
		itemRender.setOpaque(false);
		itemRender.add(this, "Center");
		separatorPanel.setLayout(new OverlayLayout(separatorPanel));
		JPanel separatorHelpPane = new JPanel(new BorderLayout());
		separatorHelpPane.setBorder(BorderFactory.createEmptyBorder(12, 0, 0, 0));
		separatorHelpPane.add(separator);
		separatorHelpPane.setOpaque(false);
		separatorPanel.setOpaque(false);
		separatorLabel.setOpaque(true);
		separatorLabel.setBackground(MyContorlUtil.LIST_BACKGROUND);
		separatorLabel.setForeground(separatorTextColor);
		separatorLabel.setFont(separatorFont);
		separatorLabel.setVerticalAlignment(1);
		separatorLabel.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
		JPanel labelHelpPane = new JPanel(new BorderLayout());
		labelHelpPane.setBorder(BorderFactory.createEmptyBorder(6, 15, 0, 0));
		labelHelpPane.add(separatorLabel, "West");
		labelHelpPane.setOpaque(false);
		separatorPanel.add(labelHelpPane);
		separatorPanel.add(separatorHelpPane);
	}

	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
	{
		MyShortcutItem shortcutItem = (MyShortcutItem)value;
		//Group的渲染
		if(shortcutItem.isGroup())
		{
			String groupName = shortcutItem.getText();
			separatorLabel.setText(groupName);
			separatorPanel.setToolTipText(groupName);
			if (list.getParent() instanceof MyShortcutPanel)
			{
				MyShortcutPanel pane = (MyShortcutPanel)list.getParent();
				if (pane.isShrinked())
				{
					separatorLabel.setText(" ");
					separatorLabel.setOpaque(false);
				} else
				{
					separatorLabel.setOpaque(true);
				}
			}
			return separatorPanel;
		}
		//普通Item的渲染
		else 
		{
			setText(shortcutItem.getText());
			setBackground(MyContorlUtil.LIST_BACKGROUND);
			setToolTipText(shortcutItem.getToolTip());
			setIcon(shortcutItem.getIcon());
		}
	
		//判断List的父容器是否是快捷菜单面板,如果是,需要考虑收缩展开的处理
		if (list.getParent() instanceof MyShortcutPanel)
		{
			MyShortcutPanel pane = (MyShortcutPanel)list.getParent();
			if (pane.isShrinked())
			{
				setBorder(BorderFactory.createEmptyBorder(2, 7, 1, 2));
				setText("");
			} else
			{
				setBorder(BorderFactory.createEmptyBorder(2, 20, 1, 2));
			}
		}
		if (isSelected)
		{
			setBackground(itemSelectedBackground);
			itemRender.setBorder(BorderFactory.createLineBorder(itemSelectedBorder));
		} 
		else
		{
			itemRender.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
		}
		setForeground(itemTextColor);
		
		return itemRender;
	}

}