summaryrefslogtreecommitdiffstats
path: root/src/cppcheckplus/control/MyListRenderer.java
blob: b407227d34f52f7915ac2aa749fc705565996873 (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
package cppcheckplus.control;

import cppcheckplus.shortcut.MyShortcutItem;
import cppcheckplus.shortcut.MyShortcutPanel;
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;

//快捷菜单
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;
    }

}