OSDN Git Service

6b27cbdaf233a096027ee386bdd57b484a02e25b
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / BirthmarkSelectionCheckSetPane.java
1 package jp.sourceforge.stigmata.ui.swing;
2
3 /*
4  * $Id$
5  */
6
7 import java.awt.BorderLayout;
8 import java.awt.Dimension;
9 import java.awt.GridLayout;
10 import java.awt.event.ActionEvent;
11 import java.awt.event.ActionListener;
12 import java.util.Iterator;
13
14 import javax.swing.Box;
15 import javax.swing.JButton;
16 import javax.swing.JCheckBox;
17 import javax.swing.JPanel;
18
19 /**
20  *
21  * @author Haruaki TAMADA
22  */
23 public class BirthmarkSelectionCheckSetPane extends BirthmarkSelectablePane{
24     private static final long serialVersionUID = 3209854654743223453L;
25
26     private JPanel checks = new JPanel();
27
28     public BirthmarkSelectionCheckSetPane(StigmataFrame stigmata){
29         super(stigmata);
30
31         initLayouts();
32     }
33
34     private void initLayouts(){
35         setLayout(new BorderLayout());
36         add(checks, BorderLayout.CENTER);
37
38         JButton checkAll = GUIUtility.createButton(getMessages(), "checkall");
39         JButton uncheckAll = GUIUtility.createButton(getMessages(), "uncheckall");
40
41         Box box = Box.createHorizontalBox();
42         box.add(Box.createHorizontalGlue());
43         box.add(checkAll);
44         box.add(Box.createHorizontalGlue());        
45         box.add(uncheckAll);
46         box.add(Box.createHorizontalGlue());
47         add(box, BorderLayout.SOUTH);
48
49         ActionListener listener = new ActionListener(){
50             @Override
51             public void actionPerformed(ActionEvent e){
52                 boolean flag = e.getActionCommand().equals("checkall");
53                 for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
54                     BirthmarkSelection le = i.next();
55                     le.setSelected(flag);
56                     fireEvent();
57                 }
58                 updateLayouts();
59             }
60         };
61         checkAll.addActionListener(listener);
62         uncheckAll.addActionListener(listener);
63     }
64
65     /**
66      * update layouts and update selected birthmarks list.
67      */
68     @Override
69     protected void updateLayouts(){
70         checks.removeAll();
71         Dimension d = calculateDimension();
72         checks.setLayout(new GridLayout(d.height, d.width));
73
74         for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
75             final BirthmarkSelection elem = i.next();
76             if(elem.isVisible(isExperimentalMode())){
77                 JCheckBox check = new JCheckBox(elem.getService().getDisplayType());
78                 check.setSelected(elem.isSelected());
79                 check.addActionListener(new ActionListener(){
80                     @Override
81                     public void actionPerformed(ActionEvent e){
82                         JCheckBox c = (JCheckBox)e.getSource();
83                         elem.setSelected(c.isSelected());
84                         select(elem.getService().getType(), c.isSelected());
85                         fireEvent();
86                     }
87                 });
88                 checks.add(check);
89             }
90
91             select(elem.getType(), elem.isVisible(isExperimentalMode()) && elem.isSelected());
92         }
93         updateUI();
94     }
95
96     private Dimension calculateDimension(){
97         int rows = 1;
98         int cols = 0;
99         for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
100             BirthmarkSelection selection = i.next();
101             if(selection.isVisible(isExperimentalMode())){
102                 cols++;
103             }
104         }
105
106         if(cols > 4){
107             rows = (cols / 3);
108             if((cols % 3) != 0) rows++;
109             cols = 3;
110         }
111
112         return new Dimension(cols, rows);
113     }
114 }