package org.limewire.ui.swing.components; import java.awt.Color; import java.awt.Font; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.swing.JCheckBox; import javax.swing.JPanel; import javax.swing.SwingConstants; import net.miginfocom.swing.MigLayout; import org.limewire.ui.swing.util.I18n; /** * A panel that manages a list of check boxes based on a set of keys. */ public class HorizonalCheckBoxListPanel<K> extends JPanel { private final Map<K,JCheckBox> optionsMap; public HorizonalCheckBoxListPanel(Collection<K> options) { this(options, null); } public HorizonalCheckBoxListPanel(Collection<K> options, Collection<K> selected) { this(options, selected, true); } /** * Creates the panel and selects the set of boxes. */ public HorizonalCheckBoxListPanel(Collection<K> options, Collection<K> selected, boolean translate) { setLayout(new MigLayout("insets 0, gapx 5")); setOpaque(false); optionsMap = new HashMap<K,JCheckBox>(); for ( K key : options ) { JCheckBox box = new JCheckBox(translate ? I18n.tr(key.toString()) : key.toString() ); box.setOpaque(false); box.setHorizontalTextPosition(SwingConstants.RIGHT); box.setSelected(selected != null && selected.contains(key)); add(box); optionsMap.put(key, box); } } /** * Gets a check box corresponding to a certain key. */ public JCheckBox getCheckBox(K key) { return optionsMap.get(key); } /** * Return keys of all the selected check boxes. */ public Collection<K> getSelected() { Set<K> selected = new HashSet<K>(); for ( K item : optionsMap.keySet() ) { if (optionsMap.get(item).isSelected()) { selected.add(item); } } return selected; } /** * Select the check boxes with the following keys, leave the rest. */ public void setSelected(Collection<K> selectedKeys) { for ( K key : optionsMap.keySet() ) { if(selectedKeys.contains(key)) { optionsMap.get(key).setSelected(true); } else { optionsMap.get(key).setSelected(false); } } } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); if (optionsMap == null) { return; } for(JCheckBox checkBox : optionsMap.values()) { checkBox.setEnabled(enabled); } } @Override public void setFont(Font font) { super.setFont(font); if (optionsMap == null) { return; } for(JCheckBox checkBox : optionsMap.values()) { checkBox.setFont(font); } } @Override public void setForeground(Color fg) { super.setForeground(fg); if (optionsMap == null) { return; } for(JCheckBox checkBox : optionsMap.values()) { checkBox.setForeground(fg); } } }