OSDN Git Service

必要のないクラスを削除し,クラスの整理を行った.
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / FilterSelectionPane.java
1 package jp.sourceforge.stigmata.ui.swing;
2
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;
9 import java.util.List;
10 import java.util.Map;
11
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;
24
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;
30
31 /**
32  * 
33  * @author Haruaki TAMADA
34  */
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);
38
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;
45     private JList list;
46
47     public FilterSelectionPane(StigmataFrame stigmata, ComparisonPairFilterManager manager){
48         this.stigmata = stigmata;
49         this.manager = manager;
50
51         initLayout();
52     }
53
54     @Override
55     public void addFilterSet(ComparisonPairFilterSet filter){
56         filters.put(filter.getName(), filter);
57         enableMap.put(filter.getName(), false);
58         model.addElement(filter.getName());
59     }
60
61     @Override
62     public void filterSelected(ComparisonPairFilter filter){
63     }
64
65     @Override
66     public ComparisonPairFilterSet getFilterSet(String name){
67         return filters.get(name);
68     }
69
70     @Override
71     public void removeFilterSet(String name){
72         filters.remove(name);
73         enableMap.remove(name);
74         model.removeElement(name);
75     }
76
77     @Override
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));
83
84         if(!name.equals(filter.getName())){
85             enableMap.remove(name);
86             filters.remove(name);
87         }
88     }
89
90     public String[] getSelectedFilters(){
91         List<String> list = new ArrayList<String>();
92         for(String key: enableMap.keySet()){
93             if(enableMap.get(key)){
94                 list.add(key);
95             }
96         }
97         return list.toArray(new String[list.size()]);
98     }
99
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());
106
107         JScrollPane scroll = new JScrollPane(list);
108         filterDef = new FilterSetDefinitionPane(stigmata, this, false);
109
110         add(scroll, BorderLayout.WEST);
111         add(filterDef, BorderLayout.CENTER);
112
113         list.addListSelectionListener(new ListSelectionListener(){
114             @Override
115             public void valueChanged(ListSelectionEvent e){
116                 String name = (String)list.getSelectedValue();
117                 filterDef.setFilterSet(filters.get(name));
118                 
119                 updateUI();
120             }
121         });
122         list.addMouseListener(new MouseAdapter(){
123             @Override
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));
128                 updateUI();
129             }
130         });
131
132         for(ComparisonPairFilterSet filterset: manager.getFilterSets()){
133             enableMap.put(filterset.getName(), false);
134             filters.put(filterset.getName(), filterset);
135             model.addElement(filterset.getName());
136         }
137     }
138
139     private class CheckableListCellRenderer extends JCheckBox implements ListCellRenderer{
140         private static final long serialVersionUID = 2120743754620361163L;
141
142         public CheckableListCellRenderer(){
143             setOpaque(true);
144         }
145
146         @Override
147         public Component getListCellRendererComponent(JList list, Object v, int index, boolean isSelected, boolean cellHasFocus){
148             String value = (String)v;
149             setText(value);
150             setSelected(enableMap.get(value));
151
152             if(isSelected){
153                 setBackground(list.getSelectionBackground());
154                 setForeground(list.getSelectionForeground());
155             }
156             else{
157                 setBackground(list.getBackground());
158                 setForeground(list.getForeground());
159             }
160             Border border = null;
161             if(cellHasFocus){
162                 if(isSelected){
163                     border = UIManager.getBorder("List.focusSelectedCellHighlightBorder");
164                 }
165                 if(border == null){
166                     border = UIManager.getBorder("List.focusCellHighlightBorder");
167                 }
168             }
169             else{
170                 border = noFocusBorder;
171             }
172             setBorder(border);            
173
174             return this;
175         }
176         
177     }
178 }