OSDN Git Service

プラットフォームごとのStigmataのホームディレクトリの場所を返す一連のクラスをリファクタリングした.
[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             @Override
52             public void actionPerformed(ActionEvent e){
53                 boolean flag = e.getActionCommand().equals("checkall");
54                 for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
55                     BirthmarkSelection le = i.next();
56                     le.setSelected(flag);
57                     fireEvent();
58                 }
59                 updateLayouts();
60             }
61         };
62         checkAll.addActionListener(listener);
63         uncheckAll.addActionListener(listener);
64     }
65
66     /**
67      * update layouts and update selected birthmarks list.
68      */
69     @Override
70     protected void updateLayouts(){
71         checks.removeAll();
72         Dimension d = calculateDimension();
73         checks.setLayout(new GridLayout(d.height, d.width));
74
75         for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
76             final BirthmarkSelection elem = i.next();
77             if(elem.isVisible(isExperimentalMode())){
78                 JCheckBox check = new JCheckBox(elem.getService().getDisplayType());
79                 check.setSelected(elem.isSelected());
80                 check.addActionListener(new ActionListener(){
81                     @Override
82                     public void actionPerformed(ActionEvent e){
83                         JCheckBox c = (JCheckBox)e.getSource();
84                         elem.setSelected(c.isSelected());
85                         select(elem.getService().getType(), c.isSelected());
86                         fireEvent();
87                     }
88                 });
89                 checks.add(check);
90             }
91
92             select(elem.getType(), elem.isVisible(isExperimentalMode()) && elem.isSelected());
93         }
94         updateUI();
95     }
96
97     private Dimension calculateDimension(){
98         int rows = 1;
99         int cols = 0;
100         for(Iterator<BirthmarkSelection> i = birthmarkSelections(); i.hasNext(); ){
101             BirthmarkSelection selection = i.next();
102             if(selection.isVisible(isExperimentalMode())){
103                 cols++;
104             }
105         }
106
107         if(cols > 4){
108             rows = (cols / 3);
109             if((cols % 3) != 0) rows++;
110             cols = 3;
111         }
112
113         return new Dimension(cols, rows);
114     }
115 }