OSDN Git Service

d2a250d079f343d92835a372bd863db01b02d089
[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  * @version $Revision$ 
23  */
24 public class BirthmarkSelectionCheckSetPane extends BirthmarkSelectablePane{
25     private static final long serialVersionUID = 3209854654743223453L;
26
27     private JPanel checks = new JPanel();
28
29     public BirthmarkSelectionCheckSetPane(StigmataFrame stigmata){
30         super(stigmata);
31
32         initLayouts();
33     }
34
35     private void initLayouts(){
36         setLayout(new BorderLayout());
37         add(checks, BorderLayout.CENTER);
38
39         JButton checkAll = GUIUtility.createButton(getMessages(), "checkall");
40         JButton uncheckAll = GUIUtility.createButton(getMessages(), "uncheckall");
41
42         Box box = Box.createHorizontalBox();
43         box.add(Box.createHorizontalGlue());
44         box.add(checkAll);
45         box.add(Box.createHorizontalGlue());        
46         box.add(uncheckAll);
47         box.add(Box.createHorizontalGlue());
48         add(box, BorderLayout.SOUTH);
49
50         ActionListener listener = new ActionListener(){
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     protected void updateLayouts(){
69         checks.removeAll();
70         Dimension d = calculateDimension();
71         checks.setLayout(new GridLayout(d.height, d.width));
72
73         for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
74             final BirthmarkSelection elem = i.next();
75             if(elem.isVisible(isExpertMode())){
76                 JCheckBox check = new JCheckBox(elem.getService().getDisplayType());
77                 check.setSelected(elem.isSelected());
78                 check.addActionListener(new ActionListener(){
79                     public void actionPerformed(ActionEvent e){
80                         JCheckBox c = (JCheckBox)e.getSource();
81                         elem.setSelected(c.isSelected());
82                         select(elem.getService().getType(), c.isSelected());
83                         fireEvent();
84                     }
85                 });
86                 checks.add(check);
87             }
88
89             select(elem.getType(), elem.isVisible(isExpertMode()) && elem.isSelected());
90         }
91         updateUI();
92     }
93
94     private Dimension calculateDimension(){
95         int rows = 1;
96         int cols = 0;
97         for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
98             BirthmarkSelection selection = i.next();
99             if(selection.isVisible(isExpertMode())){
100                 cols++;
101             }
102         }
103
104         if(cols > 4){
105             rows = (cols / 3);
106             if((cols % 3) != 0) rows++;
107             cols = 3;
108         }
109
110         return new Dimension(cols, rows);
111     }
112 }