Moved UI components to community/platform/util
[fedora-idea.git] / platform / util / src / com / intellij / ui / CheckBoxList.java
blob9570eb4abc13af560f2c5d778ec814e7ed6170cc
1 package com.intellij.ui;
3 import javax.swing.*;
4 import javax.swing.border.Border;
5 import javax.swing.border.EmptyBorder;
6 import javax.swing.plaf.basic.BasicRadioButtonUI;
7 import java.awt.*;
8 import java.awt.event.*;
10 /**
11 * @author oleg
13 public class CheckBoxList extends JList {
14 private static final Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
15 private static final int DEFAULT_CHECK_BOX_WIDTH = 20;
17 public CheckBoxList(final ListModel dataModel, final CheckBoxListListener checkBoxListListener) {
18 super(dataModel);
19 setCellRenderer(new CellRenderer());
20 setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
21 setBorder(BorderFactory.createEtchedBorder());
22 addKeyListener(new KeyAdapter() {
23 @Override
24 public void keyTyped(KeyEvent e) {
25 if (e.getKeyChar() == ' ') {
26 int index = CheckBoxList.this.getSelectedIndex();
28 if (index >= 0) {
29 JCheckBox checkbox = (JCheckBox)getModel().getElementAt(index);
30 setSelected(checkbox, index, checkBoxListListener);
34 });
35 addMouseListener(new MouseAdapter() {
36 public void mouseClicked(MouseEvent e) {
37 if (isEnabled()) {
38 int index = locationToIndex(e.getPoint());
40 if (index != -1) {
41 JCheckBox checkbox = (JCheckBox)getModel().getElementAt(index);
42 int iconArea;
43 try {
44 iconArea = ((BasicRadioButtonUI)checkbox.getUI()).getDefaultIcon().getIconWidth();
46 catch (ClassCastException c) {
47 iconArea = DEFAULT_CHECK_BOX_WIDTH;
49 if (e.getX() < iconArea) {
50 setSelected(checkbox, index, checkBoxListListener);
55 });
58 private void setSelected(JCheckBox checkbox, int index, CheckBoxListListener checkBoxListListener) {
59 boolean value = !checkbox.isSelected();
60 checkbox.setSelected(value);
61 repaint();
62 checkBoxListListener.checkBoxSelectionChanged(index, value);
65 private class CellRenderer implements ListCellRenderer {
66 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
67 JCheckBox checkbox = (JCheckBox)value;
68 checkbox.setBackground(getBackgound(isSelected, checkbox));
69 checkbox.setForeground(getForeGround(isSelected, checkbox));
70 checkbox.setEnabled(isEnabled());
71 checkbox.setFont(getFont(checkbox));
72 checkbox.setFocusPainted(false);
73 checkbox.setBorderPainted(true);
74 checkbox.setBorder(isSelected ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder);
75 return checkbox;
79 protected Font getFont(final JCheckBox checkbox) {
80 return getFont();
83 protected Color getBackgound(final boolean isSelected, final JCheckBox checkbox) {
84 return isSelected ? getSelectionBackground() : getBackground();
87 protected Color getForeGround(final boolean isSelected, final JCheckBox checkbox) {
88 return isSelected ? getSelectionForeground() : getForeground();