1 package jp.sourceforge.stigmata.ui.swing.filter;
3 import java.awt.BorderLayout;
4 import java.awt.GridLayout;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
8 import javax.swing.Box;
9 import javax.swing.ButtonGroup;
10 import javax.swing.DefaultListModel;
11 import javax.swing.JButton;
12 import javax.swing.JList;
13 import javax.swing.JPanel;
14 import javax.swing.JRadioButton;
15 import javax.swing.JScrollPane;
16 import javax.swing.JTextField;
17 import javax.swing.ListSelectionModel;
18 import javax.swing.event.DocumentEvent;
19 import javax.swing.event.DocumentListener;
20 import javax.swing.event.ListSelectionEvent;
21 import javax.swing.event.ListSelectionListener;
23 import jp.sourceforge.stigmata.ComparisonPairFilter;
24 import jp.sourceforge.stigmata.ComparisonPairFilterSet;
25 import jp.sourceforge.stigmata.ui.swing.GUIUtility;
26 import jp.sourceforge.stigmata.ui.swing.StigmataFrame;
27 import jp.sourceforge.talisman.i18n.Messages;
31 * @author Haruaki TAMADA
33 public class FilterSetDefinitionPane extends JPanel implements ComparisonPairFilterListener{
34 private static final long serialVersionUID = 7519306603672717119L;
36 private ComparisonPairFilterRetainable manager;
37 private StigmataFrame stigmata;
39 private JTextField name;
40 private JRadioButton matchall, matchany;
42 private DefaultListModel model;
43 private ComparisonPairFilterSet filterset;
44 private boolean buttonShown = true;
46 private JButton addfilter;
47 private JButton updatefilter;
48 private JButton removefilter;
49 private JButton upButton;
50 private JButton downButton;
52 public FilterSetDefinitionPane(StigmataFrame frame, ComparisonPairFilterRetainable manager){
53 this(frame, manager, true);
56 public FilterSetDefinitionPane(StigmataFrame frame, ComparisonPairFilterRetainable manager, boolean showButtons){
57 this.stigmata = frame;
58 this.manager = manager;
60 initLayouts(showButtons);
67 public void setFilterSet(ComparisonPairFilterSet filterset){
68 this.filterset = filterset;
69 if(filterset != null){
70 model.removeAllElements();
72 name.setText(filterset.getName());
73 matchall.setSelected(filterset.isMatchAll());
74 matchany.setSelected(filterset.isMatchAny());
75 for(ComparisonPairFilter filter: filterset){
76 model.addElement(filter);
82 public void filterAdded(ComparisonPairFilter filter){
83 model.addElement(filter);
84 list.setSelectedIndex(model.getSize() - 1);
85 updateButtonEnabled();
89 public void filterRemoved(ComparisonPairFilter filter){
90 model.removeElement(filter);
91 list.clearSelection();
92 updateButtonEnabled();
96 public void filterUpdated(ComparisonPairFilter oldfilter, ComparisonPairFilter newfilter){
97 int index = model.indexOf(oldfilter);
99 model.setElementAt(newfilter, index);
101 updateButtonEnabled();
105 public void setEnabled(boolean flag){
106 super.setEnabled(flag);
108 matchall.setEnabled(flag);
109 matchany.setEnabled(flag);
110 name.setEnabled(flag);
111 list.setEnabled(flag);
114 private void initLayouts(boolean showButtons){
115 Messages messages = stigmata.getMessages();
116 this.buttonShown = showButtons;
118 ButtonGroup group = new ButtonGroup();
119 matchall = new JRadioButton(messages.get("matchall.button.label"), true);
120 matchall.setToolTipText(messages.get("matchall.button.tooltip"));
122 matchany = new JRadioButton(messages.get("matchany.button.label"), false);
123 matchany.setToolTipText(messages.get("matchany.button.tooltip"));
126 JPanel north = new JPanel(new GridLayout(3, 1));
127 north.add(name = new JTextField());
131 addfilter = GUIUtility.createButton(messages, "newfilterset");
132 updatefilter = GUIUtility.createButton(messages, "updatefilterset");
133 removefilter = GUIUtility.createButton(messages, "removefilterset");
134 upButton = GUIUtility.createButton(messages, "moveup");
135 downButton = GUIUtility.createButton(messages, "movedown");
137 Box south = Box.createHorizontalBox();
138 south.add(Box.createHorizontalGlue());
139 south.add(addfilter);
140 south.add(Box.createHorizontalGlue());
141 south.add(updatefilter);
142 south.add(Box.createHorizontalGlue());
143 south.add(removefilter);
144 south.add(Box.createHorizontalGlue());
146 south.add(Box.createHorizontalGlue());
147 south.add(downButton);
148 south.add(Box.createHorizontalGlue());
150 model = new DefaultListModel();
151 list = new JList(model);
152 list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
154 list.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
156 public void valueChanged(ListSelectionEvent e){
157 manager.filterSelected((ComparisonPairFilter)list.getSelectedValue());
158 updateButtonEnabled();
162 addfilter.addActionListener(new ActionListener(){
164 public void actionPerformed(ActionEvent e){
165 ComparisonPairFilterSet current = createCurrentFilterSet();
167 manager.addFilterSet(filterset);
168 list.clearSelection();
169 manager.filterSelected(null);
171 updateButtonEnabled();
175 removefilter.addActionListener(new ActionListener(){
177 public void actionPerformed(ActionEvent e){
178 manager.removeFilterSet(filterset.getName());
181 matchall.setSelected(true);
182 matchany.setSelected(false);
183 model.removeAllElements();
184 manager.filterSelected(null);
186 updateButtonEnabled();
190 updatefilter.addActionListener(new ActionListener(){
192 public void actionPerformed(ActionEvent e){
193 ComparisonPairFilterSet current = createCurrentFilterSet();
194 manager.updateFilterSet(filterset.getName(), current);
196 list.clearSelection();
197 manager.filterSelected(null);
198 updateButtonEnabled();
202 ActionListener listener = new ActionListener(){
204 public void actionPerformed(ActionEvent e){
205 int index = list.getSelectedIndex();
207 if(e.getActionCommand().equals("moveup")) step = -1;
208 Object element1 = model.get(index);
209 Object element2 = model.get(index + step);
210 model.setElementAt(element1, index + step);
211 model.setElementAt(element2, index);
212 list.setSelectedIndex(index + step);
215 name.getDocument().addDocumentListener(new DocumentListener(){
217 public void changedUpdate(DocumentEvent e){
218 updateButtonEnabled();
222 public void insertUpdate(DocumentEvent e){
223 updateButtonEnabled();
227 public void removeUpdate(DocumentEvent e){
228 updateButtonEnabled();
231 upButton.addActionListener(listener);
232 downButton.addActionListener(listener);
234 JScrollPane listpane = new JScrollPane(list);
235 setLayout(new BorderLayout());
236 add(north, BorderLayout.NORTH);
237 add(listpane, BorderLayout.CENTER);
239 add(south, BorderLayout.SOUTH);
242 GUIUtility.decorateJComponent(messages, name, "filtername");
243 GUIUtility.decorateJComponent(messages, listpane, "filterorder");
245 setEnabled(buttonShown);
247 updateButtonEnabled();
250 private void updateButtonEnabled(){
252 int index = list.getSelectedIndex();
253 int size = model.getSize();
255 upButton.setEnabled(size > 1 && index > 0);
256 downButton.setEnabled(size > 1 && index < (size - 1));
257 updatefilter.setEnabled(filterset != null);
258 addfilter.setEnabled(size > 0 && name.getText().length() > 0 && manager.getFilterSet(name.getText()) == null);
259 removefilter.setEnabled(filterset != null);
263 private ComparisonPairFilterSet createCurrentFilterSet(){
264 ComparisonPairFilterSet current = new ComparisonPairFilterSet();
265 current.setName(name.getText());
266 if(matchall.isSelected()) current.setMatchAll();
267 else if(matchany.isSelected()) current.setMatchAny();
268 current.removeAllFilters();
270 for(int i = 0; i < model.getSize(); i++){
271 current.addFilter((ComparisonPairFilter)model.get(i));