create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / preset / DeselectableComboBox.java
1 package net.sf.openrocket.gui.preset;
2
3 import javax.swing.*;
4 import javax.swing.plaf.basic.BasicComboBoxRenderer;
5 import java.awt.*;
6 import java.util.HashSet;
7 import java.util.Set;
8
9 /**
10  * A combo box that allows for items to be deselected.
11  */
12 public class DeselectableComboBox extends JComboBox {
13
14     public DeselectableComboBox() {
15         super();
16         super.setRenderer(new DeselectedtemsRenderer());
17     }
18
19     private Set disabled_items = new HashSet();
20
21     public void addItem(Object anObject, boolean disabled) {
22         super.addItem(anObject);
23         if (disabled) {
24             disabled_items.add(getItemCount() - 1);
25         }
26     }
27
28     @Override
29     public void removeAllItems() {
30         super.removeAllItems();
31         disabled_items = new HashSet();
32     }
33
34     @Override
35     public void removeItemAt(final int anIndex) {
36         super.removeItemAt(anIndex);
37         disabled_items.remove(anIndex);
38     }
39
40     @Override
41     public void removeItem(final Object anObject) {
42         for (int i = 0; i < getItemCount(); i++) {
43             if (getItemAt(i) == anObject) {
44                 disabled_items.remove(i);
45             }
46         }
47         super.removeItem(anObject);
48     }
49
50     @Override
51     public void setSelectedIndex(int index) {
52         if (!disabled_items.contains(index)) {
53             super.setSelectedIndex(index);
54         }
55     }
56
57     private class DeselectedtemsRenderer extends BasicComboBoxRenderer {
58
59         @Override
60         public Component getListCellRendererComponent(JList list,
61                                                       Object value,
62                                                       int index,
63                                                       boolean isSelected,
64                                                       boolean cellHasFocus) {
65
66             if (isSelected) {
67                 setBackground(list.getSelectionBackground());
68                 setForeground(list.getSelectionForeground());
69             }
70             else {
71                 setBackground(list.getBackground());
72                 setForeground(list.getForeground());
73             }
74             if (disabled_items.contains(index)) {
75                 setBackground(list.getBackground());
76                 setForeground(UIManager.getColor("Label.disabledForeground"));
77             }
78             setFont(list.getFont());
79             setText((value == null) ? "" : value.toString());
80             return this;
81         }
82     }
83 }