1 package jp.sourceforge.stigmata.ui.swing;
3 import java.awt.BorderLayout;
4 import java.awt.Component;
5 import java.awt.event.MouseAdapter;
6 import java.awt.event.MouseEvent;
7 import java.util.ArrayList;
8 import java.util.HashMap;
12 import javax.swing.DefaultListModel;
13 import javax.swing.JCheckBox;
14 import javax.swing.JList;
15 import javax.swing.JPanel;
16 import javax.swing.JScrollPane;
17 import javax.swing.ListCellRenderer;
18 import javax.swing.ListSelectionModel;
19 import javax.swing.UIManager;
20 import javax.swing.border.Border;
21 import javax.swing.border.EmptyBorder;
22 import javax.swing.event.ListSelectionEvent;
23 import javax.swing.event.ListSelectionListener;
25 import jp.sourceforge.stigmata.ComparisonPairFilter;
26 import jp.sourceforge.stigmata.ComparisonPairFilterSet;
27 import jp.sourceforge.stigmata.filter.ComparisonPairFilterManager;
28 import jp.sourceforge.stigmata.ui.swing.filter.ComparisonPairFilterRetainable;
29 import jp.sourceforge.stigmata.ui.swing.filter.FilterSetDefinitionPane;
33 * @author Haruaki TAMADA
35 public class FilterSelectionPane extends JPanel implements ComparisonPairFilterRetainable{
36 private static final long serialVersionUID = 1825547576389498336L;
37 private static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1);
39 private StigmataFrame stigmata;
40 private ComparisonPairFilterManager manager;
41 private FilterSetDefinitionPane filterDef;
42 private Map<String, Boolean> enableMap = new HashMap<String, Boolean>();
43 private Map<String, ComparisonPairFilterSet> filters = new HashMap<String, ComparisonPairFilterSet>();
44 private DefaultListModel model;
47 public FilterSelectionPane(StigmataFrame stigmata, ComparisonPairFilterManager manager){
48 this.stigmata = stigmata;
49 this.manager = manager;
55 public void addFilterSet(ComparisonPairFilterSet filter){
56 filters.put(filter.getName(), filter);
57 enableMap.put(filter.getName(), false);
58 model.addElement(filter.getName());
62 public void filterSelected(ComparisonPairFilter filter){
66 public ComparisonPairFilterSet getFilterSet(String name){
67 return filters.get(name);
71 public void removeFilterSet(String name){
73 enableMap.remove(name);
74 model.removeElement(name);
78 public void updateFilterSet(String name, ComparisonPairFilterSet filter){
79 int index = model.indexOf(name);
80 model.set(index, filter.getName());
81 filters.put(filter.getName(), filter);
82 enableMap.put(filter.getName(), enableMap.get(name));
84 if(!name.equals(filter.getName())){
85 enableMap.remove(name);
90 public String[] getSelectedFilters(){
91 List<String> list = new ArrayList<String>();
92 for(String key: enableMap.keySet()){
93 if(enableMap.get(key)){
97 return list.toArray(new String[list.size()]);
100 private void initLayout(){
101 setLayout(new BorderLayout());
102 model = new DefaultListModel();
103 list = new JList(model);
104 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
105 list.setCellRenderer(new CheckableListCellRenderer());
107 JScrollPane scroll = new JScrollPane(list);
108 filterDef = new FilterSetDefinitionPane(stigmata, this, false);
110 add(scroll, BorderLayout.WEST);
111 add(filterDef, BorderLayout.CENTER);
113 list.addListSelectionListener(new ListSelectionListener(){
115 public void valueChanged(ListSelectionEvent e){
116 String name = (String)list.getSelectedValue();
117 filterDef.setFilterSet(filters.get(name));
122 list.addMouseListener(new MouseAdapter(){
124 public void mouseClicked(MouseEvent e){
125 int index = list.locationToIndex(e.getPoint());
126 String value = (String)model.getElementAt(index);
127 enableMap.put(value, !enableMap.get(value));
132 for(ComparisonPairFilterSet filterset: manager.getFilterSets()){
133 enableMap.put(filterset.getName(), false);
134 filters.put(filterset.getName(), filterset);
135 model.addElement(filterset.getName());
139 private class CheckableListCellRenderer extends JCheckBox implements ListCellRenderer{
140 private static final long serialVersionUID = 2120743754620361163L;
142 public CheckableListCellRenderer(){
147 public Component getListCellRendererComponent(JList list, Object v, int index, boolean isSelected, boolean cellHasFocus){
148 String value = (String)v;
150 setSelected(enableMap.get(value));
153 setBackground(list.getSelectionBackground());
154 setForeground(list.getSelectionForeground());
157 setBackground(list.getBackground());
158 setForeground(list.getForeground());
160 Border border = null;
163 border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
166 border = UIManager.getBorder("List.focusCellHighlightBorder");
170 border = noFocusBorder;